wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13623|回復: 11
收起左側

PS2遙控車資料分享-51單片機,stm32,arduino,樹莓派源代碼

  [復制鏈接]
ID:402431 發表于 2018-10-2 21:09 | 顯示全部樓層 |閱讀模式
Ps2遙控車資料分享(非本人所寫,隨ps2遙控器購買時贈送,供大家學習之用)--51,stm32,arduino,樹莓派  代碼,

代碼自己看,自己調試,在此不做詳解。

1PS2手柄介紹
              PS2 手柄是游戲機的遙控手柄。psx 系列游戲主機在全球很是暢銷。不知什么時候便有人打起 PS2 手柄的主意,破解了通訊協議,使得手柄可以接在其他器件上遙控使用,比如遙控我們熟悉的機器人。突出的特點是現在這款手柄性價比極高。按鍵豐富,方便擴展到其它應用中。
PS2 手柄介紹:
              PS2 由手柄與接收器兩部分組成,手柄主要負責發送按鍵信息。都接通電源并打開手柄開關時,手柄與接收器自動配對連接,在未配對成功的狀態下,接收器綠燈閃爍,手柄上的燈也會閃爍,配對成功后,接收器上綠燈常亮,手柄上燈也常亮,這時可以按“MODE”鍵,選擇手柄發送模式,紅燈模式:遙桿輸出模擬值;綠燈模式:遙桿對應上面四個按鍵,只有四個極限方向對應。
接收器和主機(單片機)相連,實現主機與手柄之間的通訊。
接收器引腳輸出:
1
2
3
4
5
6
7
8
9
DI/DAT
DO/CMD
NC
GND
VDD
CS/SEL
CLK
NC
ACK

接收器圖片
圖 1.1 接收器引腳序號
DI/DAT:信號流向,從手柄到主機,此信號是一個 8bit 的串行數據,同步傳送于時鐘
的下降沿。信號的讀取在時鐘由高到低的變化過程中完成。
DO/CMD信號流向,從主機到手柄,此信號和 DI 相對,信號是一個 8bit 的串行數據,同步傳送于時鐘的下降沿。
NC空端口;
GND電源地;
VDD接收器工作電源,電源范圍 3~5V;
CS/SEL用于提供手柄觸發信號。在通訊期間,處于低電平;
CLK時鐘信號,由主機發出,用于保持數據同步;
NC空端口;
ACK從手柄到主機的應答信號。此信號在每個 8bits 數據發送的最后一個周期變低并且 CS 一直保持低電平,如果 CS 信號不變低,約 60 微秒PS 主機會試另一個外設。在編程時未使用ACK 端口。當主機想讀手柄數據時,將會拉低 CS 線電平,并發出一個命令“0x01”;手柄會回復它的ID“0x41=模擬綠燈,0x73=模擬紅燈”;在手柄發送 ID 的同時,主機將傳送 0x42,請求數據;隨后手柄發送出 0x5A,告訴主機“數據來了”。
1:數據意義對照表
順序
DO
DI
Bit0、Bit1、Bit2、Bit3、Bit4、Bit5、Bit6、Bit7、
0
0X01
idle

1
0x42
ID

2
idle
0x5A

3
idle
data
SELECT、L3、R3、START、UP、RIGHT、DOWN、LEFT
4
idle
data
L2、R2、L1、R1、△、○、╳、□
5
idle
data
PSS_RX(0x00=left、0xFF=right)
6
idle
data
PSS_RY(0x00=up、0xFF=down)
7
idle
data
PSS_LX(0x00=left、0xFF=right)
8
idle
data
PSS_LY(0x00=up、0xFF=down)

當有按鍵按下,對應位為“0”,其他位為“1”,例如當鍵“SELECT”被按下時,
Data[3]=11111110B,
紅燈模式時:左右搖桿發送模擬值,0x00~0xFF 之間,且搖桿按下的鍵值值 L3、R3 有
效;
綠燈模式時:左右搖桿模擬值為無效,推到極限時,對應發送 UP、RIGHT、DOWN、
LEFT、△、○、╳、□,按鍵 L3、R3 無效。
2硬件連接方式
接收器與 stm32平衡車 連接方式
1
2
3
4
5
6
7
8
9
DI/DAT
DO/CMD
NC
GND
VDD
CS/SEL
CLK
NC
ACK
接收器引腳
功能腳
STM32
1
DI
PA8
2
DO
PA9
4
GND
GND
5
VDD
VCC
6
CS
PA10
7
CLK
PA11
3按鍵對應說明

模式我們選擇紅燈模式,這樣可以使用遙桿流暢的控制小車。其他所有按鍵接口都有留出來,方便后續自己DIY按鍵功能。

模擬值對應XY坐標圖:



