Я уже некоторое время играю с neo trellis. Мне пришлось упаковать его в коробку и забыть о нем на несколько месяцев из-за жизненных перемен и приоритетов, а затем я вернулся к нему. Я потерял наброски кода, который я сделал для него несколько месяцев назад, поэтому я решил начать сначала и перечитал документацию на Adafruit. В итоге я все вспомнил и начал работать. Во-первых, мне уже понравился один из примеров из библиотеки Seeaw NeoTrellis: «interrupt».
По сути, он заключается в том, что на клавиатуре загорается разноцветная радуга, а затем, когда вы нажимаете на одну из них, она загорается назначенным цветом. После изучения этого кода я решил, что быстрый и грязный способ взлома клавиш — получить их код, распечатав его на последовательном мониторе. Идентификационный код клавиш на самом деле был частью функции, которая создает и возвращает цвет для каждой клавиши. Я выбрал эти уникальные данные [код+цвет] и запрограммировал его на печать в последовательном мониторе всякий раз, когда я нажимал на клавишу. Таким образом, я открывал последовательный монитор и нажимал каждую клавишу, чтобы получить код. В любом случае, поскольку мой NeoTrellis — это матрица 4×4, я сопоставил клавиши и сделал условие таким образом, чтобы они печатали уникальную букву id на мониторе при нажатии, вместо странного кода, упомянутого ранее. В итоге, клавиши были установлены таким образом:
A | B | C | D |
---|---|---|---|
E | F | G | H |
I | J | K | L |
M | N | O | P |
В итоге получилось, что если я нажму на клавишу в левом углу сверху, то она выведет «A» на последовательный (tty/ACM0
в моем случае) монитор, если я нажму на клавишу в правом нижнем углу, то выведет «P» и так далее. Как только это было сделано, я перешел на python. Я использовал pyserial для чтения содержимого tty/ACM0
.
device='/dev/ttyACM0'
arduino = serial.Serial(device, 9600,timeout=1)
Моя первоначальная идея заключалась в воспроизведении простых звуков «бип» и подобных. Я искал звуки уведомлений в своей системе и использовал команду mplayer
для воспроизведения файла wav
с некоторыми образцами звуков, например, колокольчиков или гитар.
valor = arduino.readline()
valor = valor.decode('utf-8')
if "A" in valor:
print("playing sample music")
subprocess.run(["mplayer", "/<path_to_my_music>/a.wav"])
Поскольку это сработало, я решил пойти немного дальше. Я открыл Audacity, взял микрофон и укелеле. Я начал записывать несколько основных аккордов и сохранять их в папке music в основной папке проекта. Я также сделал несколько забавных звуков ртом и записал их. Я изменил код python, чтобы он считывал путь из этой папки, а не из системной по умолчанию.
valor = arduino.readline()
valor = valor.decode('utf-8')
if "A" in valor:
print("playing ukelele chord F")
subprocess.run(["mplayer", "/<new_path_to_my_music>/ukelele1.wav"])
...
Я завернул все это в цикл while true, который выполнялся только при одном из сигналов клавиш (в моем случае я использовал «M», так как решил использовать последний ряд клавиш в качестве кнопок выбора).
И все! Теперь я могу играть свои собственные записанные вещи на своем компьютере с помощью neotrellis. Впрочем, это всего лишь пример. Как только у меня будет эта карта в серийнике, я смогу запрограммировать их на открытие папок, вкладок firefox или чего угодно, что мне нужно. Я думаю о создании помощника «управления git». Хотя у него есть несколько секунд задержки!
Вот короткое видео, демонстрирующее запись и неотрелли.

Пола: «Я кое-что создала!» — Mastodon.green
Прикреплено: 1 видеоУ меня кое-что получилось!

.