Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right Связь chevron_right MIDI Note Player: отправка MIDI-нот с Arduino

MIDI Note Player: отправка MIDI-нот с Arduino

Узнайте, как отправлять MIDI-сообщения о нотах с Arduino на синтезатор или другое MIDI-устройство через стандартный 5-контактный DIN-разъём.

В этом уроке разберёмся, как отправлять MIDI-ноты с платы Arduino на музыкальный инструмент или синтезатор, подключённый через стандартный 5-контактный DIN-кабель.

MIDI (Musical Instrument Digital Interface) — широко распространённый протокол для управления синтезаторами, секвенсорами и другой музыкальной электроникой. MIDI-устройства делятся на два больших класса: контроллеры (генерируют MIDI-сигналы в ответ на действия музыканта) и синтезаторы (включая сэмплеры, секвенсоры и т.п.), которые принимают MIDI-данные и воспроизводят звук, свет или другой эффект.

MIDI — это последовательный протокол со скоростью 31 250 бит/с. Встроенный Serial-порт Arduino (а на Mega — все порты) умеет работать именно на этой скорости, поэтому никакого дополнительного оборудования для передачи не нужно.

Структура MIDI-байт

MIDI-байты делятся на два типа:

  • Командные байты — значение от 128 до 255 (0x80–0xFF). Это команды: «нота включена» (Note On), «нота выключена» (Note Off), pitch bend и т.д.
  • Байты данных — значение от 0 до 127 (0x00–0x7F). Это параметры команды: высота ноты, громкость (velocity), глубина pitch bend и т.д.

MIDI-данные принято записывать в шестнадцатеричном виде, потому что банки и инструменты в MIDI сгруппированы по 16.

Подробнее о протоколе можно почитать в MIDI Protocol Guides на сайтах, посвящённых MIDI.

Дополнительные материалы: introduction to MIDI (архивная ссылка) и example.

Необходимое оборудование

  • Arduino Board
  • Гнездо MIDI (мама, female)
  • 2 резистора по 220 Ом
  • Соединительные провода
  • MIDI-устройство (опционально, для проверки)

Схема подключения

По стандарту MIDI все разъёмы на устройствах — только «мама» (female). Подключение к плате:

  • Контакт 5 MIDI-гнезда → цифровой пин 1 (TX) через резистор 220 Ом
  • Контакт 2 MIDI-гнезда → GND
  • Контакт 4 MIDI-гнезда → +5V через резистор 220 Ом

Резисторы защищают линию передачи данных от случайных замыканий и снижают риск повреждения оборудования при неправильном подключении.

Схема подключения MIDI-гнезда к Arduino UNO на макетной плате

Принципиальная схема

Принципиальная схема: гнездо MIDI (мама) подключается к Arduino UNO через два резистора 220 Ом — один на линию данных (пин TX→1), другой на линию питания (+5 V)

Код

Внимание!

Если вы используете плату с ATmega32U4, например DUE или Leonardo, замените Serial на Serial1 в скетче ниже. Это связано с тем, что на таких платах аппаратный Serial выведен на USB, а физические пины TX/RX соответствуют Serial1.

Как это работает

Ардуино отправляет три байта для каждой ноты:

  1. Команда Note On — байт вида 0x90 + номер канала (0x90 = канал 1).
  2. Номер ноты — число от 0 до 127 (например, 60 = средняя до, C4).
  3. Velocity (громкость) — число от 0 до 127 (0 = беззвучно, 127 = максимум).

Чтобы остановить звук, отправляется команда Note Off (0x80) с теми же параметрами, либо Note On с velocity = 0.

Типичные ошибки

  • Перепутаны контакты MIDI-гнезда. Нумерация контактов DIN-5 может сбивать с толку — считайте их со стороны пайки, а не со стороны разъёма.
  • Забыт резистор на линии данных. Без него велик риск повредить MIDI-вход принимающего устройства.
  • Неверный Serial на Leonardo/DUE. На этих платах Serial — это USB, а не физические пины. Используйте Serial1.
  • Неверная скорость. MIDI работает строго на 31 250 бод. Любое другое значение в Serial.begin() приведёт к мусору на входе.

Как проверить результат

Если под рукой нет физического MIDI-устройства, можно использовать компьютер с USB-MIDI-интерфейсом и программным синтезатором (например, GarageBand, LMMS или любой DAW). Подключите Arduino через MIDI-интерфейс и откройте монитор MIDI-сообщений — вы увидите входящие Note On/Off-команды.

Дополнительные материалы

Больше базовых примеров — в разделе built-in examples.

Полный справочник по языку программирования Arduino доступен в language reference.

Последнее обновление: 10.12.2015, AG