Помогите разобраться с 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
причем если сравнивать сразу с ком порта - получаем удачу
...................................... String ard = Serial.readString(); //получаем ххх if (ard=="xxx") //сравниваем результат. УДАЧА {Serial.print("3");Serial.println(ard);} .......................................................Ты используешь 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, если есть - читаем байт и добавляем к текущей строке, после чего проверяем, не закончилась ли строка, если закончилась - реакция на строку и освобождение последней. И идем дальше. Вне зависимости от того, принято ли все, что нужно. Если пока не все - остальное примем на следующем проходе цикла.
Собственно, при правильно организованном обмене таймаут сообще не нужен.