Фильтровать данные из Serial
- Войдите на сайт для отправки комментариев
Ср, 07/12/2016 - 20:25
Всем привет! Прошу о помощи. Например в Serial пришло сообщение t = 30 C и градусы меняются со временем. Может ли кто нибудь подсказать, как мне записывать в переменную не всю строку, а только цифры (ну например здесь 30 в примере), которые будут менятся с изменением температуры. Спасибо!
String val = ""; int ch = 0; String val_1 = ""; int ch_1 = 0; String val_2 = ""; int ch_2 = 0; void setup() { Serial.begin(9600); pinMode(2, INPUT); digitalWrite(2, HIGH); pinMode(13, OUTPUT); digitalWrite(13, LOW); /*pinMode(3, INPUT); digitalWrite(3, HIGH);*/ } void loop() { if (Serial.available()) { //если в мониторе порта ввели что-то while (Serial.available()) { //сохраняем строку в переменную val ch = Serial.read(); val += char(ch); delay(10); } } if (val.indexOf ("temp") > -1) { Serial.println(val); val = ""; val_1 = ""; val_2 = ""; while(1){ if (Serial.available()) { //если в мониторе порта ввели что-то while (Serial.available()) { //сохраняем строку в переменную val_1 ch_1 = Serial.read(); val_1 += char(ch_1); delay(10); } } Serial.println(val_1); delay(500); if (val_1.indexOf("") > -1){ while(1){ if (Serial.available()) { //если в мониторе порта ввели что-то while (Serial.available()) { //сохраняем строку в переменную val_2 ch_2 = Serial.read(); val_2 += char(ch_2); delay(10); } } Serial.println(val_2); delay(500); if (val_2.indexOf("") > -1){ break; } } break; } } } val_1.toInt(); val_2.toInt(); Serial.println(val); Serial.println(val_1); Serial.println(val_2); delay(1000); val = ""; }Привет! Спасибо за ответ, но если пишу в Serial t = 30 C что-то нолики только записываются в переменную, если одни цифры ввожу, то цифры записываются.
Со строки 30 все можно удалять, ибо зачем там бесконечные циклы и поиск пустой строки я даже спрашивать не хочу.
В простейшем случае можно сделать так:
val=""; if (Serial.available()) {//если в мониторе порта ввели что-то while (Serial.available()) {//сохраняем строку в переменную val ch = Serial.read(); if(isDigit(ch)) val += (char)ch; delay(10); } } if(val.length()>0) ch=val.toInt();Привет! Спасибо за ответ все получилось. Это кусок примера программы, просто сначало приходит одна команда чтобы цикл While включился, потом сразу вторая и третья, затем выходим из цикла, и поиска пустых строк там не будет.
Это кусок примера программы, просто сначало приходит одна команда чтобы цикл While включился, потом сразу вторая и третья
А если будет 100500 команд приходить, вы последовательно 100500 циклов их чтения напишете?
затем выходим из цикла
из этого?
while(1){Ну чтож придется написать...
я даже спрашивать не хочу.
Вы мудрый человек! И не надо - мозг целее будет :)