Дело было вечером, делать было нечего.
В общем нашел я у дочки игрушку, она даже работала, но играть на ней было практически невозможно, дело в том что при нажатии на 2 клавиши, 3 -я уже не работала, то есть взять аккорд невозможно (хотя я аккорды и не знаю, зато паять умею) а еще совершенно случайно валялись ардуики всякие. Гугл сказал можно сделать из этого всего MIDI - клавиатуру.
Взял мегу, т.к. там точно хватит цифровых входов под каждую клавишу, клавиш получилось 37, можно было и на UNO сделать, но тогда нужен будет ставить мультиплексор, а у меня его не оказалось.
Берем Ашан паяльник... (не ну брат, у меня канэшна есть и хороший паяльник, просто он на работе, а такие у меня везде по одному валяются, на даче в машине и дома) кстати подставка сделана мной в 1989 году.
и курочим уже бывшую игрушку
далее по схеме делаем шилд, схема такая
крутилку, энкодер, не стал пока ставить, это в позже.
и начинаем паять кнопки к шилду, конечно все нужно было сделать на разъемах, но увы их толком не оказалось.
скетч... эээ, а как тут спойлер сделать? ладно не буду выкладывать, только кусками
брал отсюда и переделывал под себя http://cxem.net/arduino/arduino29.php
тут задаются ноты
#define note_2F 0x29
#define note_2Fd 0x2A
#define note_2G 0x2B
#define note_2Gd 0x2C
#define note_2A 0x2D
#define note_2Ad 0x2E
#define note_2B 0x2F4
#define note_3C 0x30
#define note_3Cd 0x31
#define note_3D 0x32
.....
потом еще куча кода
а так происходит обработка событий
// Нота 2F
if (buttonState_2F == HIGH && note_2F_send_on == false) // Нажатие клавиши
{
noteOn(0x90, note_2F, 0x7F);
note_2F_send_on = true; // Команда Note On послана
note_2F_send_off = false; // Команда Note Off не послана
}
else if (buttonState_2F == HIGH && note_2F_send_on == true) // Если клавиша удерживается
{
noteOn(0x00, note_2F, 0x7F);
note_2F_send_on = true;
note_2F_send_off = false;
}
else if (buttonState_2F == LOW && note_2F_send_off == false) // Если клавишу отпустили
{
noteOn(0x90, note_2F, 0x00);
note_2F_send_on = false;
note_2F_send_off = true;
}
// Нота 2Fd
if (buttonState_2Fd == HIGH && note_2Fd_send_on == false)
{
noteOn(0x90, note_2Fd, 0x7F);
note_2Fd_send_on = true;
note_2Fd_send_off = false;
}
else if (buttonState_2Fd == HIGH && note_2Fd_send_on == true)
{
noteOn(0x00, note_2Fd, 0x7F);
note_2Fd_send_on = true;
note_2Fd_send_off = false;
}
else if (buttonState_2Fd == LOW && note_2Fd_send_off == false)
{
noteOn(0x90, note_2Fd, 0x00);
note_2Fd_send_on = false;
note_2Fd_send_off = true;
}
а так передача всего в RS-232
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
delay(20);
}
Далее ставим LoopMIDI и Serial MIDI Converter
Первый запускается и может висеть в трее, второй нужно запускать самостоятельно и держать открытым, или свернутым.
Ну а потом ставим что нибудь типа Pro Tools + Kontakt 5 вместе с сэмплами. Ну и вуаля, все работает
Все работает, но играть я не умею, поэтому можно разбирать :) шутка, отдам дочке может понравится, будет учиться...
З.Ы. да да, можно было и купить, стоит рублей 7, но так интересней..