Отправить последовательную команду и дождаться ответа
Я новичок в 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();
}
}
}
Однако всякий раз, когда я проверяю это, программа, похоже, не может отличить ответы от одной команды и обрабатывает один ответ так, как будто его запросили обе команды, хотя запросила только одна. Кроме того, является ли переменная формата с плавающей точкой просто числом с плавающей точкой?
Спасибо вам огромное, мне действительно нужна помощь, это не дает мне покоя уже несколько дней...
Ура, Гарри
@Harry Stuart, 👍1
0
- Float печатается только 2 десятичных знака после запятой
- Как получить тип данных переменной?
- Когда необходимо использовать «float» вместо «int»?
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Отправка числа с плавающей запятой из python в arduino
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Mac не обнаруживает последовательный порт для Леонардо
- Проблема с загрузкой скетча в Леонардо