PS2_4WD智能小車(51版)程序源碼(部分):

  1. #include "STC12C5A60S2.h"
  2. #include "stdio.h"
  3. #include "ps2.h"

  4. #define ON 1     //使能LED
  5. #define OFF 0    //禁止LED
  6.                                                                                                       
  7. //定義電機引腳
  8. sbit Left_motor_go=P2^1;           //左電機前進AIN2
  9. sbit Left_motor_back=P2^2;           //左電機后退AIN1
  10. sbit Right_motor_go=P2^4;           //右電機前進BIN2
  11. sbit Right_motor_back=P2^3;           //右電機后退BIN1
  12. sbit Left_motor_pwm=P2^0;           //左電機控速PWMA
  13. sbit Right_motor_pwm=P2^5;           //右電機控速PWMB

  14. unsigned char pwm_val_left  =0; //變量定義
  15. unsigned char pwm_val_right =0;

  16. //速度調節變量 0-200,0最小,200最大
  17. unsigned char push_val_left =150;  // 左電機占空比push_val_left/200
  18. unsigned char push_val_right=150;  // 右電機占空比push_val_right/200

  19. //蜂鳴器引腳定義
  20. sbit FM=P2^7;

  21. //定義舵機引腳
  22. sbit ServoPin=P0^5;


  23. //舵機定時計數
  24. int servocount=0;

  25. //定義舵機角度值
  26. int myangle = 0;

  27. //定義RGB七彩燈引腳
  28. sbit LED_R = P4^6;        //LED_R接在STC12C5A60S2的EA(P4^6)管腳
  29. sbit LED_G = P4^5;  //LED_G接在STC12C5A60S2的ALE(P4^5)管腳
  30. sbit LED_B = P4^4;        //LED_B接在STC12C5A60S2的PSEN(P4^4)管腳

  31. //電機控速開關                          
  32. bit Left_PWM_ON=1;
  33. bit Right_PWM_ON=1;

  34. //時間變量和小車速度,小車狀態變量定義
  35. unsigned char  time;                  
  36. int g_carstate = 0;
  37. int g_ServoState = 0;     //1左搖 2 右搖
  38. //小車速度檔位
  39. int g_volume = 0;

  40. //小車運行狀態枚舉
  41. enum{
  42.   enSTOP = 0,
  43.   enRUN,
  44.   enBACK,
  45.   enLEFT,
  46.   enRIGHT,
  47.   enUPLEFT,
  48.   enUPRIGHT,
  49.   enDOWNLEFT,
  50.   enDOWNRIGHT,
  51.   enSPINLEFT,
  52.   enSPINRIGHT
  53. }enCarState;

  54. //宏定義電機速度檔位
  55. #define         enMinMin() do{\
  56.                        push_val_left =50; \
  57.                                            push_val_right =50;\
  58.                                            }while(0)

  59. #define         enMin() do{\
  60.                        push_val_left =100; \
  61.                                            push_val_right =100;\
  62.                                            }while(0)

  63. #define         enMidle() do{\
  64.                        push_val_left =150; \
  65.                                            push_val_right =150;\
  66.                                            }while(0)

  67. #define         enMax() do{\
  68.                        push_val_left =200; \
  69.                                            push_val_right =200;\
  70.                                            }while(0)
  71.                                                                                     
  72. /**
  73. * Function       delay
  74. * @author        Danny
  75. * @date          2017.08.16
  76. * @brief         延時函數
  77. * @param         xms:延時時間(ms)
  78. * @retval        void
  79. * @par History   無
  80. */      
  81. void delay(unsigned int xms)                              
  82. {
  83.     unsigned int i,j;
  84.         for(i=xms;i>0;i--)                     
  85.     for(j=850;j>0;j--);
  86. }

  87. /**
  88. * Function       pwm_out_left_motor
  89. * @author        Danny
  90. * @date          2017.08.16
  91. * @brief         左電機調速        ,調節push_val_left的值改變電機轉速,占空比
  92. * @param         void
  93. * @retval        void
  94. * @par History   無
  95. */                        
  96. void pwm_out_left_motor(void)               
  97. {  
  98.      if(Left_PWM_ON)
  99.      {
  100.           if(pwm_val_left<=push_val_left)
  101.               {
  102.                   Left_motor_pwm =1;
  103.               }
  104.               else
  105.               {
  106.                    Left_motor_pwm=0;
  107.           }
  108.           if(pwm_val_left>=200) //這里的200代表的是pwm為20ms即50hz
  109.               pwm_val_left=0;
  110.      }
  111.      else   
  112.      {
  113.           Left_motor_pwm=0;   //若未開啟PWM則PWMA=0 左電機停止
  114.      }
  115. }


  116. /**
  117. * Function       pwm_out_right_motor
  118. * @author        Danny
  119. * @date          2017.08.16
  120. * @brief         右電機調速        ,調節pwm_val_right的值改變電機轉速,占空比
  121. * @param         void
  122. * @retval        void
  123. * @par History   無
  124. */
  125. void pwm_out_right_motor(void)                  
  126. {
  127.     if(Right_PWM_ON)
  128.     {
  129.         if(pwm_val_right<=push_val_right)      
  130.             {
  131.                 Right_motor_pwm=1;                                                        
  132.         }
  133.             else
  134.             {
  135.                 Right_motor_pwm=0;
  136.         }
  137.             if(pwm_val_right>=200) //這里的200代表的是pwm為20ms即50hz
  138.             pwm_val_right=0;
  139.     }
  140.     else   
  141.     {
  142.         Right_motor_pwm=0;          //若未開啟PWM則PWMB=0右電機停止
  143.     }
  144. }

  145.   /**
  146. * Function       servo_appointed_detection
  147. * @author        Danny
  148. * @date          2017.08.16
  149. * @brief         舵機旋轉到指定角度
  150. * @param[in]     pos:指定的角度
  151. * @param[out]    void
  152. * @retval        void
  153. * @par History   無
  154. */
  155. void servo_appointed_detection(int pos)
  156. {
  157.   int i = 0;
  158.   for (i = 0; i <= 15; i++) //產生PWM個數,等效延時以保證能轉到響應角度
  159.   {
  160.     myangle = pos;          //模擬產生PWM
  161.         delay(20);
  162. }
  163. }

  164. /**
  165. * Function       run
  166. * @author        Danny
  167. * @date          2017.08.16
  168. * @brief         小車前進
  169. * @param[in1]    time :延時時間
  170. * @param[out]    void
  171. * @retval        void
  172. * @par History   無
  173. */
  174. void run(unsigned int time)
  175. {
  176.   //左電機前進
  177.   Left_motor_go = 1;   //左電機前進使能
  178.   Left_motor_back = 0; //左電機后退禁止
  179.   //更新指定管腳的PWM值,更改可實現控速(0-200)
  180. // push_val_left=CarSpeed;
  181.          
  182.   //右電機前進
  183.   Right_motor_go=1;   //右電機前進使能
  184.   Right_motor_back=0; //右電機后退禁止
  185.   //更新指定管腳的PWM值,更改可實現控速(0-200)
  186.   //push_val_right=CarSpeed;

  187.   //延時
  188.   delay(time * 100);
  189.   return;
  190. }

  191. /**
  192. * Function       brake
  193. * @author        Danny
  194. * @date          2017.08.16
  195. * @brief         小車剎車
  196. * @param[in]     time
  197. * @param[out]    void
  198. * @retval        void
  199. * @par History   無
  200. */
  201. void brake(unsigned int time)
  202. {
  203.   //左電機停止
  204.   Left_motor_go = 0;   //左電機前進禁止
  205.   Left_motor_back = 0; //左電機后退禁止
  206.          
  207.   //右電機停止
  208.   Right_motor_go=0;   //右電機前進禁止
  209.   Right_motor_back=0;  //右電機后退禁止

  210.   //延時
  211.   delay(time * 100);
  212.   return;
  213. }

  214. /**
  215. * Function       left
  216. * @author        Danny
  217. * @date          2017.08.16
  218. * @brief         小車左轉 左轉(左輪不動,右輪前進)
  219. * @param[in]     time :延時時間
  220. * @param[out]    void
  221. * @retval        void
  222. * @par History   無
  223. */
  224. void left(unsigned int time)
  225. {
  226.   //左電機停止
  227.   Left_motor_go = 0;   //左電機前進禁止
  228.   Left_motor_back = 0;   //左電機后退禁止
  229.   //更新指定管腳的PWM值,更改可實現控速(0-200)
  230. // push_val_left=0;
  231.            
  232.   //右電機前進
  233.   Right_motor_go=1;   //右電機前進使能
  234.   Right_motor_back=0;  //右電機后退禁止
  235.   //更新指定管腳的PWM值,更改可實現控速(0-200)
  236.   //push_val_right=CarSpeed;

  237.   //延時
  238.   delay(time * 100);
  239.   return;
  240. }

  241. /**
  242. * Function       right
  243. * @author        Danny
  244. * @date          2017.08.16
  245. * @brief         小車右轉 右轉(左輪前進,右輪不動)
  246. * @param[in]     time:延時時間
  247. * @param[out]    void
  248. * @retval        void
  249. * @par History   無
  250. */
  251. void right(unsigned int time)
  252. {
  253.   //左電機前進
  254.   Left_motor_go = 1;   //左電機前進使能
  255.   Left_motor_back = 0;   //左電機后退禁止
  256.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  257.   //push_val_left=CarSpeed;
  258.          
  259.   //右電機停止
  260.   Right_motor_go=0;   //右電機前進禁止
  261.   Right_motor_back=0;  //右電機后退禁止
  262.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  263.   push_val_right=0;

  264.   //延時
  265.   delay(time * 100);  
  266.   return;
  267. }

  268. /**
  269. * Function       spin_left
  270. * @author        Danny
  271. * @date          2017.08.16
  272. * @brief         小車原地左轉 原地左轉(左輪后退,右輪前進)
  273. * @param[in]     time:延時時間
  274. * @param[out]    void
  275. * @retval        void
  276. * @par History   無
  277. */
  278. void spin_left(unsigned int time)
  279. {
  280.   //左電機后退
  281.   Left_motor_go = 0;   //左電機前進禁止
  282.   Left_motor_back = 1;   //左電機后退使能
  283.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  284. // push_val_left=CarSpeed;
  285.          
  286.   //右電機前進
  287.   Right_motor_go=1;   //右電機前進使能
  288.   Right_motor_back=0;  //右電機后退禁止
  289.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  290. // push_val_right=CarSpeed;

  291.   //延時
  292.   delay(time * 100);  
  293.   return;
  294. }

  295. /**
  296. * Function       spin_right
  297. * @author        Danny
  298. * @date          2017.08.16
  299. * @brief         小車原地右轉 原地右轉(右輪后退,左輪前進)
  300. * @param[in]     time:延時時間
  301. * @param[out]    void
  302. * @retval        void
  303. * @par History   無
  304. */
  305. void spin_right(unsigned int time)
  306. {
  307.   //左電機前進
  308.   Left_motor_go = 1;   //左電機前進使能
  309.   Left_motor_back = 0;  //左電機后退禁止
  310.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  311.   //push_val_left=CarSpeed;
  312.          
  313.   //右電機后退
  314.   Right_motor_go=0;   //右電機前進禁止
  315.   Right_motor_back=1;  //右電機后退使能
  316.   //更新指定管腳的PWM值,更改可實現控速(0-20)
  317.   //push_val_right=CarSpeed;

  318.   //延時
  319.   delay(time * 100);  
  320.   return;
  321. }

  322. /**
  323. * Function       up_right
  324. * @author        Danny
  325. * @date          2017.08.16
  326. * @brief         小車往右上方轉
  327. * @param[in]     time:延時時間
  328. * @param[out]    void
  329. * @retval        void
  330. * @par History   無
  331. */
  332. void up_right(unsigned int time)        //右上
  333. {
  334.         Left_motor_go=1;
  335.         Left_motor_back=0;
  336. //        push_val_left=CarSpeed+50;
  337.         push_val_left=18;

  338.         Right_motor_go=1;
  339.         Right_motor_back=0;
  340.         //push_val_right=CarSpeed;
  341.         push_val_right=10;
  342.     //延時
  343.     delay(time * 100);
  344.     return;
  345. }

  346. /**
  347. * Function       down_right
  348. * @author        Danny
  349. * @date          2017.08.16
  350. * @brief         小車往右下方轉
  351. * @param[in]     time:延時時間
  352. * @param[out]    void
  353. * @retval        void
  354. * @par History   無
  355. */
  356. void down_right(unsigned int time)  //右下
  357. {      
  358.         Left_motor_go=0;
  359.         Left_motor_back=1;
  360.         //push_val_left=CarSpeed+50;
  361.     push_val_left=18;
  362.         Right_motor_go=0;
  363.         Right_motor_back=1;
  364.         //push_val_right=CarSpeed;
  365.         push_val_right=10;
  366.         delay(time * 100);
  367.         return;
  368. }

  369. /**
  370. * Function       up_left
  371. * @author        Danny
  372. * @date          2017.08.16
  373. * @brief         小車往左上方轉
  374. * @param[in]     time:延時時間
  375. * @param[out]    void
  376. * @retval        void
  377. * @par History   無
  378. */
  379. void up_left(unsigned int time)         
  380. {
  381.            Left_motor_go=1;
  382.         Left_motor_back=0;
  383.         //push_val_left=CarSpeed;
  384.         push_val_left=10;
  385.         Right_motor_go=1;
  386.         Right_motor_back=0;
  387. //        push_val_right=CarSpeed+50;
  388.         push_val_right=18;
  389.         delay(time * 100);
  390.     return;
  391. }

  392. /**
  393. * Function       down_left
  394. * @author        Danny
  395. * @date          2017.08.16
  396. * @brief         小車往左下方轉
  397. * @param[in]     time :延時時間
  398. * @param[out]    void
  399. * @retval        void
  400. * @par History   無
  401. */
  402. void down_left(unsigned int time)      
  403. {
  404.            Left_motor_go=0;
  405.         Left_motor_back=1;
  406.         //push_val_left=CarSpeed;
  407.         push_val_left=10;
  408.         Right_motor_go=0;
  409.         Right_motor_back=1;
  410.         //push_val_right=CarSpeed+50;
  411.         push_val_right=18;
  412.         delay(time * 100);
  413.     return;
  414. }

  415. /**
  416. * Function       back
  417. * @author        Danny
  418. * @date          2017.08.16
  419. * @brief         小車后退
  420. * @param[in]     time :延時時間
  421. * @param[out]    void
  422. * @retval        void
  423. * @par History   無
  424. */
  425. void back(unsigned int time)
  426. {
  427.   //左電機后退
  428.   Left_motor_go = 0;   //左電機前進禁止
  429.   Left_motor_back = 1; //左電機后退使能
  430.          
  431.   //右電機后退
  432.   Right_motor_go=0;    //右電機前進禁止
  433.   Right_motor_back=1;  //右電機后退使能

  434.   //延時
  435.   delay(time * 100);
  436.   return;
  437. }

  438. /**
  439. * Function       timer0
  440. * @author        Danny
  441. * @date          2017.08.16
  442. * @brief         TIMER0中斷服務子函數產生PWM信號,用于控制電機速度和控制舵機的轉動
  443. * @param[in]     void
  444. * @param[out]    void
  445. * @retval        void
  446. * @par History   無
  447. */
  448. void timer0()interrupt 1
  449. {
  450.      int PulseWidth;
  451.      TH0=0Xff;              //100us定時
  452.          TL0=0Xa4;
  453.          servocount++;
  454.                                                      //定義脈寬變量
  455.      PulseWidth = ((myangle*11)+500)/100 ;  //為了將0-180度轉換為相應的脈寬值
  456.      if(servocount == PulseWidth)
  457.      {
  458.             ServoPin=0;                //將舵機接口電平置高
  459.      }                  
  460.      if(servocount == 190)                   //190為最終調試獲得的一個最佳值
  461.      {
  462.             servocount = 0;
  463.         ServoPin=1;                //將舵機接口電平置低
  464.      }
  465.          pwm_val_left++;
  466.          pwm_val_right++;
  467.          pwm_out_left_motor();
  468.          pwm_out_right_motor();
  469. }

  470. /**
  471. * Function       TIME0_Init
  472. * @author        Danny
  473. * @date          2017.08.16
  474. * @brief         定時器0初始化
  475. * @param[in]     void
  476. * @param[out]    void
  477. * @retval        void
  478. * @par History   無
  479. */
  480. void TIME0_Init(void)
  481. {
  482.         TMOD |=0X01;        //定時器工作方式1
  483.         TH0= 0Xff;      //100Us定時
  484.     TL0= 0Xa4;
  485.         TR0= 1;                    //啟動T0工作
  486.         ET0= 1;                    //允許T0中斷
  487.         EA = 1;                //開總中斷
  488. }

  489. /**
  490. * Function       color_led
  491. * @author        Danny
  492. * @date          2017.08.16
  493. * @brief         由R,G,B三色的不同組合形成7種不同的色彩
  494. * @param[in1]    Red開關
  495. * @param[in2]    Green開關
  496. * @param[in3]    Blue開關
  497. * @retval        void
  498. * @par History   無
  499. */
  500. void color_led(int v_iRed, int v_iGreen, int v_iBlue)
  501. {
  502.   //紅色LED
  503.   v_iRed == ON ? (LED_R = 1): (LED_R = 0);

  504.   //綠色LED
  505.   v_iGreen == ON ? (LED_G = 1): (LED_G = 0);

  506.   //藍色LED
  507.   v_iBlue == ON ? (LED_B = 1): (LED_B = 0);
  508. }


  509. /**
  510. * Function       UartInit
  511. * @author        Danny
  512. * @date          2017.08.16
  513. * @brief         串口初始化
  514. *                定時器工作方式2:
  515. *                實現的是自動重載:波特率的計算為:
  516. *                (2的SMOD次方/32)*(sysclk(單片機內部時鐘頻率)/12)/(256-TH1)
  517.                  (系統默認下的SMOD是0,T1X12也是為0的)
  518.                                  1/32*((11059200/12)/(256-FD))=9600
  519. * @param[in]     void
  520. * @retval        void
  521. * @par History   無
  522. */

  523. void UartInit(void)   
  524. {
  525.     SCON|=0x50;           //串行口工作在方式1,允許串行接收
  526.     TMOD|=0x20;                 //定時器1工作方式2,自動重載初值,TL1:初始值,TH1:重載值
  527.     TH1=0xfd;                 //初始化波特率為9600
  528.         TL1=0xfd;
  529.     TI=1;                         //發送標志位置1,表示發送完一個字節
  530.     TR1=1;                         //定時器1開始工作
  531. }

  532. /**
  533. * Function       PS2_control
  534. * @author        Danny
  535. * @date          2017.07.25
  536. * @brief         PS2控制小車
  537. * @param[in]     void
  538. * @param[out]    void
  539. * @retval        void
  540. * @par History   無
  541. */
  542. void PS2_control()
  543. {
  544.         //PS2按鍵變量定義
  545.         stPS2KeyValue * PS2;
  546.            
  547.                 PS2 = ReadPS2KeyValue();            //檢測手柄按鍵之后獲得的值
  548.                 //由data[3]和data[4]返回來的組合成16位的數組
  549.                 //如data[4]data[3]:當select按下時
  550.                 //FunBtn:0x1111 1111 1111 1110
  551.                 if((PS2->FunBtn & PSB_SELECT) == 0)
  552.                 {
  553.                   printf("PSB_SELECT!\n");
  554.                 }
  555.                
  556.                 if((PS2->FunBtn & PSB_START) == 0)
  557.                 {
  558.                   printf("PSB_START!\n");
  559.                 }
  560.                  
  561.                 if((PS2->FunBtn & PSB_L3) == 0)
  562.                 {
  563.                          printf("PSB_L3!\n");
  564.                          g_carstate = enSTOP;      //將小車定義為停止狀態
  565.                 }

  566.                 if((PS2->FunBtn & PSB_R3) == 0)
  567.                 {
  568.                         printf("PSB_R3!\n");
  569.                          g_carstate = enSTOP;      //將小車定義為停止狀態
  570.                 }

  571.                 if((PS2->FunBtn & PSB_PAD_UP) == 0)
  572.                 {
  573.                          printf("PSB_PAD_UP!\n");
  574.                          g_carstate = enRUN;       //將小車定義為前進狀態
  575.                 }

  576.                 else if((PS2->FunBtn & PSB_PAD_RIGHT) == 0)
  577.                 {
  578.                          printf("PSB_PAD_RIGHT!\n");
  579.                          g_carstate = enRIGHT;     //將小車定義為狀態右轉
  580.                 }
  581.                 else if((PS2->FunBtn & PSB_PAD_DOWN) == 0)
  582.                 {
  583.                         printf("PSB_PAD_DOWN!\n");
  584.                         g_carstate = enBACK;       //將小車定義為后退狀態
  585.                 }
  586.                 else if((PS2->FunBtn & PSB_PAD_LEFT) == 0)
  587.                 {
  588.                          printf("PSB_PAD_LEFT!\n");
  589.                          g_carstate = enLEFT;       //將小車定義為左轉狀態
  590.                 }
  591.          
  592.                 else                           //去掉則按下一直執行,加此段則放開停止
  593.                 {
  594.                    g_carstate = enSTOP;        //將小車定義為停止狀態
  595.                 }
  596.                   
  597.                 if((PS2->FunBtn & PSB_L2) == 0)                         //加速
  598.                 {
  599.                         printf("PSB_L2!\n");
  600. //                        CarSpeed=CarSpeed+40;
  601. //                        if(CarSpeed>=200)                       
  602. //                        {
  603. //                                CarSpeed = 200;
  604. //                        }
  605.             g_volume++;
  606.                         if(g_volume>=4)                          //將速度設置了四個等級
  607.                         {
  608.                                 g_volume = 4;
  609.                         }
  610.                 }
  611.                  
  612.                 if((PS2->FunBtn & PSB_R2) == 0)                         //減速
  613.                 {
  614.                         printf("PSB_R2!\n");
  615. //                        CarSpeed=CarSpeed-40;
  616. //                        if(CarSpeed<0)                       
  617. //                        {
  618. //                                CarSpeed = 50;
  619. //                        }
  620.                         g_volume--;
  621.                         if(g_volume <= 0)
  622.                         {
  623.                                 g_volume = 1;
  624.                         }
  625.                 }
  626.                 //當手柄的L1鍵被按下后,且有左側有搖桿數據(X1,Y1)之后處理
  627.                 //左側搖桿控制小車的運行狀態                        
  628.                 if((PS2->FunBtn & PSB_L1) == 0)
  629.                 {
  630.                          printf("PSB_L1!\n");
  631.                         
  632.                     if (PS2->Y1 < 5 && PS2->X1 > 80 && PS2->X1 < 180) //上
  633.                     {
  634.                               g_carstate = enRUN;
  635.                                   printf("enRUN\n");
  636.                     }
  637.                     else if (PS2->Y1 > 230 && PS2->X1 > 80 && PS2->X1 < 180) //下
  638.                     {
  639.                               g_carstate = enBACK;
  640.                                   printf("enBACK\n");
  641.                     }
  642.                     else if (PS2->X1 < 5 && PS2->Y1 > 80 && PS2->Y1 < 180) //左
  643.                     {
  644.                               g_carstate = enLEFT;
  645.                                   printf("enLEFT\n");
  646.                     }
  647.                     else if (PS2->Y1 > 80 && PS2->Y1 < 180 && PS2->X1 > 230)//右
  648.                     {
  649.                               g_carstate = enRIGHT;
  650.                            printf("enRIGHT\n");
  651.                     }
  652.                     else if (PS2->Y1 <= 80 && PS2->X1 <= 80) //左上
  653.                     {
  654.                               g_carstate = enUPLEFT;
  655.                                   printf("enUPLEFT\n");
  656.                     }
  657.                     else if (PS2->Y1 <= 80 && PS2->X1 >= 180) //右上
  658.                     {
  659.                               g_carstate = enUPRIGHT;
  660.                                   printf("enUPRIGHT\n");
  661.                     }
  662.                     else if (PS2->X1 <= 80 && PS2->Y1 >= 180) // 左下
  663.                     {
  664.                               g_carstate = enDOWNLEFT;
  665.                                   printf("enDOWNLEFT\n");
  666.                     }
  667.                     else if (PS2->Y1 >= 180 && PS2->X1 >= 180) //右下
  668.                     {
  669.                               g_carstate = enDOWNRIGHT;
  670.                                   printf("enDOWNRIGHT\n");
  671.                     }
  672.                     else//停
  673.                     {
  674.                               g_carstate = enSTOP;
  675.                     }
  676.                 }
  677.                 //當R1被按下之后,且有右側搖桿數據來臨時。
  678.                 //右側搖桿控制小車的舵機的運行狀態
  679.                 if((PS2->FunBtn & PSB_R1) == 0)
  680.                 {
  681.                      printf("PSB_R1!\n");
  682.                          //右搖桿
  683.                      if (PS2->X2 < 5 && PS2->Y2 > 80 && PS2->Y2 < 180)    //左
  684.              {
  685.                 g_ServoState = 1;
  686.              }
  687.              else if (PS2->Y2 > 80 && PS2->Y2 < 180 &&PS2->X2 > 230)//右
  688.              {
  689.                 g_ServoState = 2;
  690.              }
  691.              else                                      //歸位
  692.              {
  693.                 g_ServoState = 0;
  694.              }
  695.                 }        
  696.                        
  697.                 if((PS2->FunBtn & PSB_TRIANGLE) == 0) // 控制燈
  698.                 {
  699.                          printf("PSB_TRIANGLE!\n");

  700.                            color_led(ON, OFF, ON);

  701.                         // ReadPS2KeyValue();
  702.                 }
  703.                  
  704.                 if((PS2->FunBtn & PSB_CIRCLE) == 0)        // 控制左旋
  705.                 {
  706.                          printf("PSB_CIRCLE!\n");
  707.                          g_carstate = enLEFT;  
  708.                         // ReadPS2KeyValue();
  709.                 }  
  710.       
  711.                 if((PS2->FunBtn & PSB_CROSS) == 0) // 鳴笛
  712.                 {
  713.                         printf("PSB_CROSS!\n");
  714.                         FM = 0;
  715.                         delay(500);
  716.                         FM = 1;
  717.                 //        ReadPS2KeyValue();
  718.                 }
  719.                  
  720.                 if((PS2->FunBtn & PSB_SQUARE) == 0)          //控制右旋
  721.                 {
  722.                          printf("PSB_SQUARE!\n");
  723.                          g_carstate = enRIGHT;
  724.                         // ReadPS2KeyValue();
  725.                 }
  726. }
