BT тип данных, символы.
- Войдите на сайт для отправки комментариев
В общем имеется программа на 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
.
.
.
Подскажите пожалуйста как правильно все сделать?
Для начала читаем 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: ;// какая-то не известная команда пришла }; }; }Спасибо, я правда уж проще придумал)
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(); } }Спасибо, я правда уж проще придумал)
Оператор switch, ИМХО тут академичней бы смотрелся