Прием команды с 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]);
}
}
}
}
}
Просьба удалить тему, разобрался.
дык покажите народу решение.
Алгоритм верный, только нужно входную строку считывать корректно. Вначале из буфера считываете строчку в нужной форме (в данном случае от '#' до '#'), потом её обрабатываете приведенным в первом сообщении алгоритмом.