Нужен совет по оптимизации чтения последовательных байтов

Я считываю некоторые последовательные данные устройства и публикую значения в MQTT. Для этого используется ESP8266.

В настоящее время я запрашиваю последовательное устройство, отправляя команду и анализируя все значения байтов по отдельности, как это сделать лучше?

разбор каждого байта выполняется следующим образом:

float Heat = (float)data[38];


  sprintf(mqtt_topic, "%s/%s", mqtt_topic_base, "Temp"); mqtt_client.publish(mqtt_topic, String(Temp).c_str());

float Power = (float)data[39];
......
..... and etc...

, 👍0


1 ответ


Лучший ответ:

1

В принципе можно использовать свой способ, но простое улучшение состоит в том, чтобы изменить магические числа (38, 39) на константы или определить:

const int offset_heat = 38;

…

float Heat = (float)data[offset_heat];

или определение:

#define OFFSET_HEAT 38

…

float Heat = (float)data[OFFSET_HEAT];

Если все значения последовательны, вы можете оставить переменную для чтения значений:

int offset = 38; // Обычно начинается с 0, если вы читаете значения с самого начала

float heat = (float) readByte(&offset);

…

int readByte(uint8_t* offset)
{
    int value = data[*offset];
    (*offset)++;
    return value;
}

Это увеличивает смещение после считывания значения.

Некоторые замечания:

  • Принято не использовать заглавные буквы для локальных переменных (поэтому замените Heat на Heat)
  • Вы не используете переменную Heat в sprintf, возможно, это сделано намеренно.
,

извините, в sprintf я не изменил этот пример, ошибка с моей стороны :), @Vaikis2006

Нет проблем, для решения это не меняется, @Michel Keijzers