復制代碼
全部資料51hei下載地址:

PS2_51智能小車.zip

2.89 MB, 下載次數: 142, 下載積分: 黑幣 -5

PS2_Arduino智能小車.zip

778.8 KB, 下載次數: 75, 下載積分: 黑幣 -5

PS2_STM32平衡車.rar

1.99 MB, 下載次數: 53, 下載積分: 黑幣 -5

PS2_蝙蝠車.zip

1.56 MB, 下載次數: 33, 下載積分: 黑幣 -5

PS2_4WD智能小車(51版)程序源碼.rar

1.11 MB, 下載次數: 92, 下載積分: 黑幣 -5

PS2_4WD智能小車(Arduino版)程序源碼.rar

662.6 KB, 下載次數: 52, 下載積分: 黑幣 -5

PS2_4WD智能小車(STM32版)程序.rar

1.34 MB, 下載次數: 93, 下載積分: 黑幣 -5

PS2_4WD智能小車(樹莓派版)程序源碼.rar

636.92 KB, 下載次數: 91, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:439952 發表于 2019-1-19 15:18 | 顯示全部樓層

PS2_4WD智能小車(STM32版)程序.rar哪來的源文件????????
回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:598292 發表于 2019-8-9 11:50 | 顯示全部樓層
厲害了,感謝樓主分享
回復

