本帖最后由 沧海笑 于 2013-12-10 23:59 编辑
问题:在使用论坛安卓蓝牙控制端程序v1.01控制,十六进制控制方式。小车只能驱动一只电机,另外一只无反应。
情况描述:
1、小车部分使用arduino UNO V3,L298电机驱动板,驱动两电机。下位机程序附上,是利用论坛车友的程序,其中left()中加了两只LED,是为了测试程序运行。
2、上位机,论坛蓝牙控制端程序v1.01,带wifi视频那个版本。
3、我所做的尝试:在单字符方式下双电机控制正常,所以我认为接线及硬件正常。单字符控制程序,使用的arduino pin与HEX规约的完全一样,接线也未改动。
我将left()函数中,插入了三次LED闪烁,从程序运行看,上位机发来的控制串,下位机已经收到,并且调用了left()函数,LED依次闪烁,明显判断,其中M1电机的
驱动是空白的,也就是说,该电机未响应。M2电机驱动正常。
4、使用第三方“蓝牙调试助手”,使用HEX模式发送控制串,情况和刚才是一样的。
请问,应该如何入手检查,请提出宝贵意见,谢谢。
- #include <Servo.h>
- Servo servo1;
- //Servo servo2;
- int E1 = 11;
- int E2 = 10;
- int M1_1 = 8;
- int M1_2 = 9;
- int M2_1 = 6;
- int M2_2 = 7;
- //int LED = 13;
- int buffer[3];
- int Serial_flag;
- int date_index=0;
- void setup()
- {
- //pinMode(13,OUTPUT);
- servo1.attach(4);//定义舵机控制口
- // servo2.attach(10);
- Serial.begin(9600);
- pinMode(M1_1,OUTPUT);
- pinMode(M2_2,OUTPUT);
- pinMode(E1,OUTPUT);
- pinMode(M2_1,OUTPUT);
- pinMode(M2_2,OUTPUT);
- pinMode(E2,OUTPUT);
- pinMode(5, OUTPUT); //red
- pinMode(12, OUTPUT); //green
- }
- void Stop(void)
- {
- digitalWrite(E1,LOW);
- digitalWrite(E2,LOW);
- }
- void advance(int x)
- {
- analogWrite(E1,x);
- digitalWrite(M1_1,LOW);
- digitalWrite(M1_2,HIGH);
- analogWrite(E2,x);
- digitalWrite(M2_1,LOW);
- digitalWrite(M2_2,HIGH);
- }
- void back(int x)
- {
- analogWrite(E1,x);
- digitalWrite(M1_1,HIGH);
- digitalWrite(M1_2,LOW);
- analogWrite(E2,x);
- digitalWrite(M2_1,HIGH);
- digitalWrite(M2_2,LOW);
- }
- void left(int x)
- {
- digitalWrite(5,LOW);//red flash 200ms
- delay(800);
- digitalWrite(5,HIGH);
- analogWrite(E1,x);
- digitalWrite(M1_1,LOW);
- digitalWrite(M1_2,HIGH);
- digitalWrite(12,LOW);//green flash 400ms
- delay(800);
- digitalWrite(12,HIGH);
- analogWrite(E2,x);
- digitalWrite(M2_1,HIGH);
- digitalWrite(M2_2,LOW);
- digitalWrite(5,LOW);//red flash 200ms
- delay(800);
- digitalWrite(5,HIGH);
- }
- void right(int x)
- {
- analogWrite(E1,x);
- digitalWrite(M1_1,HIGH);
- digitalWrite(M1_2,LOW);
- analogWrite(E2,x);
- digitalWrite(M2_1,HIGH);
- digitalWrite(M2_2,LOW);
- }
- void Communication_Decode()
- {
- if(buffer[0]==0x00)
- {
- switch(buffer[1])
- {
- case 0x01:advance(150);return;
- case 0x02:back(150);return;
- case 0x03:right(150);return;
- case 0x04:left(150);return;
- case 0x00:Stop(); return;
- }
- }
- else if(buffer[0]==0x01)
- {
- if(buffer[2]>180)return;
- switch(buffer[1])
- {
- case 0x01:servo1.write(buffer[2]);return;
- // case 0x02:servo2.write(buffer[2]);return;
- default:return;
- }
- }
- }
- void loop()
- {
- int temp_char;
-
-
- while(Serial.available() > 0)
- {
- temp_char = Serial.read();
- if(temp_char!=-1)
- {
-
- if(Serial_flag==0)
- {
- if(temp_char==0xff)
- {
- Serial_flag = 1;
- }
- }
- else
- {
- if(temp_char==0xff)
- {
- Serial_flag = 0;
-
- if(date_index==3)
- {
- Communication_Decode();
- }
- date_index = 0;
- }
- else
- {
- buffer[date_index]=temp_char;
- Serial.println(buffer[date_index],HEX);
- date_index++;
- }
- }
- }
- }
- }
复制代码
|