@WhatYouDoing

Как правильно прочитать данные с serial port?

Как правильно мне обработать строку,которая отправляется по порту? сейчас строка выглядит вот так
100 % \n
, передаю значение процессора,но так же я бы хотел передать еще одно значение например оперативной памяти,если передаю то все смешивается в кучу,у кого есть какие варианты? я думаю что к строкам надо добавлять заголовки что то типа вот такого
CPU: 100% \n
, но как тогда правильно обработать это в арудино кусок кода текущей прошивки
char rx_byte = 0;
String rx_str = "";

void loop() {
  if (Serial.available() > 0) {
    rx_byte = Serial.read();
    
    if (rx_byte != '\n') {
      rx_str += rx_byte;
    }
    else {
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(10,0);
   
    display.clearDisplay();
    display.println("Usage CPU - " + rx_str);
    rx_str = "";
    display.display();
                   
    }
  } 
}
  • Вопрос задан
  • 1809 просмотров
Пригласить эксперта
Ответы на вопрос 2
a_volkov1987
@a_volkov1987
Инженер-схемотехник
1 байт - ID параметра (0x01 - CPU, 0x02 - RAM и т.д.)
2 байт - Value параметра
3 байт - XOR между ID и Value
4 байт - признак окончания передачи 0xFA, например

Итого пересылаете 4 байта

На ардуине:

int counter = 0;
if (Serial.available() > 0){
    rx_byte = Serial.read();
    if(rx_byte !=0xFA)
    {
        read_array[counter] = rx_byte
    }
    else
    {
     counter = 0;   
     if ((read_array[0] xor read_array[1])== read_array[3])
        {
        //данные приняты успешно, можно передавать в обработку
        }
        else
        {
        //данные искажены, не берем их в расчет
        } 
    }
}


Код условный, только для демонстрации идеи передачи пакетом с помехоустойчивостью чуть получше чем никакой.
Ответ написан
Комментировать
@evgeniy_lm
что значит "все смешивается в кучу"? У вас \n это управляющий символ разделения строки, вы можете передавать в таком формате сколько угодно параметров. В конце пакета необходим символ окончания пакета, например \f. На стороне МК нужно предусмотреть код который будет разделять строку. Приведенный вами код все это делает, но он не учитывает возможную передачу нескольких параметров.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы