找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 10782|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

wifi智能小車Arduino程序,追加提速和減速功能 帶手機(jī)端apk

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


資料51hei下載地址:
WIFI智能小車改鍵值.rar (35.43 KB, 下載次數(shù): 93)

  1. //============================智宇科技===========================、
  2. /*前進(jìn)  按下發(fā)出 ONA  松開ONF
  3.   后退:按下發(fā)出 ONB  松開ONF
  4.   左轉(zhuǎn):按下發(fā)出 ONC  松開ONF
  5.   右轉(zhuǎn):按下發(fā)出 OND  松開ONF
  6.   停止:按下發(fā)出 ONE  松開ONF
  7.   
  8.   WIFI程序功能是按下對應(yīng)的按鍵執(zhí)行操,松開按鍵就停止
  9. */
  10. int sd = 115;
  11. int Left_motor=8;     //左電機(jī)(IN3) 輸出0  前進(jìn)   輸出1 后退
  12. int Left_motor_pwm=9;     //左電機(jī)PWM調(diào)速
  13. int Right_motor_pwm=10;    // 右電機(jī)PWM調(diào)速
  14. int Right_motor=11;    // 右電機(jī)后退(IN1)  輸出0  前進(jìn)   輸出1 后退
  15. int servopin7=7;//設(shè)置左右舵機(jī)驅(qū)動(dòng)腳到數(shù)字口7
  16. int servopin12=12;//設(shè)置上下舵機(jī)驅(qū)動(dòng)腳到數(shù)字口12
  17. int myangle;//定義角度變量
  18. int pulsewidth;//定義脈寬變量
  19. int val;  
  20. char buffer[18];  //串口緩沖區(qū)的字符數(shù)組
  21. void setup()   //設(shè)定串口和引腳模式
  22. {
  23.      Serial.begin(9600);
  24.      Serial.flush();  //清空串口緩存
  25.      pinMode(Left_motor,OUTPUT); // PIN 8 8腳無PWM功能
  26.      pinMode(Left_motor_pwm,OUTPUT); // PIN 9 (PWM)
  27.      pinMode(Right_motor_pwm,OUTPUT);// PIN 10 (PWM)
  28.      pinMode(Right_motor,OUTPUT);// PIN 11 (PWM)
  29.      pinMode(servopin7,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口
  30.      pinMode(servopin12,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口
  31. }
  32. void run(int sd)     // 前進(jìn)
  33. {
  34.   digitalWrite(Right_motor,LOW);  // 右電機(jī)前進(jìn)
  35.   digitalWrite(Right_motor_pwm,HIGH);  // 右電機(jī)前進(jìn)     
  36.   analogWrite(Right_motor_pwm,sd);//PWM比例0~255調(diào)速,左右輪差異略增減
  37.   
  38.   
  39.   digitalWrite(Left_motor,LOW);  // 左電機(jī)前進(jìn)
  40.   digitalWrite(Left_motor_pwm,HIGH);  //左電機(jī)PWM     
  41.   analogWrite(Left_motor_pwm,sd);//PWM比例0~255調(diào)速,左右輪差異略增減
  42.   //delay(time * 100);   //執(zhí)行時(shí)間,可以調(diào)整  
  43. }
  44. void brake()         //剎車,停車
  45. {
  46.   
  47.   digitalWrite(Right_motor_pwm,LOW);  // 右電機(jī)PWM 調(diào)速輸出0      
  48.   analogWrite(Right_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
  49.   digitalWrite(Left_motor_pwm,LOW);  //左電機(jī)PWM 調(diào)速輸出0         
  50.   analogWrite(Left_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
  51.   //delay(time * 100);//執(zhí)行時(shí)間,可以調(diào)整  
  52. }
  53. void left()         //左轉(zhuǎn)(左輪不動(dòng),右輪前進(jìn))
  54. {
  55.    digitalWrite(Right_motor,LOW);  // 右電機(jī)前進(jìn)
  56.   digitalWrite(Right_motor_pwm,HIGH);  // 右電機(jī)前進(jìn)     
  57.   analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
  58.   
  59.   
  60.   digitalWrite(Left_motor,LOW);  // 左電機(jī)前進(jìn)
  61.   digitalWrite(Left_motor_pwm,LOW);  //左電機(jī)PWM     
  62.   analogWrite(Left_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
  63.   //delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整  
  64. }
  65. void spin_left()         //左轉(zhuǎn)(左輪后退,右輪前進(jìn))
  66. {
  67.   digitalWrite(Right_motor,LOW);  // 右電機(jī)前進(jìn)
  68.   digitalWrite(Right_motor_pwm,HIGH);  // 右電機(jī)前進(jìn)     
  69.   analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
  70.   
  71.   digitalWrite(Left_motor,HIGH);  // 左電機(jī)后退
  72.   digitalWrite(Left_motor_pwm,HIGH);  //左電機(jī)PWM     
  73.   analogWrite(Left_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
  74.   //delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整  
  75. }
  76. void right()        //右轉(zhuǎn)(右輪不動(dòng),左輪前進(jìn))
  77. {
  78.    digitalWrite(Right_motor,LOW);  // 右電機(jī)不轉(zhuǎn)
  79.   digitalWrite(Right_motor_pwm,LOW);  // 右電機(jī)PWM輸出0     
  80.   analogWrite(Right_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
  81.   
  82.   
  83.   digitalWrite(Left_motor,LOW);  // 左電機(jī)前進(jìn)
  84.   digitalWrite(Left_motor_pwm,HIGH);  //左電機(jī)PWM     
  85.   analogWrite(Left_motor_pwm,150);//PWM比例0~255調(diào)速,左右輪差異略增減
  86.   //delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整  
  87. }
  88. void spin_right()        //右轉(zhuǎn)(右輪后退,左輪前進(jìn))
  89. {
  90.   digitalWrite(Right_motor,HIGH);  // 右電機(jī)后退
  91.   digitalWrite(Right_motor_pwm,HIGH);  // 右電機(jī)PWM輸出1     
  92.   analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
  93.   
  94.   
  95.   digitalWrite(Left_motor,LOW);  // 左電機(jī)前進(jìn)
  96.   digitalWrite(Left_motor_pwm,HIGH);  //左電機(jī)PWM     
  97.   analogWrite(Left_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
  98.   //delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整   
  99. }
  100. void back()          //后退
  101. {
  102.   digitalWrite(Right_motor,HIGH);  // 右電機(jī)后退
  103.   digitalWrite(Right_motor_pwm,HIGH);  // 右電機(jī)前進(jìn)     
  104.   analogWrite(Right_motor_pwm,100);//PWM比例0~255調(diào)速,左右輪差異略增減
  105.   
  106.   
  107.   digitalWrite(Left_motor,HIGH);  // 左電機(jī)后退
  108.   digitalWrite(Left_motor_pwm,HIGH);  //左電機(jī)PWM     
  109.   analogWrite(Left_motor_pwm,100);//PWM比例0~255調(diào)速,左右輪差異略增減
  110.   //delay(time * 100);   //執(zhí)行時(shí)間,可以調(diào)整   
  111. }
  112. void servopulse(int servopin7,int myangle)/*定義一個(gè)脈沖函數(shù),用來模擬方式產(chǎn)生PWM值舵機(jī)的范圍是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
  113. {
  114.   pulsewidth=(myangle*11)+450;//將角度轉(zhuǎn)化為500-2480 的脈寬值 這里的myangle就是0-180度  所以180*11+50=2480  11是為了換成90度的時(shí)候基本就是1.5MS
  115.   digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高                                      90*11+50=1490uS  就是1.5ms
  116.   delayMicroseconds(pulsewidth);//延時(shí)脈寬值的微秒數(shù)  這里調(diào)用的是微秒延時(shí)函數(shù)
  117.   digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
  118.   delay(20-(pulsewidth*0.001));//延時(shí)周期內(nèi)剩余時(shí)間  這里調(diào)用的是ms延時(shí)函數(shù)
  119. }
  120. void servopulsesx(int servopin12,int myangle)/*定義一個(gè)脈沖函數(shù),用來模擬方式產(chǎn)生PWM值舵機(jī)的范圍是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
  121. {
  122.   pulsewidth=(myangle*11)+400;//將角度轉(zhuǎn)化為500-2480 的脈寬值 這里的myangle就是0-180度  所以180*11+50=2480  11是為了換成90度的時(shí)候基本就是1.5MS
  123.   digitalWrite(servopin12,HIGH);//將舵機(jī)接口電平置高                                      90*11+50=1490uS  就是1.5ms
  124.   delayMicroseconds(pulsewidth);//延時(shí)脈寬值的微秒數(shù)  這里調(diào)用的是微秒延時(shí)函數(shù)
  125.   digitalWrite(servopin12,LOW);//將舵機(jī)接口電平置低
  126.   delay(20-(pulsewidth*0.001));//延時(shí)周期內(nèi)剩余時(shí)間  這里調(diào)用的是ms延時(shí)函數(shù)
  127. }
  128. void front_detection()// 左右電機(jī)前   
  129. {
  130.   //此處循環(huán)次數(shù)減少,為了增加小車遇到障礙物的反應(yīng)速度
  131.   for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
  132.   {
  133.     servopulse(servopin7,1);//模擬產(chǎn)生PWM
  134.   }

  135. }
  136. void left_detection()//左右舵機(jī)靠左
  137. {
  138.   for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
  139.   {
  140. //    servopulse(servopin7,175);//模擬產(chǎn)生PWM
  141.   digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高                                      90*11+50=1490uS  就是1.5ms
  142.   delayMicroseconds(2476);//延時(shí)脈寬值的微秒數(shù)  這里調(diào)用的是微秒延時(shí)函數(shù)
  143.   digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
  144.   delay(2);//延時(shí)周期內(nèi)剩余時(shí)間  這里調(diào)用的是ms延時(shí)函數(shù)
  145.   }

  146. }
  147. void right_detection()//左右電機(jī)靠右
  148. {
  149.   for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
  150.   {
  151. //    servopulse(servopin7,1);//模擬產(chǎn)生PWM
  152.   digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高                                      90*11+50=1490uS  就是1.5ms
  153.   delayMicroseconds(200);//延時(shí)脈寬值的微秒數(shù)  這里調(diào)用的是微秒延時(shí)函數(shù)
  154.   digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
  155.   delay(2);//延時(shí)周期內(nèi)剩余時(shí)間  這里調(diào)用的是ms延時(shí)函數(shù)
  156.   }

  157. }
  158. void s_detection()//上下舵機(jī)上
  159. {
  160.   for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
  161.   {
  162.     servopulsesx(servopin12,1);//模擬產(chǎn)生PWM
  163.   }
  164. }
  165. void x_detection()//上下舵機(jī)下
  166. {
  167.   for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
  168.   {
  169.     servopulsesx(servopin12,175);//模擬產(chǎn)生PWM
  170.   }
  171. }
  172. void loop()
  173. {
  174.     if(Serial.available() > 0)   //Serial.available()返回串口收到的字節(jié)數(shù)
  175.     {
  176.        int index = 0;
  177.        delay(100);    //延時(shí)等待串口收完數(shù)據(jù),否則剛收到1個(gè)字節(jié)時(shí)就會執(zhí)行后續(xù)程序
  178.        int numChar = Serial.available();
  179.        if(numChar > 15)    //確認(rèn)數(shù)據(jù)不會溢出,應(yīng)當(dāng)小于緩沖大小
  180.        {
  181.          numChar = 15;
  182.         }
  183.        while(numChar--)
  184.       {
  185.           buffer[index++] = Serial.read(); //將串口數(shù)據(jù)一字一字的存入緩沖
  186.       }
  187.        splitString(buffer);    //字符串分割
  188.     }
  189. }
  190. void splitString(char *data)
  191. {
  192.        Serial.print("Data entered:");
  193.        Serial.println(data);
  194.        char *parameter;
  195.        parameter = strtok(data, " ,");  //string token,將data按照空格或者,進(jìn)行分割并截取
  196.        Serial.print("***");
  197.        Serial.println(parameter);
  198. while(parameter != NULL)
  199. {
  200.     setLED(parameter);
  201.     parameter = strtok(NULL, " ,");  //string token,再次分割并截取,直至截取后的字符為空
  202.     Serial.print("---");
  203.     Serial.println(parameter);   
  204. }
  205.    for(int x = 0; x < 16; x++)   //清空緩沖
  206.   {
  207.    buffer[x] = '\0';
  208.   }
  209.      Serial.flush();
  210.   }
  211. void setLED(char *data)
  212. {
  213.    if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'A'))
  214.    {
  215.     Serial.println("go forward!");
  216.       run(sd);
  217.   }
  218.   if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'B'))
  219.    {
  220.     Serial.println("go back!");
  221.       back();
  222. }
  223.     if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'C'))
  224.    {
  225.       Serial.println("go left!");
  226.       spin_left();
  227.   }
  228.     if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'D'))
  229.    {
  230.      Serial.println("go right!");
  231.       spin_right();
  232.   }
  233.     if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'E'))
  234.    {
  235.       Serial.println("Stop!");
  236.       brake();
  237.   }
  238.     if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'F'))
  239.    {
  240.     Serial.println("Stop!");
  241.      brake();  
  242.    }
  243.   /* 以下是控制舵機(jī)左,上下舵機(jī)                            */
  244.   if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'L'))//左
  245.    {
  246.      left_detection();  
  247.    }
  248.   if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'I'))//右
  249.    {
  250.       right_detection();
  251.    }
  252.    
  253.    if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'K'))//上
  254.    {
  255.       s_detection();
  256.    }
  257.    if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'J'))//下
  258.    {
  259.       x_detection();
  260.    }
  261. //---------------------------
  262.     if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'G'))
  263.    {
  264.     if(sd+10<=255)
  265.     {
  266.       sd = sd+10;
  267.     }
  268.     Serial.println(sd);
  269.     run(sd);
  270.    }
  271.    if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'H'))//jianshu
  272.    {
  273.     if(sd-10>40)
  274.     {
  275.       sd = sd-10;
  276.     }
  277.     Serial.println(sd);
  278.     run(sd);
  279.    }
  280.    
  281. }