使用道具 舉報

ID:208192 發表于 2019-9-2 10:15 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:608128 發表于 2019-9-7 10:13 | 顯示全部樓層
很厲害,感謝分享
回復

使用道具 舉報

ID:626121 發表于 2019-10-18 13:15 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
ID:376710 發表于 2020-2-6 12:47 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:365823 發表于 2020-2-14 14:02 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

11#
無效樓層,該帖已經被刪除
12#
無效樓層,該帖已經被刪除
13#
無效樓層,該帖已經被刪除
ID:742063 發表于 2021-5-1 16:56 | 顯示全部樓層
有鏈接嗎?哪個是三輪的程序STC89C52的
回復

使用道具 舉報

ID:920352 發表于 2021-5-13 21:46 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:920352 發表于 2021-5-13 21:47 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

17#
無效樓層,該帖已經被刪除
ID:949550 發表于 2024-1-17 16:11 | 顯示全部樓層
好像是亞博智能的資料,感謝分享
回復

使用道具 舉報

19#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
韩国三级成人在线| 一本大道久久a久久精二百 | 第四色日韩影片| 污网站在线观看视频| 成年人黄视频网站| 日本美女爱爱视频| 精品国产aⅴ麻豆| 精品一区二区三区自拍图片区| 在线精品福利| 成人3d动漫在线观看| 粉嫩的18在线观看极品精品| 日本少妇精品亚洲第一区| 一区二区精品伦理...| 牛人国产偷窥女洗浴在线观看| 性少妇videosexfreexxx片| 97超碰资源站| 婷婷国产成人精品视频| 成人有码视频在线播放| 久久999免费视频| 性欧美亚洲xxxx乳在线观看| 久久成人精品一区二区三区| 91麻豆国产在线观看| 日韩天堂av| 亚洲私拍自拍| 亚洲精品少妇| 日韩电影在线免费看| 亚洲国产黄色| 日韩av电影天堂| 久久www免费人成看片高清| 精品一区二区三区久久| 国产美女娇喘av呻吟久久| 国产精品18久久久久久久网站| 国产ts人妖一区二区| 日本免费黄色小视频| 久久综合福利| 日韩av高清| 久久综合久久网| 国产精品久久久久久久久久久久午夜片 | 人妻va精品va欧美va| 中国视频免男男gay| 国产永久免费观看| 春意影院免费入口| 另类国产精品一区二区| 九色porn蝌蚪| 又粗又黑又大的吊av| 人人妻人人添人人爽欧美一区| 欧美日韩亚洲第一| 污污的视频免费观看| 五级黄高潮片90分钟视频| 91香蕉视频网| 中文无码精品一区二区三区| 午夜小视频免费| 在线观看天堂| 在线视频国产三级| 91丝袜在线| 成人爽a毛片| 欧美va久久久噜噜噜久久| 亚洲视频资源| 一道本一区二区三区| 中文字幕一区二区三区中文字幕| 嫩草一区二区三区| 亚洲永久免费| 国产精品亚洲d| 欧美成人黑人| 欧美精品第一区| 日韩成人午夜精品| 国产精品久久久久永久免费观看| 91福利在线导航| 日韩小视频网址| 91牛牛免费视频| 妞干网视频在线观看| 日本中文字幕精品| 西西44rtwww国产精品| 中文字幕第五页| siro系绝美精品系列| 主播国产精品| 亚洲图区在线| 精品无人码麻豆乱码1区2区| 激情综合色播五月| 亚洲精品视频在线| 日韩第一页在线| 亚洲人av在线影院| 国产精品扒开腿爽爽爽视频| 色综合久久久久久久久五月| 国产一级免费大片| 日韩成人免费观看| 国产午夜三区视频在线| 国产三区四区在线观看| 午夜不卡一区| 国产精品日韩久久久| 国产精品久久久久久久蜜臀| 精品剧情在线观看| 国产精品网红直播| 国产精品av在线| 青青在线免费视频| 久久久久久国产免费a片| 日韩在线观看视频一区二区| 国产一级淫片免费| 欧美日韩久久中文字幕| 九九热视频在线观看| 欧美a在线观看| 日本精品三区| av一区二区三区四区| 欧美日本精品一区二区三区| 亚洲国产欧美久久| 国产中文字幕日韩| 五月天色婷婷综合| 亚洲天堂资源在线| 亚洲美女福利视频| 在线观看午夜看亚太视频| 99精品在线免费观看| www 久久久| 水野朝阳av一区二区三区| 亚洲一区二区三区中文字幕| 日韩中文字幕在线免费观看| 欧美性色黄大片人与善| 人妻丰满熟妇av无码久久洗澡| av中文字幕第一页| 一级毛片在线看| 风间由美性色一区二区三区四区 | 国产一区喷水| 一起草在线视频| 午夜激情小视频| 欧美私人网站| 亚洲国产精品成人| 亚洲精品欧美激情| 欧美激情在线播放| 亚洲熟妇无码一区二区三区导航| 免费日韩在线视频| 18毛片免费看| 亚洲精品中文字幕成人片| http://嫩草影院| 亚洲高清在线一区| 99re成人精品视频| 亚洲欧美在线看| 一区二区三区的久久的视频| 欧美88888| 日本边添边摸边做边爱的第三级| 亚洲欧洲高清| 久久超碰97中文字幕| 欧美一区二区三区播放老司机| 91在线短视频| 国产呦小j女精品视频| 色欧美在线观看| 中国字幕a在线看韩国电影| 青青草成人在线观看| 日韩一级大片在线观看| 好看的日韩精品| 成人做爰69片免网站| 国产草草影院ccyycom| 精品欧美不卡一区二区在线观看 | 国产欧美精品xxxx另类| 久久精品亚洲天堂| 亚洲色偷精品一区二区三区| 99自拍视频在线观看| 先锋影音国产一区| 欧美一区二区黄| 欧美精品一区二区三区在线四季 | 国产又粗又猛又爽| 久久综合网导航| 蘑菇福利视频一区播放| 欧美一区二区三区在线电影| 欧美日韩亚洲免费| 亚洲一区 视频| 激情视频免费观看在线| 日韩精品dvd| 色诱亚洲精品久久久久久| 亚洲综合色激情五月| 欧美成人短视频| a优女a优女片| 青青草91久久久久久久久| 一区二区三区在线视频免费| 欧美xxxx在线观看| 日韩欧美一区二区三区四区五区| 免费人成年激情视频在线观看| 国产福利图片| 亚洲精品进入| 欧美视频专区一二在线观看| 成人看片视频| 亚洲国产成人精品综合99| 欧美高清3dfreexxxx性| 日韩色淫视频| 国产婷婷色一区二区三区四区| 久久人91精品久久久久久不卡| 亚洲精品在线网址| 国产乱人视频免费播放| 日韩三级久久| 亚洲成人自拍网| 国产91免费视频| 激情五月色婷婷| 嫩草在线视频| 黄色日韩网站视频| 久久久精品国产亚洲| 热久久久久久久久| 国产麻豆永久视频| 国产精品成人自拍| 色婷婷av一区二区三区gif| 久久精品丝袜高跟鞋| 91精品国产高清一区二区三密臀| 日本在线免费看| 精品一区二区三区不卡| 欧美日韩国产999| 日本免费福利视频| 天天性天天草| 伊人久久亚洲影院| 精品一区精品二区| 中日韩在线视频| 国产伦子伦对白视频| 英国三级经典在线观看| 欧美国产丝袜视频| 97自拍视频| 日韩 欧美 综合| 午夜成年人在线免费视频| 成人爱爱电影网址| 国产精品久久久久久久久久小说 | 蜜臀av在线| 中文亚洲字幕| 色yeye香蕉凹凸一区二区av| 不卡中文字幕在线观看| 成 人免费视频播放| 欧美一区免费| 色婷婷精品大在线视频| 精品一区二区成人免费视频| 精品人妻一区二区三区含羞草 | 精品在线播放| 欧美一卡2卡3卡4卡| www.中文字幕在线| 伊人无码高清| 欧美一区高清| 精品国产一区二区三区久久狼黑人| 国产一精品一aⅴ一免费| 黄色资源在线看| 日本欧美在线观看| 国产91精品高潮白浆喷水| www日韩在线| 国产超级va在线视频| 久久久欧美精品sm网站| 国产精品一区二区三区观看| 中文字幕在线观看高清| 国产激情视频网站| 黄色成人av| 日韩高清电影一区| 欧美韩国理论所午夜片917电影| 成人在线视频免费播放| 亚洲精品综合一区二区三区| 国产精品白丝av嫩草影院| 日韩一区二区精品葵司在线| 日韩免费高清在线| 色视频网站在线| 蜜臀精品久久久久久蜜臀| 国产精品444| 黄色在线免费观看| 亚洲美女色播| 在线播放豆国产99亚洲| 国产a视频免费观看| 99综合精品久久| 日韩av超清在线观看| 成人黄色网址在线观看| 国产一区玩具在线观看| 天干夜夜爽爽日日日日| 日韩免费大片| 日韩一区二区三区在线视频| 午夜免费一级片| 青青草免费观看免费视频在线| 成人国产精品免费观看视频| 激情久久av| 嫩草影院永久一二三入口| 天天天综合网| 欧美一区二区在线免费播放| 国产三级三级看三级| 三年片大全在线观看大全有哪些| 99精品在免费线中文字幕网站一区 | 国产精品自拍av| 在线激情影院一区| 国产真实乱人偷精品人妻| 羞羞网站在线看| 午夜成人在线视频| 亚洲黄色av网址| 视频二区在线| 18成人在线观看| 日韩五码在线观看| 日本成人三级| 一二三av在线| 亚洲一卡二卡在线| 精品av导航| 亚洲新声在线观看| 91在线播放观看| 国产一区二区色噜噜| 美女脱光内衣内裤视频久久网站| 国产中文字幕日韩| 成人午夜无人区一区二区| 欧美高清一区| 国产精品女人网站| 午夜影院免费体验区| 激情自拍一区| 114国产精品久久免费观看| 极品美女一区二区三区视频| 99国产精品私拍| 亚洲www在线| 国产在线视频自拍| 国产成人精品免费一区二区| 国产激情视频一区二区在线观看 | 欧美孕妇与黑人孕交| 国产女无套免费视频| 欧美好骚综合网| 国产精品国产亚洲伊人久久| 日本高清视频在线| 鲁大师影院一区二区三区| 国产区二精品视| av色资源站| 久久精品网站免费观看| 男女激情免费视频| 99热在线网站| 亚洲一区免费视频| 毛茸茸free性熟hd| 免费污视频在线一区| 日韩黄色高清视频| 中文字幕日韩精品在线| 久久精品第一页| 国产96在线亚洲| 久久影院资源网| 国产精品视频一区二区三区,| 久久av资源| 国产精品xxx视频| 中文字幕在线看精品乱码| 97久久人人超碰caoprom| 欧美亚洲图片小说| 亚洲欧美卡通动漫| 丁香综合av| 欧美xxxx做受欧美.88| 香蕉网在线播放| 日韩成人免费av| 久久久精品免费视频| 草逼视频免费看| 日韩精品一级二级| 久久天天东北熟女毛茸茸| 三上悠亚在线免费观看| 欧美性xxxxx极品| 日韩激情小视频| 精品日产免费二区日产免费二区| 国产在线播放91| 天天插天天操| 亚洲电影在线免费观看| 亚洲最大成人综合网| 久久99偷拍| 91在线国产电影| 97涩在线观看视频| 欧美性xxxx在线播放| 一区二区三区影视| 欧美xxxx中国| 欧美一区二区三区在线免费观看| 蜜桃臀av在线| 日韩一区二区三区电影| а中文在线天堂| 日韩在线卡一卡二| 青青青青草视频| 九色porny视频在线观看| 日韩亚洲欧美一区二区三区| 99久热在线精品996热是什么| 亚洲高清在线| 麻豆映画在线观看| 1区2区3区在线视频| 在线观看亚洲视频| 青青草中文字幕| 国产精品无码永久免费888| 美女又爽又黄视频毛茸茸| 午夜先锋成人动漫在线| 99爱精品视频| 91美女福利视频| 热99这里只有精品| 成人福利网站| 日韩成人网免费视频| 正在播放亚洲精品| 亚洲毛片一区| 亚洲在线欧美| 国产黄在线播放| 欧美老年两性高潮| 日韩精品一区二区在线播放| 欧美成免费一区二区视频| 国产一区二区久久久| www.1024| 日本韩国一区二区三区视频| 亚洲欧美另类日本| 久久日文中文字幕乱码| 999国产在线| 欧美13~18sex性hd| 欧美性一级生活| 青青草成人av| 亚洲精品一级| 中文字幕中文字幕99| 在线免费黄色| 亚洲毛茸茸少妇高潮呻吟| 99在线精品视频免费观看软件| 久久一二三四| 国产91美女视频| 国产伦精品一区二区三区视频金莲| 久久亚洲精品网站| 欧美人与z0zoxxxx特| 国产精品国产自产拍高清av| 亚洲精品一区|