久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2511|回復: 0
打印 上一主題 下一主題
收起左側

Smart_car4紅外避障+超聲波跟隨設計源代碼

[復制鏈接]
跳轉到指定樓層
樓主
這是我上個月做的單片機智能小車,目前可實現紅外避障和藍牙遙控。保證原創,請多多指教。

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<C52_car.h>
  3. #include <intrins.h>//包含_nop_指令的頭文件
  4. #define MAIN_Fosc                11059200UL        //宏定義主時鐘HZ
  5. #define PCF8591_ADDR        0x90                //PCF8591地址
  6. #define DACOUT_EN                0x40                //DAC輸出使能

  7. typedef unsigned char uchar;
  8. typedef unsigned int uint;
  9. unsigned char pwm_left_val = 0;//左電機占空比值 取值范圍0-80,0最快
  10. unsigned char pwm_right_val = 0;//右電機占空比值取值范圍0-80 ,0最快
  11. unsigned char pwm_t = 0;//周期
  12. unsigned char control=0X01;//車運動控制全局變量,默認開機為停車狀態
  13. unsigned int  time = 0;//傳輸時間
  14. unsigned long S = 0;//距離
  15. unsigned char count=0;
  16. unsigned char SEH_count;  //舵機朝向前面

  17. #define LCD1602_DB P0        //LCD1602數據總線
  18. uchar Control_mode = 0;
  19. uchar AD_Value;        //存儲AD轉換回的數字量
  20. sbit LCD1602_RS = P3^5;         //RS端
  21. sbit LCD1602_RW = P3^6;         //RW端
  22. sbit LCD1602_EN = P3^4;         //EN端
  23. sbit DU = P2^6;//
  24. sbit WE = P2^7;//數碼管位選段選用于關閉數碼管顯示

  25. void delay(unsigned int z)//毫秒級延時
  26. {
  27.         unsigned int x,y;
  28.         for(x = z; x > 0; x--)
  29.                 for(y = 114; y > 0 ; y--);
  30. }

  31. void Delay10us(unsigned char i)            //10us延時函數 啟動超聲波模塊時使用
  32. {           
  33.    unsigned char j;
  34.         do{
  35.                 j = 10;
  36.                 do{
  37.                         _nop_();
  38.                 }while(--j);
  39.         }while(--i);
  40. }

  41. /*====================================
  42. 函數:void Delay5us()
  43. 描述:12T 51單片機5微秒延時函數自適應時鐘(11.0592M,12M,22.1184M)
  44. ====================================*/
  45. void Delay5us()
  46. {
  47.         #if MAIN_Fosc == 11059200
  48.                 _nop_();
  49.         #elif MAIN_Fosc == 12000000
  50.                 _nop_();
  51.         #elif MAIN_Fosc == 22118400
  52.                 _nop_(); _nop_(); _nop_();
  53.         #endif
  54. }

  55. /*小車前進*/
  56. void forward()
  57. {
  58.         left_motor_go; //左電機前進
  59.         right_motor_go; //右電機前進
  60. }
  61. /*小車左轉*/
  62. void left_run()
  63. {
  64.         left_motor_stops; //左電機停止
  65.         right_motor_go; //右電機前進       
  66. }
  67. /*小車右轉*/
  68. void right_run()
  69. {
  70.         right_motor_stops;//右電機停止
  71.         left_motor_go;    //左電機前進
  72. }

  73. /*PWM控制使能 小車后退*/
  74. void backward()
  75. {
  76.         left_motor_back; //左電機后退
  77.         right_motor_back; //右電機后退       
  78. }
  79. void stop()
  80. {
  81.         left_motor_stops; //左電機后退
  82.         right_motor_stops; //右電機后退       
  83. }

  84. void Init(void)
  85. {
  86.            EA = 1;            //開總中斷
  87.         PT0 = 1;

  88.         IT0 = 0;                //邊沿觸發方式
  89.         IT1 = 0;                //邊沿觸發方式

  90.            SCON |= 0x50;         // SCON: 模式1, 8-bit UART, 使能接收
  91.         T2CON |= 0x34;         //設置定時器2為串口波特率發生器并啟動定時器2
  92.         TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //設置波特率
  93.         TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
  94.         ES= 1;                         //打開串口中斷
  95.                
  96.         TMOD |= 0x01;        //定時器0,工作模式1,16位定時模式
  97.         TH0 = 0;
  98.         TL0 = 0;                //T0,16位定時計數用于記錄ECHO高電平時間
  99.         TR0 = 1;                //啟動定時器0
  100.         ET0 = 1;                //允許定時器0中斷

  101.         TMOD |= 0x10;        //定時器1,16位定時模式。
  102.         TH1 = 0xff;     //配置定時器0初值,溢出時間為0.1ms
  103.     TL1 = 0xa3;
  104.         TR1 = 1;                //啟動定時器1
  105.         ET1 = 1;        //允許T1中斷

  106. }

  107. void  StartModule()                          //啟動超聲波模塊
  108. {
  109.           TX=1;                                             //啟動一次模塊
  110.       Delay10us(2);
  111.           TX=0;
  112. }

  113. /*計算超聲波所測距離并顯示*/
  114. void Conut()
  115. {
  116.         time=TH0*256+TL0;
  117.         TH0 = 0;
  118.         TL0 = 0;

  119.         S=(float)(time*1.085)*0.17;     //算出來是MM
  120.         if(S>=7000) //超出測量范圍
  121.         {         
  122.                 stop();
  123.                 beep = 0;
  124.                 delay(1000);
  125.                 beep = 1;
  126.         }

  127. }

  128. /*====================================
  129. 函數:void SEH_count_0()
  130. 描述:舵機在左側時指令
  131. ====================================*/
  132. void SEH_count_5()
  133. {
  134.         StartModule();        //啟動模塊測距
  135.         while(!RX);                //當RX(ECHO信號回響)為零時等待
  136.         TR0 = 1;                        //開啟計數
  137.         while(RX) ;                        //當RX為1計數并等待
  138.         TR0 = 0;                        //關閉計數
  139.         Conut();                        //計算距離
  140.         if(S > 170 && S <850 )//設置隨動距離(單位毫米)
  141.         {
  142.                 left_run();                       
  143.         }       
  144. }

  145. /*====================================
  146. 函數:void SEH_count_10()
  147. 描述:舵機在中間時指令
  148. ====================================*/
  149. void SEH_count_10()
  150. {
  151.         StartModule();        //啟動模塊測距
  152.         while(!RX);                //當RX(ECHO信號回響)為零時等待
  153.         TR0 = 1;                        //開啟計數
  154.         while(RX) ;                        //當RX為1計數并等待
  155.         TR0 = 0;                        //關閉計數
  156.         Conut();                        //計算距離
  157.         if(S > 170 && S <850 )//設置隨動距離(單位毫米)
  158.         {
  159.                 forward();                       
  160.         }       
  161. }

  162. /*====================================
  163. 函數:void SEH_count_20()
  164. 描述:舵機在右側時指令
  165. ====================================*/
  166. void SEH_count_15()
  167. {
  168.         StartModule();        //啟動模塊測距
  169.         while(!RX);                //當RX(ECHO信號回響)為零時等待
  170.         TR0 = 1;                        //開啟計數
  171.         while(RX) ;                        //當RX為1計數并等待
  172.         TR0 = 0;                        //關閉計數
  173.         Conut();                        //計算距離
  174.         if(S > 150 && S <850 )//設置隨動距離(單位毫米)
  175.         {
  176.                 right_run();                       
  177.         }       
  178. }

  179. /*====================================
  180. 函數:I2C_init()
  181. 描述:I2C總線初始化
  182. ====================================*/
  183. void I2C_init()
  184. {
  185.         SDA = 1;   //數據總線高
  186.         _nop_();
  187.         SCL = 1;   //時鐘總線高
  188.         _nop_();
  189. }

  190. /*====================================
  191. 函數:I2C_Start()
  192. 描述:I2C起始信號
  193. ====================================*/
  194. void I2C_Start()  
  195. {
  196.         SCL = 1;
  197.         _nop_();
  198.         SDA = 1;
  199.         Delay5us();
  200.         SDA = 0;
  201.         Delay5us();
  202. }

  203. /*====================================
  204. 函數:I2C_Stop()
  205. 描述:I2C停止信號
  206. ====================================*/
  207. void I2C_Stop()
  208. {
  209.         SDA = 0;
  210.         _nop_();
  211.         SCL = 1;
  212.         Delay5us();
  213.         SDA = 1;
  214.         Delay5us();
  215. }

  216. /*====================================
  217. 函數:Master_ACK(bit i)
  218. 參數:i 為0時發送非應答 為1時發送應答
  219. 描述:I2C主機發送應答
  220. ====================================*/
  221. void Master_ACK(bit i)       
  222. {
  223.         SCL = 0; // 拉低時鐘總線允許SDA數據總線上的數據變化
  224.         _nop_(); // 讓總線穩定
  225.         if (i)         //如果i = 1 那么拉低數據總線 表示主機應答
  226.         {
  227.                 SDA = 0;
  228.         }
  229.         else         
  230.         {
  231.                 SDA = 1;         //發送非應答
  232.         }
  233.         _nop_();//讓總線穩定
  234.         SCL = 1;//拉高時鐘總線 讓從機從SDA線上讀走 主機的應答信號
  235.         _nop_();
  236.         SCL = 0;//拉低時鐘總線, 占用總線繼續通信
  237.         _nop_();
  238.         SDA = 1;//釋放SDA數據總線。
  239.         _nop_();
  240. }

  241. /*====================================
  242. 函數:Test_ACK()
  243. 返回:0為非應答 1為應答
  244. 描述:I2C檢測從機應答
  245. ====================================*/
  246. bit Test_ACK()         // 檢測從機應答
  247. {
  248.         SCL = 1;//時鐘總線為高電平期間可以讀取從機應答信號
  249.         Delay5us();
  250.         if (SDA)
  251.         {
  252.                 SCL = 0;
  253.                 I2C_Stop();
  254.                 return(0);
  255.         }
  256.         else
  257.         {
  258.                 SCL = 0;
  259.                 return(1);
  260.         }
  261. }

  262. /*====================================
  263. 函數:I2C_send_byte(uchar byte)
  264. 參數:byte 要發送的字節
  265. 描述:I2C發送一個字節
  266. ====================================*/
  267. void I2C_send_byte(uchar byte)
  268. {
  269.         uchar i;
  270.         for(i = 0 ; i < 8 ; i++)
  271.         {
  272.                 SCL = 0;
  273.                 _nop_();
  274.                 if (byte & 0x80)        //
  275.                 {
  276.                         SDA = 1;
  277.                         _nop_();
  278.                 }
  279.                 else
  280.                 {
  281.                         SDA = 0;
  282.                         _nop_();
  283.                 }
  284.                 SCL = 1;
  285.                 _nop_();
  286.                 byte <<= 1;
  287.         }
  288.         SCL = 0;
  289.         _nop_();
  290.         SDA = 1;
  291.         _nop_();       
  292. }

  293. /*====================================
  294. 函數:I2C_read_byte()
  295. 返回:讀取的字節
  296. 描述:I2C讀一個字節
  297. ====================================*/
  298. uchar I2C_read_byte()
  299. {
  300.         uchar i, dat;
  301.         SCL = 0 ;
  302.         _nop_();
  303.         SDA = 1;
  304.         _nop_();
  305.         for(i = 0 ; i < 8 ; i++)
  306.         {
  307.                 SCL = 1;
  308.                 _nop_();
  309.                 dat <<= 1;          
  310.                 if (SDA)
  311.                 {
  312.                         dat |= 0x01;  
  313.                 }
  314.                 _nop_();
  315.                 SCL = 0;
  316.                 _nop_();
  317.         }
  318.         return(dat);
  319. }

  320. /*讀AD數據*/
  321. bit ADC_Read(uchar CON)
  322. {
  323.         I2C_Start();
  324.         I2C_send_byte(PCF8591_ADDR+0);
  325.         if (!Test_ACK())
  326.         {
  327.                 return(0);
  328.         }
  329.         I2C_send_byte(CON);
  330.         Master_ACK(0);
  331.         I2C_Start();
  332.         I2C_send_byte(PCF8591_ADDR+1);
  333.         if (!Test_ACK())
  334.         {
  335.                 return(0);
  336.         }
  337.         AD_Value = I2C_read_byte();
  338.         Master_ACK(0);
  339.         I2C_Stop();
  340.         return(1);       
  341. }

  342. /*=================================================
  343. *函數名稱:Read_Busy
  344. *函數功能:判斷1602液晶忙,并等待
  345. =================================================*/
  346. void Read_Busy()
  347. {
  348.         uchar busy;
  349.         LCD1602_DB = 0xff;//復位數據總線
  350.         LCD1602_RS = 0;          //拉低RS
  351.         LCD1602_RW = 1;          //拉高RW讀
  352.         do
  353.         {
  354.                 LCD1602_EN = 1;//使能EN
  355.                 busy = LCD1602_DB;//讀回數據
  356.                 LCD1602_EN = 0;         //拉低使能以便于下一次產生上升沿
  357.         }while(busy & 0x80); //判斷狀態字BIT7位是否為1,為1則表示忙,程序等待
  358. }

  359. /*=================================================
  360. *函數名稱:LCD1602_Write_Cmd
  361. *函數功能:寫LCD1602命令
  362. *調用:Read_Busy();
  363. *輸入:cmd:要寫的命令
  364. =================================================*/
  365. void LCD1602_Write_Cmd(uchar cmd)
  366. {
  367.         Read_Busy();         //判斷忙,忙則等待
  368.         LCD1602_RS = 0;
  369.         LCD1602_RW = 0;        //拉低RS、RW操作時序情況1602課件下中文使用說明基本操作時序章節
  370.         LCD1602_DB = cmd;//寫入命令
  371.         LCD1602_EN = 1;         //拉高使能端 數據被傳輸到LCD1602內
  372.         LCD1602_EN = 0;         //拉低使能以便于下一次產生上升沿
  373. }

  374. /*=================================================
  375. *函數名稱:LCD1602_Write_Dat
  376. *函數功能:寫LCD1602數據
  377. *調用:Read_Busy();
  378. *輸入:dat:需要寫入的數據
  379. =================================================*/
  380. void LCD1602_Write_Dat(uchar dat)
  381. {
  382.         Read_Busy();
  383.         LCD1602_RS = 1;
  384.         LCD1602_RW = 0;
  385.         LCD1602_DB = dat;
  386.         LCD1602_EN = 1;
  387.         LCD1602_EN = 0;
  388. }

  389. /*=================================================
  390. *函數名稱:LCD1602_Dis_Str
  391. *函數功能:在指定位置顯示字符串
  392. *調用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
  393. *輸入:x:要顯示的橫坐標取值0-40,y:要顯示的行坐標取值0-1(0為第一行,1為第二行)
  394.                 *str:需要顯示的字符串
  395. =================================================*/
  396. void LCD1602_Dis_Str(uchar x, uchar y, uchar *str)
  397. {
  398.         if(y) x |= 0x40;
  399.         x |= 0x80;
  400.         LCD1602_Write_Cmd(x);
  401.         while(*str != '\0')
  402.         {
  403.                 LCD1602_Write_Dat(*str++);
  404.         }
  405. }
  406. /*=================================================
  407. *函數名稱:Init_LCD1602
  408. *函數功能:1602初始化
  409. *調用:        LCD1602_Write_Cmd();
  410. =================================================*/
  411. void Init_LCD1602()
  412. {
  413.         LCD1602_Write_Cmd(0x38); //        設置16*2顯示,5*7點陣,8位數據接口
  414.         LCD1602_Write_Cmd(0x0c); //開顯示
  415.         LCD1602_Write_Cmd(0x06); //讀寫一字節后地址指針加1
  416.         LCD1602_Write_Cmd(0x01); //清除顯示
  417. }
  418. /*=================================================
  419. *函數名稱:Dispaly_LCD1602
  420. *函數功能:1602顯示字符
  421. *調用:        LCD1602_Write_Cmd();
  422. =================================================*/
  423. void Dispaly_LCD1602()
  424. {
  425.         int LCD_CK=0;
  426.         uchar Str_1[] = {"Welcome to use"};
  427.         uchar Str_2[] = {"Pick a pattern"};
  428.         uchar Str_3[] = {"S2 -> automatic"};
  429.         uchar Str_4[] = {"S3 -> bluetooth"};
  430.         Init_LCD1602();//1602初始化
  431.         for(;;)        //死循環
  432.         {
  433.                 if(LCD_CK == 0)
  434.                 {
  435.                          LCD1602_Dis_Str(0, 0, &Str_1[0]);        //顯示字符串
  436.                         LCD1602_Dis_Str(0, 1, &Str_2[0]);        //顯示字符串
  437.                         delay(10);               
  438.                 }
  439.                 if(LCD_CK == 20000)
  440.                 {
  441.                          LCD1602_Dis_Str(0, 0, &Str_3[0]);        //顯示字符串
  442.                         LCD1602_Dis_Str(0, 1, &Str_4[0]);        //顯示字符串
  443.                         delay(10);
  444.                 }/**/
  445.                                
  446.                 if(key_s2 == 0)// 實時檢測S2按鍵是否被按下
  447.                 {
  448.                         delay(5); //軟件消抖
  449.                         if(key_s2 == 0)//再檢測S2是否被按下
  450.                         {
  451.                                 while(!key_s2);//松手檢測
  452.                                 delay(50);//50毫秒延時
  453.                                 Control_mode = 0;
  454.                                 break;                //退出FOR死循環
  455.                         }
  456.                 }
  457.                 if(key_s3 == 0)// 實時檢測S3按鍵是否被按下
  458.                 {
  459.                         delay(5); //軟件消抖
  460.                         if(key_s3 == 0)//再檢測S3是否被按下
  461.                         {
  462.                                 while(!key_s3);//松手檢測
  463.                                 delay(50);//50毫秒延時
  464.                                 Control_mode = 1;
  465.                                 break;                //退出FOR死循環
  466.                         }
  467.                 }

  468.                 if(LCD_CK <= 40000)        LCD_CK++;
  469.                 if(LCD_CK >= 40000) LCD_CK = 0;
  470.         }               
  471. }

  472. void main()
  473. {
  474.         DU = 0;
  475.         WE = 0;
  476.         EN2 = EN1 =1;
  477.         SEH_count = 10;
  478.         Dispaly_LCD1602();
  479.         I2C_init();//I2C初始化
  480.         LCD1602_Write_Cmd(0x08); //關閉1602顯示
  481.         Init();//定時器、串口初始化Init();//定時器、串口初始化       
  482.         beep = 0;
  483.         delay(200);//延時1秒
  484.         beep = 1;
  485.         while(1)
  486.         {
  487.                 if(Control_mode == 1)
  488.                 {
  489.                         EX0 = 0;                //關閉外部中斷1
  490.                         EX1 = 0;                //關閉外部中斷2

  491.                         while(1)
  492.                         {
  493.                                 if(control>0X07)//如果成立,則表示接收的命令不在運行命令內
  494.                                   {
  495.                                            stop();        //  停車
  496.                                    }
  497.                                 switch(control)
  498.                                 {                                       
  499.                                         case 0X02:        forward();                 break;//前進
  500.                                         case 0X03:        backward();                 break;//后退
  501.                                         case 0X04:        left_run();                 break;//左轉
  502.                                         case 0X05:        right_run();         break;//右轉
  503.                                         case 0X01:        stop();                         break;//停車
  504.                                         case 0X08:        beep = 0;                 break;//鳴笛
  505.                                         case 0X09:        beep = 1;                 break;//停止鳴笛
  506.                                         case 0X0B:        SEH_count = 10;         break;//SEH_COUNT: 10:0.5+1(0.1*10T)=1.5ms->90°舵機角度
  507.                                         case 0X0A:        Control_mode = 0;break;
  508.                                 }
  509.                                 break;
  510.                         }
  511.                 }
  512.                 if(Control_mode == 0)
  513.                 {
  514.                         EX0 = 1;                //打開外部中斷1
  515.                         EX1 = 1;                //打開外部中斷2

  516.                          for (;;)
  517.                         {                               
  518.                                 SEH_count = 12;
  519.                                 delay(300);
  520.                                 ADC_Read(0x03);//體感模塊,當檢測到人體收輸出3.3高電平
  521.                                 if(AD_Value > 100) SEH_count_10();

  522.                                 SEH_count = 6;
  523.                                 delay(300);
  524.                                 ADC_Read(0x03);//體感模塊,當檢測到人體收輸出3.3高電平
  525.                                 if(AD_Value > 100) SEH_count_5();//大于3.1V表示感應到了人體,小車行進

  526.                                 SEH_count = 12;
  527.                                 delay(300);
  528.                                 ADC_Read(0x03);//體感模塊,當檢測到人體收輸出3.3高電平
  529.                                 if(AD_Value > 100) SEH_count_10();

  530.                                 SEH_count = 18;
  531.                                 delay(300);
  532.                                 ADC_Read(0x03);//體感模塊,當檢測到人體收輸出3.3高電平
  533.                                 if(AD_Value > 150) SEH_count_15();

  534.                                 if(control == 0X0C)
  535.                                 {
  536.                                          Control_mode = 1;
  537.                                         break;       
  538.                                 }
  539.                         }
  540.                 }
  541.         }       
  542. }
  543. void int0() interrupt 0
  544. {       
  545.         EX0 = 0;
  546.         delay(10);
  547.         if(left_led2 == 0)
  548.         {               
  549.                   backward();
  550.                 delay(500);
  551.                 key_s3 = 1;
  552.                 right_run();
  553.                 delay(700);
  554.                 forward();
  555.                 delay(500);
  556.                 stop();
  557.         }
  558.         EX0 = 1;                       
  559. }

  560. //定時器0中斷
  561. void timer0() interrupt 1
  562. {
  563. /*        pwm_t++;//周期計時加
  564.         if(pwm_t == 120)
  565.                 pwm_t = EN1 = EN2 = 0;
  566.         if(pwm_left_val == pwm_t)//左電機占空比       
  567.                 EN1 = 1;               
  568.         if(pwm_right_val == pwm_t)//右電機占空比
  569.                 EN2 = 1;
  570. */                                                 
  571. }

  572. void int1() interrupt 2
  573. {       
  574.         EX1 = 0;
  575.         delay(10);
  576.         if(right_led2 == 0)
  577.         {
  578.                
  579.                   backward();
  580.                 delay(500);
  581.                 key_s3 = 1;
  582.                 left_run();
  583.                 delay(700);
  584.                 forward();
  585.                 delay(500);
  586.                 stop();
  587.         }
  588.         EX1 = 1;
  589. }

  590. //定時器1中斷
  591. void timer1() interrupt 3                  //T1中斷用來計數器溢出
  592. {
  593.         TR1 = 0;      //關閉定時器1
  594.     TH1 = 0xff;   //重裝初值0.1ms
  595.     TL1 = 0xa3;
  596.     //舵機1
  597.     if(count <= SEH_count) //控制占空比左右
  598.     {
  599.         //如果count的計數小于(5-25)也就是0.5ms-2.5ms則這段小t周期持續高電平。產生方波
  600.         Servo = 1;
  601.     }
  602.     else
  603.     {
  604.         Servo = 0;
  605.     }
  606.         count++;
  607.     if (count >= 200) //T = 20ms則定時器計數變量清0
  608.     {
  609.         count = 0;
  610.     }

  611.         TR1 = 1; //開啟定時器1
  612. }

  613. /******************************************************************/
  614. /* 串口中斷程序*/
  615. /******************************************************************/
  616. void UART_SER () interrupt 4
  617. {
  618.         unsigned char n;         //定義臨時變量

  619.         if(RI)                 //判斷是接收中斷產生
  620.         {
  621.                 RI=0;         //標志位清零
  622.                 n=SBUF; //讀入緩沖區的值

  623.                 control=n;
  624. /*                if((n >= 51) && (n <= 150))//左電機調速0~100個檔位 手機端軟件進行調節
  625.                         pwm_left_val = 0.8-((n-50)*0.8);       
  626.                 if((n >= 151) && (n <= 250))          //右電機調速0~100個檔位 手機端軟件進行調節
  627.                         pwm_right_val = 0.8-((n-150)*0.8);*/
  628.                 if((n >= 51) && (n <= 150))//左電機調速0~100個檔位 手機端軟件進行調節
  629.                         pwm_left_val = 1.7-((n-50)*1.7);       
  630.                 if((n >= 151) && (n <= 250))          //右電機調速0~100個檔位 手機端軟件進行調節
  631.                         pwm_right_val = 1.7-((n-150)*1.7);
  632.         }
  633. }
