Отправка данных из Arduino на Android не работает - PullRequest
0 голосов
/ 28 мая 2018

Мы выполняем проект, в котором мы перемещаем серводвигатель, чтобы открыть и закрыть замок с помощью 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);
  }
}  
}

1 Ответ

0 голосов
/ 28 мая 2018

Потому что эти две строки представляют собой бесконечный цикл!поэтому вы должны изменить свой код на это и дать своему коду шанс продолжить:)

void loop() {
        if(!blue.available()){
            blue.println(pos);
        }else if(blue.available()){
            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);
                    }
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...