Здравствуйте! Есть библиотека: http://arduino.cc/playground/Main/MIDILibrary В данном случае она принимает миди сообщения с программы на компе по serial. Библиотека работает, все примеры в ней компилируются и функцианируют. Есть код: void loop(){ if (MIDI.read() == ???) } // If we have received a message digitalWrite(LED_BUILTIN, HIGH); delay(1000); // Wait for a second digitalWrite(LED_BUILTIN, LOW); } } И сам вопрос, что нужно написать вместо вопросов в if-е чтобы условие сработало только по одной ноте, нота состоит из 3 параметров inChannel, inNote, inVelocity). В примерах есть вот такая строчка: void handleNoteOn(byte inChannel, byte inNote, byte inVelocity) но как её засунуть в if я не понимаю. Сколько будет стоить данная услуга? Спасибо!
вы удивитесь, но вместо "???" в этой строчке не пишется ничего Правильная строка: Код (C++): if (MIDI.read() ) подробнее - смотрите пример input.ino в папке examples библиотеки
Хорошо, пусть правильная, но что сделать нужно чтобы я нажал ноту "ми" 3 октавы и у меня сработало условие?
Да, все примеры смотрел, с отпракой там всё просто а вот с приёмом у меня затык, очень сложный для меня код, по этому и прошу помощи.
посмотрите еще пример Callback.ino - в функцию handleNoteOn() вписываете проверку канала, ноты и длительности и исполняемый код.. Вы что смастерить-то пытаетесь? - вряд ли вам нужно светодиодиком мигать по ноте. Пишите настоящую задачу, за эту ерунду вроде денег брать стыдно, а разбираться бесплатно - лень Я делал человеку года два назад что-то с обработкой МИДИ. но уже все забыл. надо заново лезть...
Спасибо за ответы, но на самом деле надо моргать "светодиодом", мосфет там будет и реле, 7 каналов, просто нужно показать мне пример как это делать, а потом на этом примере я сам всё допишу. Я так понямаю там нужны 3 байта, но как их написать и сравнить с входящим сообщением не понимаю, я уже и пытался rx-tx слушать, но там квадратики на всех скоростях. Денег не много, но могу скинуть рублей 300, извините если для вас это мало.
примерно так: Код (C++): #include <MIDI.h> MIDI_CREATE_DEFAULT_INSTANCE(); #define MY_CHANNEL 33 #define MY_PITCH 44 #define MY_VELOCITY 100 bool task1 = false; // ----------------------------------------------------------------------------- // This function will be automatically called when a NoteOn is received. void handleNoteOn(byte channel, byte pitch, byte velocity) { if ((channel == MY_CHANNEL) && (pitch == MY_PITCH) && (velocity == MT_VELOCITY)) { task1 = true; } } void handleNoteOff(byte channel, byte pitch, byte velocity) { // Do something when the note is released. } // ----------------------------------------------------------------------------- void setup() { // Connect the handleNoteOn function to the library, // so it is called upon reception of a NoteOn. MIDI.setHandleNoteOn(handleNoteOn); // Put only the name of the function // Do the same for NoteOffs MIDI.setHandleNoteOff(handleNoteOff); // Initiate MIDI communications, listen to all channels MIDI.begin(MIDI_CHANNEL_OMNI); } void loop() { // Call MIDI.read the fastest you can for real-time performance. MIDI.read(); if (task1) { digitalWrite(LED_BUILTIN, HIGH); task1 = false; } } В макросы #define MY_CHANNEL 33 #define MY_PITCH 44 #define MY_VELOCITY 100 впишите свои номера каналов и нот. Для других каналов соответвующим образом размножите условия. только имейте в виду. что это не более чем набросок. Задача не такая простая, как кажется, если у вас задачи не однократные. а длительные... - то есть если в них есть какие-то задержки. Тогда нужно городить циклы с миллисом, оператор delay() здесь использовать нельзя. И еще стоит подумать. что делать, когда новая нота приходит до того, как отработалась предыдущая... В общем, нюансов тут дофига. И ни в коем случае не пихайте сами задачи в функции handleNoteOn() и handleNoteOff() - все повиснет. В этих функциях (они называются коллбеки) - можно делать только очень короткие действия - например выставить флаг. как в коде выше.
ЕЕЕЕЕ! Работает! Спасибо ОГРОМНОЕ! Вот сам бы не смог так сделать! Напишите пожалуйста на почту номер карты или яндекс денег (djsamlab@mail.ru). Сегодня ближе к вечеру скину. Еще раз спасибо!
ничего не надо, пользуйтесь на здоровье Захотите сделать из этого кода что-то посложнее - обращайтесь
Блин, ну вы же потатили своё время. Может и я вам смогу чем нибудь помочь, по дизайну или ретушь в фотошопе, или видео смонтировать. А то как то не честно получается. Напишите если что-то нужно, на почту. Я ваш должник, еще раз спасибо!