找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10895|回复: 13
打印 上一主题 下一主题
收起左侧

wifi智能小车Arduino程序,追加提速和减速功能 带手机端apk

  [复制链接]
跳转到指定楼层
楼主


资料51hei下载地址:
WIFI智能小车改键值.rar (35.43 KB, 下载次数: 93)

  1. //============================智宇科技===========================、
  2. /*前进  按下发出 ONA  松开ONF
  3.   后退:按下发出 ONB  松开ONF
  4.   左转:按下发出 ONC  松开ONF
  5.   右转:按下发出 OND  松开ONF
  6.   停止:按下发出 ONE  松开ONF
  7.   
  8.   WIFI程序功能是按下对应的按键执行操,松开按键就停止
  9. */
  10. int sd = 115;
  11. int Left_motor=8;     //左电机(IN3) 输出0  前进   输出1 后退
  12. int Left_motor_pwm=9;     //左电机PWM调速
  13. int Right_motor_pwm=10;    // 右电机PWM调速
  14. int Right_motor=11;    // 右电机后退(IN1)  输出0  前进   输出1 后退
  15. int servopin7=7;//设置左右舵机驱动脚到数字口7
  16. int servopin12=12;//设置上下舵机驱动脚到数字口12
  17. int myangle;//定义角度变量
  18. int pulsewidth;//定义脉宽变量
  19. int val;  
  20. char buffer[18];  //串口缓冲区的字符数组
  21. void setup()   //设定串口和引脚模式
  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);//设定舵机接口为输出接口
  30.      pinMode(servopin12,OUTPUT);//设定舵机接口为输出接口
  31. }
  32. void run(int sd)     // 前进
  33. {
  34.   digitalWrite(Right_motor,LOW);  // 右电机前进
  35.   digitalWrite(Right_motor_pwm,HIGH);  // 右电机前进     
  36.   analogWrite(Right_motor_pwm,sd);//PWM比例0~255调速,左右轮差异略增减
  37.   
  38.   
  39.   digitalWrite(Left_motor,LOW);  // 左电机前进
  40.   digitalWrite(Left_motor_pwm,HIGH);  //左电机PWM     
  41.   analogWrite(Left_motor_pwm,sd);//PWM比例0~255调速,左右轮差异略增减
  42.   //delay(time * 100);   //执行时间,可以调整  
  43. }
  44. void brake()         //刹车,停车
  45. {
  46.   
  47.   digitalWrite(Right_motor_pwm,LOW);  // 右电机PWM 调速输出0      
  48.   analogWrite(Right_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
  49.   digitalWrite(Left_motor_pwm,LOW);  //左电机PWM 调速输出0         
  50.   analogWrite(Left_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
  51.   //delay(time * 100);//执行时间,可以调整  
  52. }
  53. void left()         //左转(左轮不动,右轮前进)
  54. {
  55.    digitalWrite(Right_motor,LOW);  // 右电机前进
  56.   digitalWrite(Right_motor_pwm,HIGH);  // 右电机前进     
  57.   analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
  58.   
  59.   
  60.   digitalWrite(Left_motor,LOW);  // 左电机前进
  61.   digitalWrite(Left_motor_pwm,LOW);  //左电机PWM     
  62.   analogWrite(Left_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
  63.   //delay(time * 100); //执行时间,可以调整  
  64. }
  65. void spin_left()         //左转(左轮后退,右轮前进)
  66. {
  67.   digitalWrite(Right_motor,LOW);  // 右电机前进
  68.   digitalWrite(Right_motor_pwm,HIGH);  // 右电机前进     
  69.   analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
  70.   
  71.   digitalWrite(Left_motor,HIGH);  // 左电机后退
  72.   digitalWrite(Left_motor_pwm,HIGH);  //左电机PWM     
  73.   analogWrite(Left_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
  74.   //delay(time * 100); //执行时间,可以调整  
  75. }
  76. void right()        //右转(右轮不动,左轮前进)
  77. {
  78.    digitalWrite(Right_motor,LOW);  // 右电机不转
  79.   digitalWrite(Right_motor_pwm,LOW);  // 右电机PWM输出0     
  80.   analogWrite(Right_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
  81.   
  82.   
  83.   digitalWrite(Left_motor,LOW);  // 左电机前进
  84.   digitalWrite(Left_motor_pwm,HIGH);  //左电机PWM     
  85.   analogWrite(Left_motor_pwm,150);//PWM比例0~255调速,左右轮差异略增减
  86.   //delay(time * 100); //执行时间,可以调整  
  87. }
  88. void spin_right()        //右转(右轮后退,左轮前进)
  89. {
  90.   digitalWrite(Right_motor,HIGH);  // 右电机后退
  91.   digitalWrite(Right_motor_pwm,HIGH);  // 右电机PWM输出1     
  92.   analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
  93.   
  94.   
  95.   digitalWrite(Left_motor,LOW);  // 左电机前进
  96.   digitalWrite(Left_motor_pwm,HIGH);  //左电机PWM     
  97.   analogWrite(Left_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
  98.   //delay(time * 100); //执行时间,可以调整   
  99. }
  100. void back()          //后退
  101. {
  102.   digitalWrite(Right_motor,HIGH);  // 右电机后退
  103.   digitalWrite(Right_motor_pwm,HIGH);  // 右电机前进     
  104.   analogWrite(Right_motor_pwm,100);//PWM比例0~255调速,左右轮差异略增减
  105.   
  106.   
  107.   digitalWrite(Left_motor,HIGH);  // 左电机后退
  108.   digitalWrite(Left_motor_pwm,HIGH);  //左电机PWM     
  109.   analogWrite(Left_motor_pwm,100);//PWM比例0~255调速,左右轮差异略增减
  110.   //delay(time * 100);   //执行时间,可以调整   
  111. }
  112. void servopulse(int servopin7,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值舵机的范围是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
  113. {
  114.   pulsewidth=(myangle*11)+450;//将角度转化为500-2480 的脉宽值 这里的myangle就是0-180度  所以180*11+50=2480  11是为了换成90度的时候基本就是1.5MS
  115.   digitalWrite(servopin7,HIGH);//将舵机接口电平置高                                      90*11+50=1490uS  就是1.5ms
  116.   delayMicroseconds(pulsewidth);//延时脉宽值的微秒数  这里调用的是微秒延时函数
  117.   digitalWrite(servopin7,LOW);//将舵机接口电平置低
  118.   delay(20-(pulsewidth*0.001));//延时周期内剩余时间  这里调用的是ms延时函数
  119. }
  120. void servopulsesx(int servopin12,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值舵机的范围是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
  121. {
  122.   pulsewidth=(myangle*11)+400;//将角度转化为500-2480 的脉宽值 这里的myangle就是0-180度  所以180*11+50=2480  11是为了换成90度的时候基本就是1.5MS
  123.   digitalWrite(servopin12,HIGH);//将舵机接口电平置高                                      90*11+50=1490uS  就是1.5ms
  124.   delayMicroseconds(pulsewidth);//延时脉宽值的微秒数  这里调用的是微秒延时函数
  125.   digitalWrite(servopin12,LOW);//将舵机接口电平置低
  126.   delay(20-(pulsewidth*0.001));//延时周期内剩余时间  这里调用的是ms延时函数
  127. }
  128. void front_detection()// 左右电机前   
  129. {
  130.   //此处循环次数减少,为了增加小车遇到障碍物的反应速度
  131.   for(int i=0;i<=5;i++) //产生PWM个数,等效延时以保证能转到响应角度
  132.   {
  133.     servopulse(servopin7,1);//模拟产生PWM
  134.   }

  135. }
  136. void left_detection()//左右舵机靠左
  137. {
  138.   for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
  139.   {
  140. //    servopulse(servopin7,175);//模拟产生PWM
  141.   digitalWrite(servopin7,HIGH);//将舵机接口电平置高                                      90*11+50=1490uS  就是1.5ms
  142.   delayMicroseconds(2476);//延时脉宽值的微秒数  这里调用的是微秒延时函数
  143.   digitalWrite(servopin7,LOW);//将舵机接口电平置低
  144.   delay(2);//延时周期内剩余时间  这里调用的是ms延时函数
  145.   }

  146. }
  147. void right_detection()//左右电机靠右
  148. {
  149.   for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
  150.   {
  151. //    servopulse(servopin7,1);//模拟产生PWM
  152.   digitalWrite(servopin7,HIGH);//将舵机接口电平置高                                      90*11+50=1490uS  就是1.5ms
  153.   delayMicroseconds(200);//延时脉宽值的微秒数  这里调用的是微秒延时函数
  154.   digitalWrite(servopin7,LOW);//将舵机接口电平置低
  155.   delay(2);//延时周期内剩余时间  这里调用的是ms延时函数
  156.   }

  157. }
  158. void s_detection()//上下舵机上
  159. {
  160.   for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
  161.   {
  162.     servopulsesx(servopin12,1);//模拟产生PWM
  163.   }
  164. }
  165. void x_detection()//上下舵机下
  166. {
  167.   for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
  168.   {
  169.     servopulsesx(servopin12,175);//模拟产生PWM
  170.   }
  171. }
  172. void loop()
  173. {
  174.     if(Serial.available() > 0)   //Serial.available()返回串口收到的字节数
  175.     {
  176.        int index = 0;
  177.        delay(100);    //延时等待串口收完数据,否则刚收到1个字节时就会执行后续程序
  178.        int numChar = Serial.available();
  179.        if(numChar > 15)    //确认数据不会溢出,应当小于缓冲大小
  180.        {
  181.          numChar = 15;
  182.         }
  183.        while(numChar--)
  184.       {
  185.           buffer[index++] = Serial.read(); //将串口数据一字一字的存入缓冲
  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按照空格或者,进行分割并截取
  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.   /* 以下是控制舵机左,上下舵机                            */
  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. }
复制代码


评分

参与人数 1黑币 +5 收起 理由
蔡定银 + 5 回帖助人的奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:304003 发表于 2018-4-9 10:19 | 只看该作者
带上位机程序的吗?
回复

使用道具 举报

板凳
ID:318965 发表于 2018-5-2 17:46 | 只看该作者
下载了APP,不连WIFI的情况下,APP一按就退出
回复

使用道具 举报

地板
ID:284606 发表于 2018-5-5 13:46 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

5#
ID:344133 发表于 2018-6-6 08:24 | 只看该作者
感谢分享,正在学习,很有帮助啊
回复

使用道具 举报

6#
ID:347921 发表于 2018-6-8 22:53 | 只看该作者
好像功能不太理想啊!
回复

使用道具 举报

7#
ID:243748 发表于 2018-6-25 07:38 来自触屏版 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
ID:90140 发表于 2018-6-25 08:31 | 只看该作者
学习一下,感谢分享!!
回复

使用道具 举报

9#
ID:283315 发表于 2018-6-25 09:22 | 只看该作者
怎么用蓝牙接收控制智能小车
回复

使用道具 举报

10#
ID:104477 发表于 2018-8-25 23:31 来自触屏版 | 只看该作者
距离才十米,有什么意义
回复

使用道具 举报

11#
ID:168356 发表于 2020-1-7 13:26 | 只看该作者
我想学习一下
回复

使用道具 举报

12#
ID:373684 发表于 2022-2-27 18:46 | 只看该作者
可以加个摄像头的吗?
回复

使用道具 举报

13#
ID:307493 发表于 2023-10-11 10:38 | 只看该作者
距离有点短
回复

使用道具 举报

14#
ID:845150 发表于 2024-3-8 16:31 | 只看该作者
手机端apk不行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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