11886浏览
查看: 11886|回复: 6

[讨论] 【arduino代码纠错】_手机控制蓝牙小车

[复制链接]
本帖最后由 simon_xu 于 2015-5-6 19:30 编辑

大家好,我是新手,最近在自学做一辆用手机控制的蓝牙。
在网上找了一个蓝牙控制小车的代码(带加速功能),但验证时显示代码有误。错误信息:

Bluetooth_Car.ino: In function 'void Speed_Change(int)':


Bluetooth_Car.ino:139:27: error: wrong type argument to unary plus

希望大家能帮我看下,代码哪里有问题,谢谢大家!
附上代码:
  1. /*********************************
  2. 程序名:蓝牙小车  
  3. /*********************************/
  4. const int ENA = 8;
  5. const int ENB = 9;
  6. const int IN1 = 10;
  7. const int IN2 = 11;
  8. const int IN3 = 12;
  9. const int IN4 = 13;
  10. int uartready = 0;
  11. int bluetooth_info = 0;
  12. unsigned int car_flag = 0;
  13. unsigned char uart_data_number = 0;
  14. unsigned char uart_data[4];
  15. unsigned char uart_test_data[12];
  16. char UART_DATA;
  17. int speed_data = 0;
  18. void Forward(void)
  19. {
  20.   digitalWrite(IN1, HIGH);
  21.   digitalWrite(IN2, LOW);
  22.   digitalWrite(IN3, LOW);
  23.   digitalWrite(IN4, HIGH);
  24. }
  25. void Back(void)
  26. {
  27.   digitalWrite(IN1, LOW);
  28.   digitalWrite(IN2, HIGH);
  29.   digitalWrite(IN3, HIGH);
  30.   digitalWrite(IN4, LOW);
  31. }
  32. void Stop(void)
  33. {
  34.   digitalWrite(IN1, LOW);
  35.   digitalWrite(IN2, LOW);
  36.   digitalWrite(IN3, LOW);
  37.   digitalWrite(IN4, LOW);
  38. }
  39. void Right_Forward(void)
  40. {
  41.   digitalWrite(IN1, HIGH);
  42.   digitalWrite(IN2, LOW);
  43.   digitalWrite(IN3, LOW);
  44.   digitalWrite(IN4, LOW);
  45. }
  46. void Right_Back(void)
  47. {
  48.   digitalWrite(IN1, LOW);
  49.   digitalWrite(IN2, HIGH);
  50.   digitalWrite(IN3, LOW);
  51.   digitalWrite(IN4, LOW);
  52. }
  53. void Right_Place(void)
  54. {
  55.   digitalWrite(IN1, HIGH);
  56.   digitalWrite(IN2, LOW);
  57.   digitalWrite(IN3, HIGH);
  58.   digitalWrite(IN4, LOW);
  59. }
  60. void Lift_Forward(void)
  61. {
  62.   digitalWrite(IN1, LOW);
  63.   digitalWrite(IN2, LOW);
  64.   digitalWrite(IN3, LOW);
  65.   digitalWrite(IN4, HIGH);
  66. }
  67. void Lift_Back(void)
  68. {
  69.   digitalWrite(IN1, LOW);
  70.   digitalWrite(IN2, LOW);
  71.   digitalWrite(IN3, HIGH);
  72.   digitalWrite(IN4, LOW);
  73. }
  74. void Lift_Place(void)
  75. {
  76.   digitalWrite(IN1, LOW);
  77.   digitalWrite(IN2, HIGH);
  78.   digitalWrite(IN3, LOW);
  79.   digitalWrite(IN4, HIGH);
  80. }
  81. void setup()
  82. {
  83.   pinMode(IN1, OUTPUT);
  84.   pinMode(IN2, OUTPUT);
  85.   pinMode(IN3, OUTPUT);
  86.   pinMode(IN4, OUTPUT);
  87.   pinMode(ENA, OUTPUT);
  88.   pinMode(ENB, OUTPUT);
  89.   Stop();
  90.   digitalWrite(ENA, HIGH);
  91.   digitalWrite(ENB, HIGH);
  92.   Serial.begin(9600);
  93. }
  94. /*****************************************************************************
  95. 电机调速
  96. /****************************************************************************/
  97. void Speed_Change(int speed)
  98. {
  99.   switch (speed)
  100.   {
  101.     case 0:
  102.       analogWrite(ENA, 25);
  103.       analogWrite(ENB, 25);
  104.       break;
  105.     case 1:
  106.       analogWrite(ENA, 50);
  107.       analogWrite(ENB, 50);
  108.       break;
  109.       break;
  110.     case 2:
  111.       analogWrite(ENA, 75);
  112.       analogWrite(ENB, 75);
  113.       break;
  114.     case 3:
  115.       analogWrite(ENA, 100);
  116.       analogWrite(ENB, 100);
  117.       break;
  118.     case 4:
  119.       analogWrite(ENA, 125);
  120.       analogWrite(ENB, 125);
  121.       break;
  122.     case 5:
  123.       analogWrite(ENA, 150);+
  124.       analogWrite(ENB, 150);
  125.       break;
  126.     case 6:
  127.       analogWrite(ENA, 175);
  128.       analogWrite(ENB, 175);
  129.       break;
  130.     case 7:
  131.       analogWrite(ENA, 200);
  132.       analogWrite(ENB, 200);
  133.       break;
  134.     case 8:
  135.       analogWrite(ENA, 255);
  136.       analogWrite(ENB, 255);
  137.       break;
  138.     default: break;
  139.   }
  140. }
  141. /*****************************************************************************
  142. 数据处理函数
  143. /****************************************************************************/
  144. void Data_Process(void)
  145. {
  146.   if (uart_data[0] == 'R' && uart_data[1] == 'T')                                                //判断是否为小车控制
  147.   {
  148.     switch (uart_data[2])                                        //判断指令
  149.     {
  150.       case '1': car_flag = 1;        break;
  151.       case '2': car_flag = 2;        break;
  152.       case '3': car_flag = 3;        break;
  153.       case '4': car_flag = 4;        break;
  154.       case '5': car_flag = 5;        break;
  155.       case '6': car_flag = 6;        break;
  156.       case '7':
  157.         speed_data = speed_data + 1;
  158.         if (speed_data >= 8)
  159.           speed_data = 8;
  160.         Speed_Change(speed_data);
  161.         break;
  162.       case '8': car_flag = 8;        break;
  163.       case '9':
  164.         speed_data = speed_data - 1;
  165.         if (speed_data <= 0)
  166.           speed_data = 0;
  167.         Speed_Change(speed_data);
  168.         break;
  169.       default: break;
  170.     }
  171.   }
  172.   uart_data[0] = 0;
  173.   uart_data[1] = 0;
  174.   uart_data[2] = 0;
  175.   uart_data[3] = 0;
  176. }
  177. void loop()
  178. {
  179.   while (Serial.available() > 0)
  180.   {
  181.     UART_DATA = Serial.read();
  182.     if (uartready == 1)
  183.     {
  184.       uart_data[uart_data_number] = UART_DATA;
  185.       uart_data_number++;
  186.       if (uart_data[3] == 'F')
  187.       {
  188.         Data_Process();
  189.         uart_data_number = 0;
  190.       }
  191.     }
  192.     //蓝牙数据标识符
  193.     if (UART_DATA == '+')
  194.     {
  195.       bluetooth_info = 1;
  196.       uart_data_number = 0;
  197.     }
  198.     //蓝牙数据处理
  199.     if (bluetooth_info == 1)
  200.     {
  201.       uart_test_data[uart_data_number] = UART_DATA;
  202.       uart_data_number++;
  203.       if (uart_test_data[6] == 'C' && uart_test_data[7] == 'T' && uart_test_data[8] == 'E' && uart_test_data[9] == 'D' && uart_test_data[10] == '\r' && uart_test_data[11] == '\n')
  204.       {
  205.         uart_data_number = 0;
  206.         uartready = 1;
  207.         bluetooth_info = 0;
  208.       }
  209.     }
  210.   }
  211.   switch (car_flag)                                        //判断指令
  212.   {
  213.     case 1: Lift_Forward();                break;
  214.     case 2: Forward();                  break;
  215.     case 3: Right_Forward();                break;
  216.     case 4: Lift_Back();                break;
  217.     case 5: Stop();                     break;
  218.     case 6: Right_Back();               break;
  219.     case 8: Back();                     break;
  220.     default:                            break;
  221.   }
  222. }
