Я пытаюсь построить отслеживаемое транспортное средство, управляемое Bluetooth, но код, кажется, неправильно интерпретирует значения, которые он получает от модуля Bluetooth HC-05. При движении вперед контроллер должен посылать «2», а код должен изменить значение целого числа «dir» (для направления) на 2. Однако он получает «128» три раза при нажатии кнопки вниз и «0» и «0» при отпускании кнопки. Вот часть кода, которая получает сигнал и определяет направление (на основе этого учебника ):
if (Serial.available() > 0)
{
dir = Serial.read(); //Reads Bluetooth signals value
Serial.println(dir);
}/*else{
dir = 0;
}*/
delay(10);
А вот полный код:
#include <AFMotor.h>
AF_DCMotor left(3);
AF_DCMotor right(4);
int dir = 0;
void setup() {
Serial.begin(38400);
left.setSpeed(255);
right.setSpeed(255);
}
void still(){
left.run(RELEASE);
right.run(RELEASE);
}
void forward(){
left.run(FORWARD);
right.run(FORWARD);
}
void backward(){
left.run(BACKWARD);
right.run(BACKWARD);
}
void clockwise(){
left.run(FORWARD);
right.run(BACKWARD);
}
void counterClock(){
left.run(BACKWARD);
right.run(FORWARD);
}
void leftforth(){
left.run(RELEASE);
right.run(FORWARD);
}
void rightforth(){
left.run(FORWARD);
right.run(RELEASE);
}
void leftback(){
left.run(RELEASE);
right.run(BACKWARD);
}
void rightback(){
left.run(BACKWARD);
right.run(RELEASE);
}
void loop(){
if (Serial.available() > 0)
{
dir = Serial.read(); //Reads Bluetooth signals value
Serial.println(dir);
}/*else{
dir = 0;
}*/
delay(10);
if(dir == '0'){
still();
}else if(dir == '1'){
leftforth();
}else if(dir == '2'){
forward();
}else if(dir == '3'){
rightforth();
}else if(dir == '4'){
counterClock();
}else if(dir == '5'){
clockwise();
}else if(dir == '6'){
leftback();
}else if(dir == '7'){
backward();
}else if(dir == '8'){
rightback();
}
}