Помогите разобраться с Serial.readString
- Войдите на сайт для отправки комментариев
Вс, 30/10/2016 - 13:58
Собрал на Меге:
Ком2 соеденен с ком3
в коде описал где происходит сбой.
void setup() { Serial.begin(9600); Serial1.begin(9600); Serial2.begin(9600); Serial3.begin(9600); Serial.setTimeout(100); } void loop() { if (Serial.available() > 0){ //посылаем xxx String ard = Serial.readString(); //получаем ххх Serial3.println(ard); //отправляем на ком 3 String ard2 = Serial2.readString(); //считываем с ком2 //ard2="xxx"; Serial.print("1");Serial.println(ard2); //выводим результат, приходит ххх if (ard2=="xxx") //сравниваем результат. НЕУДАЧА {Serial.print("2");Serial.println(ard2);} }}
если раскоментировать //ard2="xxx"; сравнение естественно работает
Видимо все дело в символах \r\n
причем если сравнивать сразу с ком порта - получаем удачу
Ты используешь println, а она добавляет после строки \r\n потому и получаешь лажу. Используй print вместо println
Видимо все дело в символах \r\n
пробовал так:
Ты используешь println, а она добавляет после строки \r\n потому и получаешь лажу. Используй print вместо println
Спасибо!!! Завелось
Еще вопрос, как ускорить прием?
Serial
.setTimeout(100); какой минимум при котором не потеряются данные?
Serial
.read(); быстро, но ограничен в количестве передаваемых данных
Serial
.readString(); долго ждет
Еще вопрос, как ускорить прием?
Serial.begin(100500);
Еще вопрос, как ускорить прием?
Serial
.setTimeout(100); какой минимум при котором не потеряются данные?
Serial
.read(); быстро, но ограничен в количестве передаваемых данных
Serial
.readString(); долго ждет
В принципе, Калапуций, хотя и, как всегда, в своем стиле, но дал правильный совет - увеличить скорость порта хотя бы до 115200.
Но, вообще говоря, чтобы освободить время для чего-нибудь полезного, целесообразно принимать строку по одному символу. Т.е. узнаем, есть ли что-либо из Serial, если есть - читаем байт и добавляем к текущей строке, после чего проверяем, не закончилась ли строка, если закончилась - реакция на строку и освобождение последней. И идем дальше. Вне зависимости от того, принято ли все, что нужно. Если пока не все - остальное примем на следующем проходе цикла.
Собственно, при правильно организованном обмене таймаут сообще не нужен.