arduino小车程序求教
#definep119#definep1210#definep2111#definep2212voidsetup(){Serial.begin(9600);pinMode...
#define p11 9
#define p12 10
#define p21 11
#define p22 12
void setup()
{
Serial.begin(9600);
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
}
void loop()
{
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
int a=0,b=1;
while (Serial.available() > 0)
{
int inChar = Serial.read();
inChar=inChar-0x30;
if(inChar == 1) //foward
{
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(10000);
}
else if(inChar == 2) //back
{
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(10000);
}
else if(inChar == 3)
{
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(10000);
}
else
{
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(10000);
}
inChar=0;
}
}
运行后手机发指令能听到电机响一下,但不转,用万用表测,相关引脚电平只是按键瞬间到1,后又马上恢复为0,请问这是为什么,谢谢 展开
#define p12 10
#define p21 11
#define p22 12
void setup()
{
Serial.begin(9600);
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
}
void loop()
{
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
int a=0,b=1;
while (Serial.available() > 0)
{
int inChar = Serial.read();
inChar=inChar-0x30;
if(inChar == 1) //foward
{
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(10000);
}
else if(inChar == 2) //back
{
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(10000);
}
else if(inChar == 3)
{
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(10000);
}
else
{
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(10000);
}
inChar=0;
}
}
运行后手机发指令能听到电机响一下,但不转,用万用表测,相关引脚电平只是按键瞬间到1,后又马上恢复为0,请问这是为什么,谢谢 展开
2个回答
推荐于2016-04-24
展开全部
看你的程序用的是H桥驱动两个直流电机正反转。
调试时不用接电机,H桥驱动有指示灯就可以看到4个端口的状态。
你的else这段不知道怎么回事,是把所有不是123的变为右转。。。
程序修改了一些,刚才试试可以编译通过。在串口调试软件可以看到PC键盘发送1/2/3/4给arduino,能收到arduino的反馈。因为串口有缓冲区,程序自动发送连续的1时会造成arduino 持续响应这个1,而等很久才相应改变后的按键。这点需要仔细调试发送端程序。
这个程序不推荐Ctrl+Shift+M ,用 STC-ISP 6.76 或更高版本有自动发送字符功能,更容易调试串口。PC键盘串口调试好后再换成蓝牙串口板。
#define p11 9
#define p12 10
#define p21 11
#define p22 12
void setup()
{
Serial.begin(9600);
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
}
void loop()
{
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
int a=0,b=1;
while (Serial.available() > 0)
{
Serial.flush(); //清除串口缓存
delay(500); //等待小段时间
int inChar = Serial.read();
inChar=inChar-0x30; // 数字1的 ASCII码是 16进制0x31
if(inChar == 1) //foward
{
Serial.print("key 1 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000); // 按键后作用时长
}
else if(inChar == 2) //back
{
Serial.print("key 2 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else if(inChar == 3) // turn left
{
Serial.print("key 3 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000);
}
else if(inChar == 4) // turn right
{
Serial.print("key 4 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else //其他按键,停止
{
Serial.print("key other pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,LOW);
}
}
}
调试时不用接电机,H桥驱动有指示灯就可以看到4个端口的状态。
你的else这段不知道怎么回事,是把所有不是123的变为右转。。。
程序修改了一些,刚才试试可以编译通过。在串口调试软件可以看到PC键盘发送1/2/3/4给arduino,能收到arduino的反馈。因为串口有缓冲区,程序自动发送连续的1时会造成arduino 持续响应这个1,而等很久才相应改变后的按键。这点需要仔细调试发送端程序。
这个程序不推荐Ctrl+Shift+M ,用 STC-ISP 6.76 或更高版本有自动发送字符功能,更容易调试串口。PC键盘串口调试好后再换成蓝牙串口板。
#define p11 9
#define p12 10
#define p21 11
#define p22 12
void setup()
{
Serial.begin(9600);
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
}
void loop()
{
pinMode(p11,OUTPUT);
pinMode(p12,OUTPUT);
pinMode(p21,OUTPUT);
pinMode(p22,OUTPUT);
int a=0,b=1;
while (Serial.available() > 0)
{
Serial.flush(); //清除串口缓存
delay(500); //等待小段时间
int inChar = Serial.read();
inChar=inChar-0x30; // 数字1的 ASCII码是 16进制0x31
if(inChar == 1) //foward
{
Serial.print("key 1 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000); // 按键后作用时长
}
else if(inChar == 2) //back
{
Serial.print("key 2 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else if(inChar == 3) // turn left
{
Serial.print("key 3 pressed"); //调试目的
digitalWrite(p11,HIGH);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,HIGH);
delay(1000);
}
else if(inChar == 4) // turn right
{
Serial.print("key 4 pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,HIGH);
digitalWrite(p21,HIGH);
digitalWrite(p22,LOW);
delay(1000);
}
else //其他按键,停止
{
Serial.print("key other pressed"); //调试目的
digitalWrite(p11,LOW);
digitalWrite(p12,LOW);
digitalWrite(p21,LOW);
digitalWrite(p22,LOW);
}
}
}
更多追问追答
追问
刚才试了一下,单片机可以正常输出电平,但只要接到驱动板上,瞬间信号就消失了
追答
驱动板怎么接的,照片来看看
云里物里
2024-12-19 广告
2024-12-19 广告
蓝牙定位是iBeacon技术最常被应用的方向之一,基于蓝牙定位可以实现诸如寻路、寻车、向导等很多商业需求,也是基于iBeacon技术实现的。蓝牙定位又可以分为一维定位和二维定位,本文将介绍两种蓝牙定位技术的实现原理及实现方法。蓝牙定位一维定...
点击进入详情页
本回答由云里物里提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询