復制代碼

所有資料51hei提供下載:
Smart_car4 紅外避障&amp;超聲波跟隨.rar (56.44 KB, 下載次數: 25)




評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线观看国产 | 中文字幕 亚洲一区 | 欧美日韩精品专区 | 国产中文一区二区三区 | 亚州视频在线 | 在线免费观看视频黄 | 美女天堂 | 国产欧美日韩一区二区三区在线 | 日韩精品视频在线播放 | 国产精品久久久久久久久免费桃花 | 91欧美精品成人综合在线观看 | 在线日韩av电影 | www视频在线观看 | 日韩一区二区精品 | 日韩一区精品 | 人人人人干| 亚洲一区二区三区四区五区中文 | 亚洲视频精品 | 亚洲在线高清 | 欧美大片久久久 | 91成人在线视频 | 日日干干夜夜 | 国产精品无码专区在线观看 | 日韩视频a | 黄色免费av | 欧美亚洲国产日韩 | 国产精品欧美精品 | 九色在线观看 | 亚洲福利网站 | 在线视频a | 国产成人99久久亚洲综合精品 | 91网站在线播放 | 涩涩视频大全 | 黄色网址在线播放 | 人人精品 | 一区二区三区四区电影视频在线观看 | 久久亚洲天堂 | 国产欧美精品一区二区色综合 | 精品无码久久久久久国产 | 97伦理| 爱爱免费视频 |