Отправить последовательную команду и дождаться ответа

Я новичок в Arduino и перепробовал всевозможные варианты кода, пытаясь добиться этого. Однако ни один из них не увенчался успехом. Мне кажется, это должна быть относительно простая задача, и поэтому я решил, что кто-то, кто разбирается в Arduino лучше меня, сможет мне помочь.

По сути, я отправляю устройству через последовательный порт Leonardo две команды. Одна — один символ «R», а другая — один символ «O». Затем устройство отправляет обратно 8 двоичных байтов (не ASCII) в формате с плавающей запятой на каждую команду. Таким образом, если я отправлю «O», оно вернет 8 двоичных байтов, и то же самое произойдет, если я отправлю «R».

Команды O и R необходимо одновременно отправлять через последовательный порт каждые 250 мс и ожидать соответствующих ответов перед отправкой следующей команды.

Мне также нужно хранить реакцию устройства на O и реакцию устройства на R в соответствующих переменных, которые будут принимать новое значение каждые 250 мс. Я не знаком с форматом одноточечных данных и поэтому не знаю, какую систему переменных использовать.

Вот моя лучшая, но неудачная попытка:

unsigned long previousMillis = 0;
const long interval = 250;
int responseO;
int responseR;

void setup()
{
    Serial.begin(9600);

    while(!Serial);
}

void loop()
{
    unsigned long currentMillis = millis();

    if(currentMillis - previousMillis >= interval) { //таймер на каждые 250 мс
        previousMillis = currentMillis;
        Serial.println("R");               //Посчитал, что "println" со строкой для символа R должно быть нормально

        if(Serial.available() > 0) {          //Не знаю, прав ли я. Я надеялся, что серийный номер будет прочитан только в том случае, если устройство ответит на команду R
            responseR = Serial.read();       //Считываем последовательный порт для ответа устройства на команду R и сохраняем его в переменной
        }

        Serial.println("O");               //Делаем то же самое для команды O

        if(Serial.available() >0) {
          responseO = Serial.read();
          }
    }
}

Однако всякий раз, когда я проверяю это, программа, похоже, не может отличить ответы от одной команды и обрабатывает один ответ так, как будто его запросили обе команды, хотя запросила только одна. Кроме того, является ли переменная формата с плавающей точкой просто числом с плавающей точкой?

Спасибо вам огромное, мне действительно нужна помощь, это не дает мне покоя уже несколько дней...

Ура, Гарри

, 👍1