Автор Тема: Миди-клавиатура из детского синтезатора.  (Прочитано 9845 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Мда, карантин и работа на удаленке не приезжая в офис - вещь очень полезная для какого-нибудь гик-крафта.
Валяется у меня дома детский синтезатор. Yamaha PSR-75.  Мой мелкий сын время от времени про него вспоминает, и даже издает на нем какие-то звуки (и потихоньку приобщается к музыке).

Но проблема в том, что данный прибор кроме, как для ребенка, больше ничем не интересен. А иногда у меня возникает необходимость понажимать клавиши и загнать какую-то мелодию в миди. Покупать для этого отдельную миди-клавиатуру - ну... можно конечно - но может сначала попробовать сделать "аддон" для уже имеющейся. )

В общем задача встала такая - не убивая существующую функциональность - прикрутить миди с помощью ардуинки к данному девайсу.
Гуглил схему - нашел за деньги на ибее, но на одной из фоток схемы - в общем-то видно то, что нас интересует.

Полная схема:
2353067-0

Конечно же я сразу прогуглил - а не имеет ли чип, который использован в данном синтезаторе уже в стоке выхода миди, который просто не развели на плате? Увы - YMW270-F (GEW7) - не имеет ни UART ни миди. (
Так же на схеме видно строение клавиатуры:

2353069-1

Т.е. обычная матрица 6x9 со строками и столбцами. Эх, о динамической клавиатуре можно забыть... Но - запал уже зажжен, и едем дальше.
Чтож - если это обычная матрица 6x9, то нам нужно по сути 15 входов в ардуине. На Arduino Nano у нас 14 цифровых входов-выходов, и 8 аналоговых. Оставим в покое выводы 0, 1 (Rx/Tx) а так же 13 (на нем висит светодиод через резистор, что в общем-то нам не мешает, но мало ли - понадобится вдруг моргать). Соответсвенно у нас остается 11 цифровых и 8 аналоговых входов (которые тоже можно использовать как цифровые, бинарные ноги).
Т.е. для того, чтобы подключить 49 клавиш - нам понадобится только 6 аналоговых и 9 цифровых. Т.е. что-то еще остается на пару доп-крутилок или кнопок. )

Подключать это дело будем к ардуине следующим способом:

2353071-2

да, так выглядят все 49 клавиш.
Для работы мы будем использовать библиотеку Keypad для ардуины.
"общие" провода для каждой секции из 6 кнопок - это будут столбцы (columns) - 9шт, а индивидуальные - это будут строки (rows) - 6шт.
Так же хотелось бы, чтобы клавиша звучала пока будет нажата, и не звучала, если не нажата. Ну и полифонию тоже бы хотелось (одновременное нажатие нескольких клавиш).

В итоге получился такой вот скетч для ардуины нано:

#include <MIDI.h>
#include <Keypad.h>
MIDI_CREATE_DEFAULT_INSTANCE();

const byte ROWS = 6; //four rows
const byte COLS = 9; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'0','25','31','37','43','49','55','61','67'},
  {'0','26','32','38','44','50','56','62','68'},
  {'0','27','33','39','45','51','57','63','69'},
  {'0','28','34','40','46','52','58','64','70'},
  {'0','29','35','41','47','53','59','65','71'},
  {'24','30','36','42','48','54','60','66','72'},
};
byte rowPins[ROWS] = {A7, A6, A5, A4, A3, A2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {10, 9, 8, 7, 6, 5, 4, 3, 2}; //connect to the column pinouts of the keypad
int lenRowPins = 6;
int lenColPins = 9;
//int LIST_MAX = 10;
Keypad psr75Keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(115200);
  for (int i=0; i<lenRowPins; i++)
    {
      pinMode(rowPins[i], INPUT_PULLUP);
    }
   for (int i=0; i<lenColPins; i++)
    {
      pinMode(colPins[i], INPUT_PULLUP);
    }

}

void loop() {

  if (psr75Keypad.getKeys())
    {
        for (int i=0; i<LIST_MAX; i++)
        {
            if ( psr75Keypad.key[i].stateChanged )
            {
                switch (psr75Keypad.key[i].kstate) {
                    case PRESSED:
                    MIDI.sendNoteOn(psr75Keypad.key[i].kchar,127, 1);
                break;
                    case HOLD:
                break;
                    case RELEASED:
                    MIDI.sendNoteOff(psr75Keypad.key[i].kchar,0, 1);
                break;
                    case IDLE:
                    break;
                }
            }
        }
    }
}

Чтож... Пошел собирать в железе теперь все это.  :)
Дальше будет больше.



Оффлайн AntonVIP

  • Живу на форуме
  • *******
  • Сообщений: 17441
  • Репутация: +4080/-12
  • Люблю качественную музыку в стиле "мясо"
    • Страница на ютубе
Re: Миди-клавиатура из детского синтезатора.
« Ответ #1 : Марта 31, 2020, 13:05:58 »
Tander, идея интересная, подписываюсь! И +  ;)

Оффлайн Виолет Поносов

  • Эксперт
  • *****
  • Сообщений: 1970
  • Репутация: +299/-19
    • VarrAmp.com
Re: Миди-клавиатура из детского синтезатора.
« Ответ #2 : Марта 31, 2020, 22:06:10 »
я бы сказал - без velocity совсем неинтересно. А если добавить пьезу на корпус, и использовать сигнал с нее для общей velocity? Принцип будет как в электронных ударных - легко нажал на клавишу - минимальная громкость, стукнул с силой - на все 127. И "мертвых" нот не будет - мы же всегда знаем, что клавиша нажата.

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Миди-клавиатура из детского синтезатора.
« Ответ #3 : Марта 31, 2020, 22:14:57 »
Честно - решил пока не заморачиватся с велосити. Реализовать можно как угодно - пьеза, датчик расстояния и прочее. Только велосити я могу и в редакторе поправить. А вот играть на ноутбучной клавиатуре - ну совсем не могу... ))

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Re: Миди-клавиатура из детского синтезатора.
« Ответ #4 : Апреля 06, 2020, 11:10:21 »
Да ну шож такое то... Стоит мне завести какую-то интересную тему - как она становится не актуальной для меня...
Мне подарили клавиши с миди-интерфейсом. Roland PC -200.

Оффлайн AntonVIP

  • Живу на форуме
  • *******
  • Сообщений: 17441
  • Репутация: +4080/-12
  • Люблю качественную музыку в стиле "мясо"
    • Страница на ютубе
Re: Миди-клавиатура из детского синтезатора.
« Ответ #5 : Апреля 06, 2020, 11:41:13 »
Мне подарили клавиши с миди-интерфейсом. Roland PC -200.

Это же хорошо!

Оффлайн tube-freak

  • Эксперт
  • *****
  • Сообщений: 1063
  • Репутация: +366/-2
  • yo yoda
Re: Миди-клавиатура из детского синтезатора.
« Ответ #6 : Апреля 06, 2020, 11:54:23 »
Начни строить ампег SVT, классик, который на  6x6550...
Ну ты понял... может и тут будет подарок  :crazy: