Serial.read() число целиком
- Войдите на сайт для отправки комментариев
Вс, 25/03/2018 - 16:20
Всем доброго времени суток! Подскажите пожалуйста как прочитать число целиком в переменную int из потока Serial.read()? Если передаю в поток одну цифру "7" то switch отрабатывает нормально, а вот если передаю число "10" то в переменную inByte сохраняется только цифра "1" а цифра "0" теряется:
void setup ()
{
//инициализируем serial порт
Serial.begin(57600);
}
void loop ()
{
/
if (Serial.available() > 0)
{
int inByte = Serial.read();
switch (inByte)
{
case '7':
LINE_COLOR = LINE_BLACK;
Serial.println("BL");
break;
case '10':
LINE_COLOR = LINE_WHITE;
Serial.println("WL");
break;
}
}
}
И чо, вот этот код компилируеца?
Мне понравилась эта строка.
19case'10':см. Serial.parseInt()
И чо, вот этот код компилируеца?
код компилируется.
Мне понравилась эта строка.
19case'10':что не так с этой строкой?
см. Serial.parseInt()
Только не на нашем сайте, а на главном.
https://www.arduino.cc/reference/en/language/functions/communication/ser...
Наш справочник языка уже лет 5 не обновлялся....
см. Serial.parseInt()
так тоже не работает:
void setup () { //инициализируем serial порт Serial.begin(57600); } void loop () { if (Serial.available() > 0) { int inByte = Serial.parseInt(); switch (inByte) { case '7': LINE_COLOR = LINE_BLACK; Serial.println("BL"); break; case '10': LINE_COLOR = LINE_WHITE; Serial.println("WL"); break; } } }В строку 11: Serial.println(inByte); и смотреть на результат в Serial Monitor
что не так с этой строкой?
Открываем любую книжку по языку и читаем что означает одиночная кавычка. И вообще, мля, читаем!!!
так тоже не работает:
И не должен. См. Выше.
В строку 11: Serial.println(inByte); и смотреть на результат в Serial Monitor
результатом является всегда первая цифра числа
В строку 11: Serial.println(inByte); и смотреть на результат в Serial Monitor
результатом является всегда первая цифра числа
Почему же у меня не так?
void setup () { //инициализируем serial порт Serial.begin(115200); } void loop () { if (Serial.available() > 0) { int inByte = Serial.parseInt(); Serial.print("inByte: "); Serial.println(inByte); } } /* inByte: 13 inByte: 66 inByte: 908 */В строку 11: Serial.println(inByte); и смотреть на результат в Serial Monitor
результатом является всегда первая цифра числа
Почему же у меня не так?
void setup () { //инициализируем serial порт Serial.begin(115200); } void loop () { if (Serial.available() > 0) { int inByte = Serial.parseInt(); Serial.print("inByte: "); Serial.println(inByte); } } /* inByte: 13 inByte: 66 inByte: 908 */Вообщем искал проблему не там где она должна быть, одна цифра передавалась потомучто была ошибка в функции на ПК которая писала данные в Serial, фактически она писала всегда только один байт.
теперь проблема в другом, не могу сравнить строки, передаю число например "10" в строковую переменную, но условие if(COMMAND=="10") не выполняется в чем может быть проблема?
String COMMAND=""; while(Serial.available()) { delay(10); char c = Serial.read(); COMMAND+=c; } if(COMMAND.length()>0) { if(COMMAND =="10") { CONTROL = CONTROL_AUTO; Serial.println("CA"); COMMAND = ""; } }все что внутри знаков <> пакет. А то что снаружи мусор.
/**/ unsigned long mill;// переменная для millis() typedef void (*pDo)() ;// тип -функция обработчик //---------------------------------------------- const byte numBuffer = 20; char buffer[numBuffer]; byte iBuffer = 0; bool fBuffer = false; //---------------------------------------------- void setup() { Serial.begin(9600); } void loop() { mill = millis(); if (Serial.available() > 0) { char c = Serial.read(); switch (c) { case '<': iBuffer = 0; fBuffer = true; break; case '>': if (fBuffer == true) { buffer[iBuffer] = 0; Serial.println(buffer); iBuffer = 0; fBuffer = false; } break; default: if (c >= ' ' && c <= '}' && iBuffer < numBuffer )buffer[iBuffer++] = c; } } } /**/теперь проблема в другом, не могу сравнить строки, передаю число например "10" в строковую переменную, но условие if(COMMAND=="10") не выполняется в чем может быть проблема?
Для сравнения строк equals()
теперь проблема в другом, не могу сравнить строки, передаю число например "10" в строковую переменную, но условие if(COMMAND=="10") не выполняется в чем может быть проблема?
Для сравнения строк equals()
Спасибо, equals помог...
все что внутри знаков <> пакет. А то что снаружи мусор.
/**/ unsigned long mill;// переменная для millis() typedef void (*pDo)() ;// тип -функция обработчик //---------------------------------------------- const byte numBuffer = 20; char buffer[numBuffer]; byte iBuffer = 0; bool fBuffer = false; //---------------------------------------------- void setup() { Serial.begin(9600); } void loop() { mill = millis(); if (Serial.available() > 0) { char c = Serial.read(); switch (c) { case '<': iBuffer = 0; fBuffer = true; break; case '>': if (fBuffer == true) { buffer[iBuffer] = 0; Serial.println(buffer); iBuffer = 0; fBuffer = false; } break; default: if (c >= ' ' && c <= '}' && iBuffer < numBuffer )buffer[iBuffer++] = c; } } } /**/qwon спасибо за функцию!!! Я так понял что можно в пакете слать любую команду, а потом парсить.., единственное не понял что делает кусок кода
default: if (c >= ' ' && c <= '}' && iBuffer < numBuffer )buffer[iBuffer++] = c;Буду благодарен за объяснение.
А эта строка отсекает лишние знаки . Входят толькл от пробела до скобки
А эта строка отсекает лишние знаки . Входят толькл от пробела до скобки
Большое спасибо, теперь все понятно!