Как отправить символы в SoftwareSerial Arduino с помощью командной строки Linux без хвоста -f?
Я хочу отправить символы в последовательный порт Arduino, который заставляет Arduino включать/выключать светодиод. Вот код:
int led_main=8;
void setup()
{
pinMode(led_main, OUTPUT);
Serial.begin(9600);
}
void loop()
{
char chr;
if (Serial.available())
{
chr = Serial.read();
if (chr == '0')
{
digitalWrite(led_main, LOW);
}
else if (chr == '1')
{
digitalWrite(led_main, HIGH);
}
}
}
В моей системе Arduino распознается как /dev/ttyACM0
или /dev/ttyACM1
. Когда я запускаю команду echo "1" > /dev/ttyACM0
, это не работает. Но когда я открываю второй терминал, запускаю tail -f /dev/ttyACM0
, а затем в первом терминале запускаю echo "1" > /dev/ttyACM0
, светодиод включается, как и ожидалось. Так почему же мне нужно открывать второй терминал и продолжать отслеживать вывод с помощью tail -f
, чтобы это работало? Есть ли способ сделать это с помощью одной команды?
@CluelessNoob, 👍1
1 ответ
Лучший ответ:
Arduino имеет схему автоматического сброса для сброса платы, если по USB инициируется новое соединение. Это удобно для удобной загрузки или сброса для отладки при открытом последовательном мониторе. Но это вызывает проблемы, если вы хотите общаться с MCU с компьютера через USB с помощью инструментов командной строки, сценариев, Python, C++, C#, Java. Всегда при новом подключении плата сбрасывается.
Одним из решений является отключить схему автоматического сброса. Другой вариант — подождать секунду после подключения, пока плата перезагрузится.
- Arduino Uno R3 не распознается Arduino IDE в Ubuntu 21.04
- Есть ли у Linux защита программного обеспечения на USB?
- Отключение Arduino при загрузке
- Чтение последовательных данных с Arduino с помощью кода C
- Показания Arduino корректно обновляются в Windows, но не в Linux
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
Использование
stty -F /dev/ttyACM0 -hupcl
сработало (можно найти по ссылке). Спасибо!, @CluelessNoob