BT тип данных, символы.

trunker
Offline
Зарегистрирован: 05.05.2012

В общем имеется программа на Android отсылающая такие вот пакеты

void loop() {
if (Serial.available()) {
BT = Serial.read();
}
if (BT == '^D') { // Forward
Forvard();
} else if (BT == '^U') { // Stop Forward
Stop();
} else if (BT == 'VD') { // Backward
Back();
} else if (BT == 'VU') { // Stop Backward
Stop();
} else if (BT == '>D') { // Right
Right();
} else if (BT == '<D') { // Left
Left();
}else if (BT == '<U'||'>U') { // Stop
Stop();
}

}

 

Но я не пойму какой тип данных должен быть для BT. как я понял тут должно быть string. написал вот так char BT[4]; 

но выдает ошибку:

bt:6: error: conflicting declaration 'char BT'
bt:0: error: 'BT' has a previous declaration as 'char BT [4]'
bt.cpp: In function 'void loop()':
bt:64: error: incompatible types in assignment of 'int' to 'char [4]'
bt:66: error: ISO C++ forbids comparison between pointer and integer

.

.

.

 

Подскажите пожалуйста как правильно все сделать?

leshak
Offline
Зарегистрирован: 29.09.2011

Для начала читаем  http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii 

Во вторых как объявлен BT - догадтесь сами? Ну то есть можно догадатся что объявлен он как byte или char, но все же.

Вообщем причина такова:

Serial.read(); за один раз умеет читать только один байт. Следовательно если у вас команды двух-байтовые ее нужно вызвать минимум два раза.

Далее. Нужно либо bt объявить массивом, заполнить его элементы, а потом уже анализировать и разбиратся что за команда пришла, либо

тупо каждый раз дергать Serial.read() примерно так:

  if (Serial.available()) {
      BT=Serial.read();
      if(BT=='V'){ // первый байт команд VD,VU совпал
        while(!Serial.available()){}; // ждем пока прийдется второй байт
        BT=Serial.read(); // читаем второй байт комманды
        switch(BT){
          case 'D': // VD, Backward
                    //что-то делаем
                    break;
          case 'U':// VU, Stop Backward
                    //что-то делаем
                    break;
          default: ;// какая-то не известная команда пришла

        };      
      };
  }

 

 

 

trunker
Offline
Зарегистрирован: 05.05.2012

Спасибо, я правда уж проще придумал)

void loop() {
  if (Serial.available()) {
    BT = Serial.read();
  }
    if (BT == '^') { // Forward
      Forvard();
    }else if (BT == 'V') { // Backward
      Back();
    }else if (BT == '>') { // Right
      Right();
    } else if (BT == '<') { // Left
      Left();
    }else if (BT == 'U') { // Stop
      Stop();
    }
  
}

 

Zaliv
Offline
Зарегистрирован: 05.03.2011

trunker пишет:

Спасибо, я правда уж проще придумал)

Оператор switch, ИМХО тут академичней бы смотрелся