復(fù)制代碼


評分

參與人數(shù) 1黑幣 +5 收起 理由
蔡定銀 + 5 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:304003 發(fā)表于 2018-4-9 10:19 | 只看該作者
帶上位機(jī)程序的嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:318965 發(fā)表于 2018-5-2 17:46 | 只看該作者
下載了APP,不連WIFI的情況下,APP一按就退出
回復(fù)

使用道具 舉報(bào)

地板
ID:284606 發(fā)表于 2018-5-5 13:46 | 只看該作者
學(xué)習(xí)一下,感謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:344133 發(fā)表于 2018-6-6 08:24 | 只看該作者
感謝分享,正在學(xué)習(xí),很有幫助啊
回復(fù)

使用道具 舉報(bào)

6#
ID:347921 發(fā)表于 2018-6-8 22:53 | 只看該作者
好像功能不太理想��!
回復(fù)

使用道具 舉報(bào)

7#
ID:243748 發(fā)表于 2018-6-25 07:38 來自觸屏版 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:90140 發(fā)表于 2018-6-25 08:31 | 只看該作者
學(xué)習(xí)一下,感謝分享!!
回復(fù)

使用道具 舉報(bào)

9#
ID:283315 發(fā)表于 2018-6-25 09:22 | 只看該作者
怎么用藍(lán)牙接收控制智能小車
回復(fù)

使用道具 舉報(bào)

10#
ID:104477 發(fā)表于 2018-8-25 23:31 來自觸屏版 | 只看該作者
距離才十米,有什么意義
回復(fù)

使用道具 舉報(bào)

11#
ID:168356 發(fā)表于 2020-1-7 13:26 | 只看該作者
我想學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

12#
ID:373684 發(fā)表于 2022-2-27 18:46 | 只看該作者
可以加個(gè)攝像頭的嗎?
回復(fù)

使用道具 舉報(bào)

13#
ID:307493 發(fā)表于 2023-10-11 10:38 | 只看該作者
距離有點(diǎn)短
回復(fù)

使用道具 舉報(bào)

14#
ID:845150 發(fā)表于 2024-3-8 16:31 | 只看該作者
手機(jī)端apk不行
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表