Мигайте бортовым светом, считывая значение с USB

Я заинтересован в создании базового монитора загрузки процессора с помощью arduino UNO.

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

Так, например, когда загрузка процессора высока, он будет записывать 1 на все клавиатуры из /sys/class/leds/input*::capslock/brightness

Я хочу сделать то же самое с arduino, есть ли способ считывать контакты USB-данных и управлять светом без перекомпиляции и повторной загрузки кода каждый раз? Таким образом, на моем ноутбуке может работать код C Ruby (libusb), C и т. Д., и с его помощью я могу управлять Arduino UNO.

, 👍-1

Обсуждение

С помощью Uno вам нужно будет переписать код ruby, чтобы отправлять данные через последовательный интерфейс Unos. На Uno вы можете затем поместить код, который считывает эти данные и соответственно мигает светодиод. Программа Unos должна быть запрограммирована один раз. Он постоянно остается во флэш-памяти Unos. Вам нужно только перепрограммировать, когда ваш код меняется., @chrisl


1 ответ


1

Пусть ваш рубиновый код отправит ASCII-цифру, представляющую отображаемые значения переменных, которые вы хотите отобразить в Uno. Поскольку Uno имеет только один светодиод, который вы можете запрограммировать, вам понадобятся еще два, чтобы отобразить все три переменные.

Каждый раз, когда Uno получает новый триплет данных, преобразуйте каждую цифру в любое средство отображения, которое вы выберете для представления этих значений - например, частоту мигания или рабочий цикл.

Вы захотите написать неблокирующую программу, которая просто продолжает обновлять светодиоды независимо от того, что происходит, например, интерпретация следующего триплета. Посмотрите на пример программы Blink без задержки в Arduino IDE. Также посмотрите здесь на Arduino Stack Exchange для вопросов/ответов о неблокирующих методах программирования (вы можете даже найти один написанный мной). Ваш самый важный совет должен звучать так: не используйте delay().

Я предложил отправить 3 цифры ASCII - вместо этого вы можете отправить двоичный код. Но ASCII упростит тестирование как вашего кода Ruby, так и кода Arduino, поначалу отдельно, поскольку коммуникация с Ruby будет читабельной для человека, а команды для Uno могут быть сгенерированы человеком.

,