极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1171|回复: 14

PS2無線搖桿+雙馬達+雙舵機+LED燈 測試

  [复制链接]
发表于 2017-3-17 14:27:27 | 显示全部楼层 |阅读模式
本帖最后由 cjs1748 于 2017-3-26 22:03 编辑

  1. #include <PS2X_lib.h>  //導入PS2搖桿庫v1.8
  2. #include <Servo.h>    //導入舵機庫
  3. PS2X ps2x;

  4. int PS2 = 0;
  5. Servo LXservo;         //建造LX舵機
  6. Servo RXservo;         //建造LY舵機

  7. const int Ain1 = 4;    // direction pin 1
  8. const int Ain2 = 9;    // direction pin 2
  9. const int enA = 6;    // PWM pin 控制轉速用
  10. const int Bin1 = 7;    // direction pin 1
  11. const int Bin2 = 8;    // direction pin 2
  12. const int enB = 5;    // PWM pin 控制轉速用,我用minipro D9 PWM 無法使用,所以跟D5互換

  13. int fspeedLY;           // 指定LY轉速變數
  14. int fspeedRY;           // 指定RY轉速變數

  15. void setup(){
  16.   LXservo.attach(2);  // 指定LX舵機接D2腳位
  17.   RXservo.attach(3);  // 指定RX舵機接D2腳位
  18.   
  19.   PS2 = ps2x.config_gamepad(13,11,10,12, true, true);   //指定PS2搖桿腳位及類比搖桿開啟
  20.   
  21.   pinMode(Ain1, OUTPUT);      // connection to TB6612FNG
  22.   pinMode(Ain2, OUTPUT);      // connection to TB6612FNG
  23.   pinMode(enA, OUTPUT);       // connection to TB6612FNG
  24.   pinMode(Bin1, OUTPUT);      // connection to TB6612FNG
  25.   pinMode(Bin2, OUTPUT);      // connection to TB6612FNG
  26.   pinMode(enB, OUTPUT);       // connection to TB6612FNG
  27.   pinMode(A0, OUTPUT);   // 三角和圓形控制的LED
  28.   pinMode(A1, OUTPUT);   // 四方和X控制的LED
  29.   pinMode(A2, OUTPUT);   // LY軸控制的LED燈
  30.   pinMode(A3, OUTPUT);   // RY軸控制的LED燈
  31.   pinMode(A4, OUTPUT);   // LX軸控制的LED燈
  32.   pinMode(A5, OUTPUT);   // LX軸控制的LED燈
  33.   pinMode(A6, OUTPUT);   // RX軸控制的LED燈 無作用
  34.   pinMode(A7, OUTPUT);   // RX軸控制的LED燈 無作用
  35.   
  36. }

  37. void loop(){
  38.   ps2x.read_gamepad();
  39.   
  40.    if(ps2x.ButtonPressed(PSB_CIRCLE)) digitalWrite(A0, LOW);
  41.    if(ps2x.ButtonPressed(PSB_TRIANGLE)) digitalWrite(A0, HIGH);
  42.    if(ps2x.ButtonPressed(PSB_CROSS)) digitalWrite(A1, LOW);  
  43.    if(ps2x.ButtonPressed(PSB_SQUARE)) digitalWrite(A1, HIGH);
  44.    
  45.    if (ps2x.Analog(PSS_LY) == 128) analogWrite(enA, 0);
  46.    if (ps2x.Analog(PSS_LY) > 128){
  47.     fspeedLY = map(ps2x.Analog(PSS_LY), 129, 255, 0, 150);  // LY搖桿對應馬達驅動的值 0~150即可以達到全速(配合電壓及馬達樣式調整)
  48.     digitalWrite(Ain1, LOW);
  49.     digitalWrite(Ain2, HIGH);
  50.     analogWrite(enA, fspeedLY);
  51.     digitalWrite(A2, HIGH);
  52.   }
  53.    if (ps2x.Analog(PSS_LY) < 128){
  54.     fspeedLY = map(ps2x.Analog(PSS_LY), 0, 127, 150, 0);
  55.     digitalWrite(Ain1, HIGH);
  56.     digitalWrite(Ain2, LOW);
  57.     analogWrite(enA, fspeedLY);
  58.     digitalWrite(A2, LOW);
  59.   }
  60.    if (ps2x.Analog(PSS_RY) == 128) analogWrite(enB, 0);
  61.    if (ps2x.Analog(PSS_RY) > 128){
  62.     fspeedRY = map(ps2x.Analog(PSS_RY), 129, 255, 0, 150);
  63.     digitalWrite(Bin1, LOW);
  64.     digitalWrite(Bin2, HIGH);
  65.     analogWrite(enB, fspeedRY);
  66.     digitalWrite(A3, HIGH);
  67.   }
  68.    if (ps2x.Analog(PSS_RY) < 128){
  69.     fspeedRY = map(ps2x.Analog(PSS_RY), 0, 127, 150, 0);
  70.     digitalWrite(Bin1, HIGH);
  71.     digitalWrite(Bin2, LOW);
  72.     analogWrite(enB, fspeedRY);
  73.     digitalWrite(A3, LOW);
  74.   }
  75.   
  76.   LXservo.write(map(ps2x.Analog(PSS_LX), 0, 255, 20, 160));  // LX搖桿對應舵機角度 20~160

  77.   RXservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 20, 160));
  78.   
  79.     if (ps2x.Analog(PSS_LX) < 120){
  80.     digitalWrite(A4, HIGH);
  81.     digitalWrite(A5, LOW);
  82.   }
  83.     if (ps2x.Analog(PSS_LX) > 150){
  84.     digitalWrite(A4, LOW);
  85.     digitalWrite(A5, HIGH);
  86.   }  
  87.     if (ps2x.Analog(PSS_LX) > 120 && ps2x.Analog(PSS_LX) < 150){
  88.     digitalWrite(A4, LOW);
  89.     digitalWrite(A5, LOW);
  90.   }
  91.     if (ps2x.Analog(PSS_RX) < 120){
  92.     digitalWrite(A6, HIGH);
  93.     digitalWrite(A7, LOW);
  94.   }
  95.     if (ps2x.Analog(PSS_RX) > 150){
  96.     digitalWrite(A6, LOW);
  97.     digitalWrite(A7, HIGH);
  98.   }  
  99.     if (ps2x.Analog(PSS_RX) > 120 && ps2x.Analog(PSS_RX) < 150){
  100.     digitalWrite(A6, LOW);
  101.     digitalWrite(A7, LOW);
  102.   }
  103.   
  104.   delay(50);
  105. }   
