Arduino电机的速度和方向
问题描述:
我想制作一个程序来控制我的Arduino蓝牙车。
我有很多麻烦使它在所需的方向和以所需的速度。到目前为止,我想这一点,但由于某种原因它不工作:Arduino电机的速度和方向
int motor1clock = 7, motor1clockc = 8, pwm1 = 3, pwm2 = 9, motor2clock = 10, motor2clocko = 16, speed;
String inputString = "", junk;
void setup()
{
pinMode(motor1clock, OUTPUT);
pinMode(motor1clockc, OUTPUT);
pinMode(pwm1, OUTPUT);
pinMode(motor2clocko, OUTPUT);
pinMode(motor2clock, OUTPUT);
pinMode(pwm2, OUTPUT);
Serial1.begin(9600);
}
void Forwards(int spee)
{
analogWrite(pwm2, spee);
analogWrite(pwm1, spee);
digitalWrite(motor1clock, LOW);
digitalWrite(motor1clockc, HIGH);
digitalWrite(motor2clocko, HIGH);
digitalWrite(motor2clock, LOW);
}
void Backwards(int spee)
{
analogWrite(pwm2, spee);
analogWrite(pwm1, spee);
digitalWrite(motor1clock, HIGH);
digitalWrite(motor1clockc, LOW);
digitalWrite(motor2clocko, LOW);
digitalWrite(motor2clock, HIGH);
}
void Steer_Left(int spee)
{
analogWrite(pwm2, spee - 20);
analogWrite(pwm1, spee);
digitalWrite(motor1clock, LOW);
digitalWrite(motor1clockc, HIGH);
digitalWrite(motor2clocko, LOW);
digitalWrite(motor2clock, HIGH);
}
void Steer_Right(int spee)
{
analogWrite(pwm2, spee);
analogWrite(pwm1, spee - 20);
digitalWrite(motor1clock, HIGH);
digitalWrite(motor1clockc, LOW);
digitalWrite(motor2clocko, HIGH);
digitalWrite(motor2clock, LOW);
}
void loop()
{
if (Serial1.available() > 0) {
String str = Serial1.readString();
char inChar[3];
str.toCharArray(inChar, 3);
while (Serial1.available() > 0) {
junk = Serial1.readString();
}
int num = atoi(&inChar[1]);
speed = num;
Serial1.println(speed);
if (inChar[0] == 'A') {
Serial1.println(inChar[0]);
Forwards(speed);
}
if (inChar[0] == 'B') {
Backwards(speed);
}
if (inChar[0] == 'C') {
Steer_Left(speed);
}
if (inChar[0] == 'D') {
Steer_Right(speed);
}
if (inChar[0] != 'A' || inChar[0] != 'B' || inChar[0] != 'C' || inChar[0] != 'D') {
digitalWrite(motor1clock, LOW);
digitalWrite(motor1clockc, LOW);
digitalWrite(motor2clocko, LOW);
digitalWrite(motor2clock, LOW);
}
inputString = "";
}
}
输入代码格式将是“速度指令”,例如:“A255”。
答
字符串“A255”中有超过3个字节,所以我建议你定义inChar [6]。 而且,做了“Serial1.println(速度);”打印所需的速度?
+0
修复了它,它现在可以工作,但速度很慢 –
除了尝试将可能的5个字符(字符串长度+空终止符)放入一个由3个字符组成的数组中,['Serial1.readString()'](https://www.arduino.cc/en/Serial/ReadString )有1秒的延迟。通过发送行并使用['Serial1.readStringUntil('\ n')'](https://www.arduino.cc/en/Reference/StreamReadStringUntil)来修复它。 –
此外,“* not working *”并不是真正的问题描述。 –