Arduino Serial команды железке


Вот прошло несколько часов с момента моего первого знакомства с arduino nano и я снова добрался до этой игрушки.
(Пока реальную пользу не приносит — игрушка. В моё понимании так.)
Второй подход.
Что у меня есть? Да ничего. Ардуинка, ноут и кабель. С таким набором сложно что-то сделать. Ни датчиков, ни сенсоров ничего.
Пока вся важная периферия только подтягивается — самое время пообщаться через порт.

Строим диалог.
Я ардуине циферки в терминал, она мне буковки и подмигивания диодом.
У меня есть официальный сайт arduino.cc и какие-то знания Си синтаксиса.

// За основу взят пример из мануала по Serial.read()
// Синтаксиса ардуины не знаю (первые сутки встречи), но си пока подходят.
// Увы (и вполне оправдано) не паскаль.
int incomingByte = 0;   // for incoming serial data
void setup() {
    Serial.begin(9600);
    pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  // Отправляем обратку только если получали данные:
  if (Serial.available() > 0) {
      // read the incoming byte:
      incomingByte = Serial.read();
      // say what you got:
      Serial.print("Вход: ");
      Serial.println(incomingByte);
      if (incomingByte == 49){
        // если отправили 1 - включить диод
        digitalWrite(LED_BUILTIN, HIGH);
      }
      if (incomingByte == 48){
        // если отправили 0 - выключить диод
        digitalWrite(LED_BUILTIN, LOW);
      }
      if (incomingByte == 50){
        // если отправили 2 - мигнуть диодом 3 раза
        for (int i = 0; i < 3; i++){
          digitalWrite(LED_BUILTIN, HIGH);
          delay(500);
          digitalWrite(LED_BUILTIN, LOW);
          delay(500);
        }
      }
  }
}

Поясню мальца:
Ардуина (нано но это не важно) подключена шнурком к ноуту и я веду беседу.
1 Включить диод.
0 Выключить диод.
2 Три раза мигнуть диодом.
Входные данные отображаются в терминале (мониторе)

Надеюсь, может кому и пригодиться. До новых встреч.

Общение в терминале Linux.

Вот тут не очень всё удобно. По старой привычке схватился за minicom, да быстро отбросил.
В ручную установить скорость порта в 9600:

$ stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

Я это низа что не запомню. Поэтому и записываю сюда.
Далее я открыл два окошка тарминала.
В одном слушал:

tail -f /dev/ttyUSB0
Вход: 49
Вход: 10
Вход: 48
Вход: 10
Вход: 50
Вход: 10

В другом давал командды:

echo "1">/dev/ttyUSB0
echo "0">/dev/ttyUSB0
echo "2">/dev/ttyUSB0

Ну реакция есть. Диоды моргают как и положено. Ответы есть. Но как-то…
В общем, тут есть над чем подумать.

До новых встреч.

Update 05-03-2019:

Поскольку minicom как и всё коряво-консольное меня порядком задолбал (за десятилетия работы в линуксе), я нашёл графический аналог виндового hyperterminal — cutecom в котором всё что мне нужно есть.

cutecom аналог hyperterminal для linux

cutecom аналог hyperterminal для linux

И написал себе скетч для тестов команд из терминала в arduino:

// работа по командам.
// по команде включить пин и показать диодом.
// исключительно для опытов с терминалом.
char input = 'a'; // входная команда будет один символ.
void setup() {
    pinMode(13, OUTPUT);// диод на плате.
    pinMode(5, OUTPUT); //PWM 
    pinMode(6, OUTPUT); //PWM 
    pinMode(9, OUTPUT); //PWM 
    digitalWrite(13,LOW);
    Serial.begin(9600); // битность порта
}

void pinOnOff(int pin, int led){
  // функция включить указаный пин-секунда-выключить.
  // диод 13 как индикатор.
  //Serial.println(" *** функция *** "); // сообщение в терминал при вызове функции.
  digitalWrite(led,HIGH); // вкл диод
  digitalWrite(pin,HIGH); // вкл pin
  delay(1000); // подержали секунду.
  digitalWrite(pin,LOW); // выкл пин
  digitalWrite(led,LOW); // выкл диод
}

void loop(){
  // читаем то, что вводят через сериал.
  if (Serial.available())
  {
    // получена команда-циферка.
    input = Serial.read(); // прочли 
    Serial.print(input); // показали в терминал полученное.
    switch(input)
    {   
      case '5':
        pinOnOff(5,13); // включаю пятый пин и сигнализирую диодом.
        break;
      case '6':
        pinOnOff(6,13); // аналогично 6
        break;
      case '9':
        pinOnOff(9,13); // 9й пин
        break;
    }
  }
}

Пока это всё что я смог рассказать про консольное общение с ардуино.