复制代码



之前做過六個舵機的測試,結果時間一久就都忘了!!又重新測試!!
所以趕快留一個紀錄!!下次就不用再撞牆了!!

1.外部電源12V1.5A 對馬達驅動板及MINIPRO RAW腳
2.馬達驅動板邏輯電源及PS2接收器接3.3V
3.UNO 及 MINIPRO 都測試成功
PS2CARJJ.zip (13.74 KB, 下载次数: 54)
PS2CAR-1024.jpg
Untitled Sketch_bb.jpg

Arduino-PS2X-master.zip

13.13 KB, 下载次数: 64

搖桿庫

评分

参与人数 1威望 +30 收起 理由
Ansifa + 30 支持原创,鼓励一下

查看全部评分

回复

使用道具 举报

发表于 2017-3-17 16:45:18 | 显示全部楼层
占个沙发,顶一个!如果有具体的硬件连接图就更好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 19:06:33 | 显示全部楼层
董董soul 发表于 2017-3-17 16:45
占个沙发,顶一个!如果有具体的硬件连接图就更好了

下午才在爬您的文說.....
您來這發言真是我這個菜鳥的榮幸!!
.
.
本來是要畫圖的,但是fritzing找不到TB6612FNG的圖,所以就放棄了....
基本上,接腳在程式內都有說明,待會再嘗試畫畫看!!
回复 支持 反对

使用道具 举报

发表于 2017-3-19 22:53:00 | 显示全部楼层
没接触过这个ps2的无线摇杆,楼主能给点资料吗?
回复 支持 反对

使用道具 举报

发表于 2017-3-19 23:01:17 | 显示全部楼层
建议直接用5v电源供电,这种马达耗电不大,画图用cadsoft的eagle元件库非常丰富,多到你怕,适合进一步学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-19 23:42:55 | 显示全部楼层
Ansifa 发表于 2017-3-19 23:01
建议直接用5v电源供电,这种马达耗电不大,画图用cadsoft的eagle元件库非常丰富,多到你怕,适合进一步学习

5V我有使用過(UNO),但是減速馬達沒動作!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-20 18:17:21 | 显示全部楼层
duanyz 发表于 2017-3-19 22:53
没接触过这个ps2的无线摇杆,楼主能给点资料吗?

http://geek-workshop.com/thread-172-14-1.html
站內大神的教學~~
或是自己搜索 PS2 搖桿
資料真的是很多~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-23 19:59:29 | 显示全部楼层
本帖最后由 cjs1748 于 2017-3-30 18:49 编辑

使用NANO加擴充版也測試OK!!
注意喔!! PS2搖桿的電源輸入腳是沒接線的.....
但是可以正常使用.
不過D9的PWM一樣不太正常..

NANI

NANI
回复 支持 反对

使用道具 举报

发表于 2017-3-24 10:51:50 | 显示全部楼层
3Q for sharing.
無線搖桿那裡買的有連結嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-24 23:09:32 来自手机 | 显示全部楼层
我在沒屋頂買的,不過應該也是淘寶網過來的。
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-12-15 21:57 , Processed in 0.057155 second(s), 10 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表