感谢你的热心帮助,不知道是不是没有加ENDIF,造成的,晚上回去再试一下!
昨天晚上回家重新改了一下程序,当然还是抄的BOX那个版块的,自己修改了一下,用的电脑上的串口助手,各个键都能正常工作,代码如下:
# define go 1
# define back 2
# define stops 3
int pwm1=9; // motor line
int pwm2=10; //motor line
int en1=5; //en1
int pwm3=11; //motor line
int pwm4=12; //motor line
int en2=6; //en2
int motor_speed = 240;
// init
void setup()
{
Serial.begin(9600); //初始化蓝牙
motorinit(); //system chushihua
motostops(); //初始化停车
}
void loop()
{
int key;
if(Serial.available() > 0) //只有接收到数据时才会发送数据
{
key = Serial.read();
if(key >= 30 && key <= 122)
{
motorcomm(key);
}
}
}
void motorinit() //初始化系统
{
pinMode(pwm1,OUTPUT);
pinMode(pwm2,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(en2,OUTPUT);
pinMode(pwm3,OUTPUT);
pinMode(pwm4,OUTPUT);
}
void motorL(int comm,int val) //对左轮电机进行操作
{
switch (comm)
{
case go: //左轮电机前进
analogWrite(pwm1,val);//输入模拟值进行设定速度
delay(20);
analogWrite(pwm2,LOW);//低电平
break;
case back: //左轮电机后退
analogWrite(pwm2,val);//输入模拟值进行设定速度
delay(20);
analogWrite(pwm1,LOW);//
break;
case stops: //左轮电机停止
analogWrite(pwm1,LOW);
delay(20);
analogWrite(pwm2,LOW);
break;
default:
return;
}
}
void motorR(int comm, int val)
{
switch(comm)
{
case go:
analogWrite(pwm3,val);
delay(20);
analogWrite(pwm4,LOW);
break;
case back:
analogWrite(pwm4,val);
delay(20);
analogWrite(pwm3,LOW);
break;
case stops:
analogWrite(pwm3,LOW);
delay(20);
analogWrite(pwm4,LOW);
break;
default:
return;
}
}
void motostops() //定义初始化停车
{
motorL(stops,0);
motorR(stops,0);
}
void motorcomm(int intputkey) //定义键盘输入的命令
{
switch(intputkey)
{
case 'w':
motorL(go,motor_speed);
motorR(go,motor_speed);
break;
case 's':
motorL(back,motor_speed);
motorR(back,motor_speed);
break;
case 'a':
motorL(go,motor_speed-160);
motorR(go,motor_speed);
break;
case 'd':
motorL(go,motor_speed);
motorR(go,motor_speed-160);
break;
case 'q':
motorL(back,motor_speed);
motorR(go,motor_speed);
break;
case 'e':
motorL(go,motor_speed);
motorR(back,motor_speed);
break;
case ' ':
motostops();
default:
motostops();
return;
}
}
这里有两个地方不太清楚还请各位解释一下(本人没有系统学过编程)
1:
# define go 1
# define back 2
# define stops 3
这里定义这三个常量后面的数值是不是仅仅为了满足格式上的需求才这样写的?还是有其它的目的?
2:
if(key >= 30 && key <= 122)
请问下,这个啥意思啊?真心看不懂,当KEY大于等于30逻辑与KEY且小于等于122? |