Двунаправленная последовательная связь с Arduino Leonardo - PullRequest
0 голосов
/ 27 марта 2020

У меня проблемы с чтением символов из Arduino Leonardo через последовательный порт. (Это устройство немного отличается от большинства других Arduinos, оно может эмулировать USB-клавиатуру / мышь.)

Использование последовательного монитора (Ctrl + Shift + M) из Arduino IDE, чтение / запись прекрасно работает на любом устройстве (Леонардо, Уно, Pro Micro и др. c.)

Однако, когда я отключаюсь от последовательного монитора в в Arduino IDE и других программах я не могу прочитать ни одного ответа от Leonardo (Uno все еще работает отлично).

Я попытался этот последовательный консольный сценарий с форумов AHK, а также удобный Устройство чтения / записи последовательных портов . Они отвечают тем же (и я ожидаю, что другие последовательные реализации также будут): запись / чтение с Uno прекрасно работают; Пишет Леонардо хорошо, но пишет из Леонардо в консоль go poof . Leonardo по-прежнему будет читать символы, записываемые консолью, и будет реагировать мигающими светодиодами, нажатиями клавиш, щелчками мыши и т. Д. c. (независимо от того, что запрограммировано) .


Мне нужен CLI или другой интерфейс программирования, который может как писать, так и читать с Arduino Leonardo.

Могу ли я делать что-то не так? Разве это не подходящие инструменты для работы? Это просто, как работает Леонардо?


Пример скриншота ниже представляет собой простой тест эха: читает символы, записывает их обратно после короткой задержки.


/* Leonardo / Pro Micro serial read/write echo test
   by: Jonathan David Arndt
   date: March 3, 2020

   This code is a simple demo in reading/writing over a serial connection.
*/

void setup() 
{ 
  Serial.begin(9600); // This pipes to the serial monitor
  delay(3000);        // Wait a moment for things to get setup
  Serial.println("Initialize Serial Monitor");
} 

void loop() 
{
  int pos = 0;

  while (0 < Serial.available())
  {
    delay(500);
    pos = Serial.read();

    // Only echo if there is space in the buffer
    // and if the echo characters are not end-of-line characters
    if (0 < Serial.availableForWrite() && 10 != pos && 13 != pos)
    {
      Serial.print("reply: ");
      Serial.write(pos);
      Serial.println();
      delay(500);
    }
  }
}
...