UART(Serial) Пример приема строки параметров 7

Пример использования стандартной библиотеки Ардуино — 

Посылаем строку формата:
«Начальный тег параметра + значение параметра+конечный тег параметра и т.д. »

«T11251TT21262T»

T1 — начальный тег параметра 1
125 — значение параметра 1
1T — конечный тег параметра 1
T2 — начальный тег параметра 2
126 — значение параметра 2
2T — конечный тег параметра 2

Принимаем строку:

1
2
3
4
5
6
7
Serial.begin(9600);
String Var=""; //переменная для приема строки
while (!Serial.available()) delay(20);//пока нет данных стоим
delay(200);//ожидаем прием всей строки
while (Serial.available()) //пока есть данные, читаем
Var = Var + (char)(Serial.read());
Serial.end();
Serial.begin(9600);
String Var=""; //переменная для приема строки
while (!Serial.available()) delay(20);//пока нет данных стоим
delay(200);//ожидаем прием всей строки
while (Serial.available()) //пока есть данные, читаем
Var = Var + (char)(Serial.read());
Serial.end();

Парсим строку Var:

1
2
3
String T1, T2;
T1=Var.substring(Var.indexOf("T1")+2,Var.indexOf("1T"));//копируем часть строки от начального до конечного тега
T2=Var.substring(Var.indexOf("T2")+2,Var.indexOf("2T"));
String T1, T2;
T1=Var.substring(Var.indexOf("T1")+2,Var.indexOf("1T"));//копируем часть строки от начального до конечного тега
T2=Var.substring(Var.indexOf("T2")+2,Var.indexOf("2T"));

Получаем T1=125T2=126

7 комментс для “UART(Serial) Пример приема строки параметров

  1. Ответить Виктор Мар 31, 2014 13:03

    «2T — конечный тег параметра 2» — подправьте опечатку. А, вообще, то, что надо, давно искал.
    И еще вопрос, нужны ли задержки? И нужно ли стоять пока нет данных

    • Ответить Slava Мар 31, 2014 15:15

      спасибо, подправил

    • Ответить Slava Мар 31, 2014 15:25

      Стоять не нужно, если у вас опрос идет постоянный в цикле.
      Еще можно добавить выход из «while» по таймеру, на случай отсутствия данных при появлении сигнала:
      Serial.begin(9600);
      String Var=»»; //переменная для приема строки
      time = millis();
      while (!Serial.available() and (millis()-time<2000)) //если прошло 2 секунды с момента отправки данных, то продолжаем программу.

      Если прием возникает, скажем, по входящему сигналу, то стоять конечно нужно. В следующей статье, будет пример с использованием прерывания для анализ входящих данных. В том случае стоять просто необходимо.

      delay(200);//ожидаем прием всей строки
      Без этой задержки, данные получите не полные. Т.е. придет часть строки.

  2. Ответить Armenino Фев 14, 2017 23:09

    Данный вариант очень критичен к целостности данных в Т1, если по какой-то причине они не распознаются, это скажется и на Т2 — попробуйте кривых посылок напосылать или местами Т1 и Т2 поменять.

  3. Ответить Zoubir Май 3, 2017 22:31

    Hello sir
    It is a great job you Do.
    Can you tell me where you work?

Добавить комментарий