Прием команды с HC-06 и парсинг
- Войдите на сайт для отправки комментариев
Пнд, 17/02/2020 - 02:30
Добрый день, уважаемые форумчане!
С устройства отправляю команду в виде: #typeCoomand:c1:c2:c3# .
Каждый тип команды имеет фиксированный набор c_i, где c_i - целые числа. С устройства отправляю корректную команду, т.е. гарантию для каждого typeCoomand соответствующее кол-во c. Все c записываю в массив command[].
Когда отправляю команды с большим промежутком времени, то всё хорошо. Если начинаю отправлять очень часто - происходит сбой алгоритма. Насколько я понимаю, в буфере накапливается больше, чем одна команда и происходит сбой. Подскажите пожалуйста, как можно исправить.
#include <SoftwareSerial.h>// import the serial library SoftwareSerial mySerial(10, 11); // 10-й пин = TX, 11-й пин = RX const char flagCommand = '#'; const char delimiter = ':'; const int type_commands[] = {1, 2}; const int length_commands[] = {2, 4}; const int num_commands = sizeof(type_commands) / sizeof(int); void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if(mySerial.available() > 0){ String str = mySerial.readString(); Serial.println(str); char * pch = strtok(str.c_str(), "#:"); int typeCmd = (String(pch)).toInt(); pch = strtok(NULL, "#:"); Serial.println("typeCmd:"); Serial.println(typeCmd); for(int numCmd=0; numCmd < num_commands; numCmd++){ if(typeCmd == type_commands[numCmd]){ int command[length_commands[numCmd]]; int k = 0; while(pch != NULL){ command[k] = (String(pch)).toInt(); pch = strtok(NULL, "#:"); k++; } for(int i=0; i<length_commands[numCmd]; i++){ Serial.println(command[i]); } } } } }
Просьба удалить тему, разобрался.
дык покажите народу решение.
Алгоритм верный, только нужно входную строку считывать корректно. Вначале из буфера считываете строчку в нужной форме (в данном случае от '#' до '#'), потом её обрабатываете приведенным в первом сообщении алгоритмом.