У меня проблемы с чтением символов из 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);
}
}
}