Arduino Mega Pins для SoftwareSerial (по сравнению с AltSoftSerial)

В настоящее время я рассматриваю возможность использования Arduino Mega для создания устройства приема MIDI, которое затем будет передавать данные по USB, но у меня возникли проблемы/неопределенности с конструкцией приемной стороны Arduino.

Я надеюсь, что в этой сборке будет 16 входов MIDI (как 5-контактные DIN), без выходов, кроме USB. У Mega 4 контакта Rx, что все еще оставляет мне 12 для создания в программном обеспечении. Из того, что я читал, похоже, что SoftwareSerial не будет поддерживать одновременное чтение с разных входов, в то время как AlftSofSerial поддерживает. Однако также похоже (по крайней мере, из того, что я собрал), что AltSoftSerial не поддерживается на таком количестве контактов, которое мне нужно для работы.

В моей настройке не все 16 MIDI-устройств будут отправлять данные в Arduino одновременно, а только 2–4; однако они будут работать одновременно (например, нота клавиатуры вместе с фейдером громкости), поэтому я не думаю, что SoftwareSerial будет хорошо работать для того, что мне нужно.

Можно ли разобраться с тем, что мне нужно, с помощью SoftwareSerial/AltSoftSerial и физических UART? Если есть какая-то необходимая информация, которая, кажется, отсутствует или я что-то не понимаю, пожалуйста, дайте мне знать. Спасибо!

, 👍1


1 ответ


Лучший ответ:

0

Из того, что я прочитал, следует, что SoftwareSerial не будет поддерживать одновременное чтение с разных входов

Верно. Вы можете listen() только на одном экземпляре за раз.

AltSoftSerial может поддерживать только 1 экземпляр, но позволяет одновременно передавать и получать данные и не блокирует всю систему во время передачи или получения данных.

Так что лучшее, на что вы можете надеяться, — это 4 аппаратных UART и один AltSoftSerial на 5 портов.

Я бы предложил рассмотреть возможность использования нескольких плат Arduino Mega с 4 портами на каждой (4 платы дадут в общей сложности 16 портов) и заставить их взаимодействовать друг с другом через какой-либо другой протокол (например, SPI или I2C).

,