Как мне отправить arduino команду firmata для включения вывода

#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}