Парсинг данных в ардуино?

Я только начал работать с Arduino и в своем проекте пытаюсь обеспечить связь между двумя Arduino, используя HC-05 в ведущем и ведомом режиме соответственно, я все это успешно настроил.

Теперь я хочу отправить данные трех датчиков расстояния HCSR-04 от ведущего Arduino к ведомому Arduino через HC-05. Я отправляю данные каждого датчика, разделенные знаком «|». Ниже приведен пример формата, который я получил на последовательном мониторе, подключив главный Arduino напрямую к ПК через USB.

168|200|76

167|200|68

166|200|76

168|200|77

Теперь проблема в том, что я не могу прочитать и проанализировать это на подчиненной стороне. Я пробовал использовать serail.readbytesuntill, но мне это не удалось. Пожалуйста, помогите мне понять, как я могу его прочитать и проанализировать.

Заранее спасибо.

, 👍-2

Обсуждение

Что это значит? не умеет читать и анализировать ...... вы либо не получаете данных, поэтому нечего анализировать, либо вы получаете данные, но не можете их проанализировать ............ .. Что это значит? У меня не получилось..... опишите, пожалуйста, что происходит на самом деле, @jsotola

было бы полезно, если бы вы добавили части своего кода для отправки и получения данных. Без него сложно найти ответ., @RJPlog


1 ответ


1

Как вы можете видеть из комментариев Бирендера Брара, нам нужно больше информации, чтобы мы могли вам помочь.

Один из способов достижения вашей цели — это:

Используйте Serial.readBytesUntil('\n', buffer, length) на подчиненном устройстве, чтобы «прочитать» данные в массив char. Последовательный монитор можно настроить на автоматическую отправку символа \n в целях тестирования, но это должен будет сделать ваш код на ведущем устройстве. Отправьте данные 168|200|76 с добавлением \n в конец данных: 168|200|76\n

Проанализируйте данные. Вот пример скетча, который анализирует данные в массив integer.

// Используйте Serial.readBytesUntil('\n', buffer, length)
// для заполнения массива/строки символов.
char str[] = "168|200|76\n";

// Установите размер массива на максимальное количество целых чисел, которые вы получите.
uint16_t myArray[3];

void setup(){

  Serial.begin(9600);

  int counter = 0;
  char* pch = strtok(str, "|");

  while(pch != NULL){
    myArray[counter] = atoi(pch);
    pch = strtok(NULL, "|");
    counter += 1;
  }

  // Распечатываем содержимое целочисленного массива.
  for(int i = 0; i < counter; i++){
    Serial.println(myArray[i]);
  }
}

void loop(){}
,