#arduino #firmata
#arduino #firmata
Вопрос:
Я пытаюсь реализовать протокол firmata, и мне немного сложно расшифровать спецификацию для записи цифровых контактов:
Я отметил следующие части спецификации Firmata 2.3
* type command channel first byte second byte
------------------------------------------------------------------------------
* digital I/O message 0x90 port LSB(bits 0-6) MSB(bits 7-13)
и
/* two byte digital data format, second nibble of byte 0 gives the port number (e.g. 0x92 is the third port, port 2)
* 0 digital data, 0x90-0x9F, (MIDI NoteOn, but different data format)
* 1 digital pins 0-6 bitmask
* 2 digital pin 7 bitmask
*/
У меня возникли некоторые трудности с интерпретацией спецификации. Я просмотрел другие реализации, но не смог увидеть взаимосвязь между спецификацией и реализацией.
Итак, допустим, я хочу включить светодиод Arduino (вывод 13), я знаю, что он будет на втором порту, порту 1, поэтому первый байт будет #{91}
.
Однако я запутался в битовой маске для вторых двух байтов. Я знаю, что такое битовая маска, поэтому я хочу включить правильный бит для вывода.
-
Почему битовая маска такая большая для цифровых контактов? Я знаком с использованием битовых масок на цифровых выходах ПЛК, которые кажутся сильно отличающимися (один вывод, один бит)
-
Я думаю, что вывод 13 будет 7-м выводом на порту 1. Поскольку меня не волнуют другие выводы, я бы отметил вывод во 2-м байте #{40}, и мне не нужны какие-либо выводы, установленные для третьего байта #{00}?
Я не думаю, что моя интерпретация битовых масок верна, и, вероятно, в этом и заключается моя ошибка
Я на правильном пути для этого? Это правильная команда для установки высокого или низкого значения PIN-кода?
Ответ №1:
После некоторой strace
отладки с помощью тестового приложения firmata я обнаружил, что простая команда для включения вывода 13 была:
#{912000}
и отключить его:
#{910000}