复制代码



Ricky  NPC

发表于 2015-5-6 10:15:56

错误发出来看看
回复

使用道具 举报

大连林海  初级技神

发表于 2015-5-6 17:51:40

楼上建议你把错误截图发出来 好帮助鉴别
回复

使用道具 举报

Cain  初级技匠

发表于 2015-5-6 18:16:28

编译能过,除了你贴的代码里多了个+号
回复

使用道具 举报

simon_xu  初级技师
 楼主|

发表于 2015-5-6 19:29:13

Ricky 发表于 2015-5-6 10:15
错误发出来看看

Arduino:1.6.3 (Windows 7), 板:"Arduino Uno"

Bluetooth_Car.ino: In function 'void Speed_Change(int)':

Bluetooth_Car.ino:139:27: error: wrong type argument to unary plus

编译有误。
回复

使用道具 举报

simon_xu  初级技师
 楼主|

发表于 2015-5-6 19:37:42

大连林海 发表于 2015-5-6 17:51
楼上建议你把错误截图发出来 好帮助鉴别

错误信息是这两条,谢谢啦!

Bluetooth_Car.ino: In function 'void Speed_Change(int)':

Bluetooth_Car.ino:139:27: error: wrong type argument to unary plus

回复

使用道具 举报

simon_xu  初级技师
 楼主|

发表于 2015-5-6 19:40:48

Cain 发表于 2015-5-6 18:16
编译能过,除了你贴的代码里多了个+号

谢谢,果然是这个原因,太感谢啦
:kiss:
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail