Я деякий час тому шукав готовий протокол для керування залізом, такий щоб був простіше за G-коди. Схоже, що відповідь є.
Firmata. Ось що чудово підходить для блимання світлодіо́дом.
Правда, я поки не розібра́вся, наскільки мені цей протокол підходить. Поки бачу: все, що більш складне за світлодіо́д, може не дуже легко поєднуватися з тією Firmata.
Що тут добре
Сьогодні я блимав світлодіо́дом, не написавши жодного рядку кода.
- Завантажив на Arduino скетч зі стандартних прикладів Firmata, а саме
StandardFirmataPlus
- Запустив Node-RED з додатковими модулями:
node-red-dashboard
, щоб зробити веб-інтерфейс;node-red-contrib-johnny5
для комунікації з Firmata
- Далі достатньо мишкою намалювати просту схему
Відео на YouTube: демонстрація роботи.
Повто́рюю, жодного рядку кода!
Наступні кроки
Окей, я можу подати на LED 13 високий або низький рівень. А ще я можу написати код для Arduino, який цим світлодіо́дом буде блимати. Як там йдеться у стандартному прикладі Blink?
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Disclaimer: звісно, насправді замість блоку́ючого delay()
має бути перевірка таймеру з моменту останнього переключення стану світлодіоду і все таке. Але ви уявіть, що це псевдоко́д.
Тож, що маємо? Стандартний приклад блимає нестерпно повільно. Я можу захоті́ти замінити оці́ от 1000 мілісекунд на 500, наприклад. Або я можу вмикати світло на 100 мілісекунд, а потім темрява триватиме ще 900. Всі з цим колись експериментували, чи не так?
І я уявляю, що це у нас має бути такий особливий віртуальний прилад — «блималка» для керування фізичним світлодіо́дом. У цього віртуального приладу є два вхідних параметри, нуу наприклад, delayHigh
та delayLow
, кожен з них unsigned int. От ці два числа нехай передаються з хоста по протоколу Firmata.
Звісно, що можна написати всю цю програму на хості і керувати кожним окремим блиманням. Але я наполяга́ю, що мікроконтролер повинен напівавтономно займатися деякими складними процесами. Інакше неціка́во.
Піду гуглити RTFM, як це зробити.