Как отправить символы в 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, чтобы это работало? Есть ли способ сделать это с помощью одной команды?

, 👍1


1 ответ


Лучший ответ:

2

Arduino имеет схему автоматического сброса для сброса платы, если по USB инициируется новое соединение. Это удобно для удобной загрузки или сброса для отладки при открытом последовательном мониторе. Но это вызывает проблемы, если вы хотите общаться с MCU с компьютера через USB с помощью инструментов командной строки, сценариев, Python, C++, C#, Java. Всегда при новом подключении плата сбрасывается.

Одним из решений является отключить схему автоматического сброса. Другой вариант — подождать секунду после подключения, пока плата перезагрузится.

,

Использование stty -F /dev/ttyACM0 -hupcl сработало (можно найти по ссылке). Спасибо!, @CluelessNoob