Мы выполняем проект, в котором мы перемещаем серводвигатель, чтобы открыть и закрыть замок с помощью Arduino и Bluetooth HC-06.Мы пытаемся отправить один номер (1 или 2) в качестве состояния серводвигателя, прежде чем делать что-либо, как только мы подключим наше приложение к Bluetooth HC-06, просто чтобы узнать, открыт ли замок или уже закрыт (мыиспользуя EEPROM, чтобы не потерять последнюю позицию сервопривода).Однако с нашим кодом мы получаем данные, но серво перестает работать хорошо.Если мы удалим первые две строки из цикла, он будет работать, но мы не будем знать начальное состояние сервопривода.Как мы можем решить это?
char state;
Servo myservo;
int btx=3;
int brx=2;
SoftwareSerial blue(btx,brx);
int pos = 0;
void setup() {
Serial.begin(9600);
myservo.attach(9);
blue.begin(9600);
// An EEPROM value of 1 == UNLOCKED and a value of 2 == LOCKED
if(EEPROM.read(0) == 1){ //Lock opened
myservo.write(70);
delay(200);
pos = 1;
//blue.println(1); not working
}
else if(EEPROM.read(0) == 2){ //Lock closed
myservo.write(180);
delay(200);
pos = 2;
//blue.println(2); not working
}
//blue.println(pos); not working
}
void loop() {
while(!blue.available()){ // <-- The problem is in this two lines
blue.println(pos); // send state to app
}
String voice;
while(blue.available()){
delay(10);
char c = blue.read();
if (c == '#'){
break;
}
voice += c;
}
if(voice.length() > 0){
if (voice == "open"){
myservo.write(70);
EEPROM.write(0, 1);
blue.println(1);
delay(15);
}
else if (voice == "close"){
myservo.write(180);
EEPROM.write(0, 2);
blue.println(2);
delay(15);
}
}
}