Ардуино миди барабаны midi drums
- Войдите на сайт для отправки комментариев
Пт, 23/03/2018 - 21:26
Здравствуйте всем. Прошу помощи в таком деле. Есть три китайских ардуинки. Две нано и одна уно. При заливке скетча tx начинает по бешеному мигать тоесть как я понимаю поссылы идут от фонаря. Скетчи прилогаю, грешу на ch340 может надо оригинал купить и поэтому трабл. Пробовал порог чуствительности срабатывания повысить но ничего не меняется.Срабатывают куча нот как с подключенными пьезами так и без них. проблемма у всех ардуинок одна и таже. Скетчь разные пробовал, одно и тоже. Я нуб так что если поможете буду благодарен. Спасибо
// Автор кода: Christian D'Aquino // Версия: 20150109 // Редактор: Rodrigo Amaral // Перевод на Русский: CheapDrums // НЕОБХОДИМО УСТАНОВИТЬ СКОРОСТЬ СОМ ПОРТА НА 115200 //---------------------------- ННАСТРОЙКИ ------------------------------------------------------------------------------------------------------------------------------------------// // ФОРМА ВВОДА ЗНАЧЕНИЙ, ВВОДИМ ЗНАЧЕНИЯ ВСЕХ 16ТИ ПИНОВ В СКОБКАХ ЧЕРЕЗ ЗАПЯТУЮ, ПРИМЕР ={A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15}; /* |HAT CONTROL |A0 |HI-HAT | |A1 |KICK | | |A2 |SNARE | | | |A3 |RACK TOM 1 (1) | | | | |A4 |RACK TOM 2 (2) | | | | | |A5 |RACK TOM 3 (3) | | | | | | |A6 |FLOOR TOM 1 (4) | | | | | | | |A7 |RIDE 2 | | | | | | | | |A8 |RIDE 2 BELL | | | | | | | | | |A9 |SYMBAL 3 | | | | | | | | | | |A10 |SYMBAL 4 | | | | | | | | | | | |A11 |CHINA 1 | | | | | | | | | | | | |A12 |CHINA 2 | | | | | | | | | | | | | |A13 |SPLASH | | | | | | | | | | | | | | |A14 |SPOCK | | | | | | | | | | | | | | | |A15 */ byte SensorType[16] ={144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 128 }; // ТИП СЭНСОРА; 144 = ПЬЕЗА, 176 = КОНТРОЛЛЕР ХЭТА НА TCRT5000, 128 = ПУСТО byte PadNote[16] ={44, 60, 36, 38, 48, 47, 45, 43, 108, 109, 30, 31, 27, 52, 55, 29 }; // НОТА ПРИВЯЗАННАЯ К ПИНУ (АКТУАЛЬНО ДЛЯ SUPERIOR DRUMMER 2 / THE METAL FOUNDRY, В ДРУГИХ ПЛАГИНАХ / БИБЛИОТЕКАХ МОЖЕТ ОТЛИЧАТЬСЯ) int thresholdMin[16] ={800 ,800, 800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 }; // НИЖНИЙ ПОРОГ ЧУВСТВИТЕЛЬНОСТИ (так же срезается нижний порог передаваемого по миди значения velocity, компенсиривать можно во вкладке utility) int thresholdMax[16] ={1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023}; // ВЕРХНИЙ ПОРОГ ЧУВСТВИТЕЛЬНОСТИ int sensorScantime[16]={10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; // ЧАСТОА ОПРОСА ДАТЧИКОВ int sensorMasktime[16]={10, 60, 60, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 }; // ДЛИТЕЛЬНОСТЬ ИГНОРИРОВАНИЯ ДАТЧИКА ПОСЛЕ ПЛУЧЕНИЯ С НЕГО СИГНАЛА #define READPIN 8 // КОЛЛИЧЕСТВО ЗАДЕЙСТВОВАННЫХ АНАЛОГОВЫХ ПИНОВ ДЛЯ ВВОДА (1й пин = A0, 2й пин = A1 и так далее) //------------------------------ Глушения тарелок ---------------------------------------// // Ноты глушения // #define choke1 94 #define choke2 95 #define choke3 106 #define chokeRide 118 // Доп цифровые входы // #define Aux1 47 #define Aux2 47 #define Aux3 47 #define Aux4 47 #define Aux5 47 #define Aux6 47 #define Aux7 47 // !!! ДАЛЕЕ ИДЕТ КОД ПРОГРАММЫ, ИЗМЕНЕНИЯ ВНОСИТЬ ТОЛЬКО ОПЫТНЫМ ПОЛЬЗОВАТЕЛЯМ !!! // //Определение цифровых пинов глушилок #define Choke1_Pin 51 #define Choke2_Pin 49 #define Choke3_Pin 47 #define ChokeRide_Pin 53 //Определение доп. цифровых пинов #define Aux1_Pin 33 #define Aux2_Pin 35 #define Aux3_Pin 37 #define Aux4_Pin 39 #define Aux5_Pin 41 #define Aux6_Pin 43 #define Aux7_Pin 45 //Состояние цифровых пинов int Choke1_State = LOW; int Choke2_State = LOW; int Choke3_State = LOW; int ChokeRide_State = LOW; int Aux1_State = LOW; int Aux2_State = LOW; int Aux3_State = LOW; int Aux4_State = LOW; int Aux5_State = LOW; int Aux6_State = LOW; int Aux7_State = LOW; int currentSwitchState = LOW; // установка и сброс битов регистра #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif #define midichannel 0 int readSensor = 0; int led = 13; unsigned long previousMillis[16]; unsigned long currentMillis[16]; unsigned int sensorReads[10]; int readNumber[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; boolean playNote[16] ={true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true}; int pin = 0; void setup() { Serial.begin(115200); pinMode(Choke1_Pin, INPUT); pinMode(Choke2_Pin, INPUT); pinMode(Choke3_Pin, INPUT); pinMode(ChokeRide_Pin, INPUT); pinMode(Aux1_Pin, INPUT); pinMode(Aux2_Pin, INPUT); pinMode(Aux3_Pin, INPUT); pinMode(Aux4_Pin, INPUT); pinMode(Aux5_Pin, INPUT); pinMode(Aux6_Pin, INPUT); pinMode(Aux7_Pin, INPUT); digitalWrite(Choke1_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Choke2_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Choke3_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(ChokeRide_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux1_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux2_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux3_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux4_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux5_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux6_Pin, HIGH); // необходимо подтягивающее сопротивление digitalWrite(Aux7_Pin, HIGH); // необходимо подтягивающее сопротивление pinMode(led, OUTPUT); while (!Serial) { ; // ждать последовательный порт для подключения, (только для Arduino Leonardo) } // установить делитель на 8 cbi(ADCSRA,ADPS2); sbi(ADCSRA,ADPS1); sbi(ADCSRA,ADPS0); Serial.flush(); } void loop() // ------------------------------------ ЦИФРОВЫЕ ВХОДЫ ----------------------------------- // // ГЛУШИЛКА 01 { currentSwitchState = digitalRead(Choke1_Pin); if( currentSwitchState == LOW && Choke1_State == HIGH ) // push MIDI_TX(144, choke1, 127); if( currentSwitchState == HIGH && Choke1_State == LOW ) // release MIDI_TX(128, choke1, 127); Choke1_State = currentSwitchState; // ГЛУШИЛКА 02 { currentSwitchState = digitalRead(Choke2_Pin); if( currentSwitchState == LOW && Choke2_State == HIGH ) // push MIDI_TX(144, choke2, 127); if( currentSwitchState == HIGH && Choke2_State == LOW ) // release MIDI_TX(128, choke2, 127); Choke2_State = currentSwitchState; // ГЛУШИЛКА 03 { currentSwitchState = digitalRead(Choke3_Pin); if( currentSwitchState == LOW && Choke3_State == HIGH ) // push MIDI_TX(144, choke3, 127); if( currentSwitchState == HIGH && Choke3_State == LOW ) // release MIDI_TX(128, choke3, 127); Choke3_State = currentSwitchState; // ГЛУШИЛКА РАЙДА { currentSwitchState = digitalRead(ChokeRide_Pin); if( currentSwitchState == LOW && ChokeRide_State == HIGH ) // push MIDI_TX(144, chokeRide, 127); if( currentSwitchState == HIGH && ChokeRide_State == LOW ) // release MIDI_TX(128, chokeRide, 127); ChokeRide_State = currentSwitchState; // AUX 1 { currentSwitchState = digitalRead(Aux1_Pin); if( currentSwitchState == LOW && Aux1_State == HIGH ) // push MIDI_TX(144, Aux1, 127); if( currentSwitchState == HIGH && Aux1_State == LOW ) // release MIDI_TX(128, Aux1, 127); Aux1_State = currentSwitchState; // AUX 2 { currentSwitchState = digitalRead(Aux2_Pin); if( currentSwitchState == LOW && Aux2_State == HIGH ) // push MIDI_TX(144, Aux2, 127); if( currentSwitchState == HIGH && Aux2_State == LOW ) // release MIDI_TX(128, Aux2, 127); Aux2_State = currentSwitchState; // AUX 3 { currentSwitchState = digitalRead(Aux3_Pin); if( currentSwitchState == LOW && Aux3_State == HIGH ) // push MIDI_TX(144, Aux3, 127); if( currentSwitchState == HIGH && Aux3_State == LOW ) // release MIDI_TX(128, Aux3, 127); Aux3_State = currentSwitchState; // AUX 4 { currentSwitchState = digitalRead(Aux4_Pin); if( currentSwitchState == LOW && Aux4_State == HIGH ) // push MIDI_TX(144, Aux4, 127); if( currentSwitchState == HIGH && Aux4_State == LOW ) // release MIDI_TX(128, Aux4, 127); Aux4_State = currentSwitchState; // AUX 5 { currentSwitchState = digitalRead(Aux5_Pin); if( currentSwitchState == LOW && Aux5_State == HIGH ) // push MIDI_TX(144, Aux5, 127); if( currentSwitchState == HIGH && Aux5_State == LOW ) // release MIDI_TX(128, Aux5, 127); Aux5_State = currentSwitchState; // AUX 6 { currentSwitchState = digitalRead(Aux6_Pin); if( currentSwitchState == LOW && Aux6_State == HIGH ) // push MIDI_TX(144, Aux6, 127); if( currentSwitchState == HIGH && Aux6_State == LOW ) // release MIDI_TX(128, Aux6, 127); Aux6_State = currentSwitchState; // AUX 7 { currentSwitchState = digitalRead(Aux7_Pin); if( currentSwitchState == LOW && Aux7_State == HIGH ) // push MIDI_TX(144, Aux7, 127); if( currentSwitchState == HIGH && Aux7_State == LOW ) // release MIDI_TX(128, Aux7, 127); Aux7_State = currentSwitchState; //------------------------------------- АНАЛОГОВЫЕ ВХОДЫ -----------------------------------------------// for(pin = 0; pin < READPIN; pin++) { readSensor = analogRead(pin); if((SensorType[pin] != 128) && (readSensor > thresholdMin[pin]) && ((currentMillis[pin] - previousMillis[pin]) <= sensorMasktime[pin])) { currentMillis[pin] = millis(); if (readNumber[pin] < sensorScantime[pin]) { if (readSensor > sensorReads[pin]) { sensorReads[pin] = readSensor; } readNumber[pin]++; } else if (playNote[pin] == true) { playNote[pin] = false; int velocity = normalizeSensor(sensorReads[pin], pin); MIDI_TX(SensorType[pin], PadNote[pin], velocity); digitalWrite(led, HIGH); digitalWrite(led, LOW); } } else if ((currentMillis[pin] - previousMillis[pin]) > sensorMasktime[pin]) { playNote[pin] = true; readNumber[pin] = 0; sensorReads[pin] = 0; previousMillis[pin] = currentMillis[pin]; } } // =======================================================================================================================================================// } } } } } } } } } } }
Вы этот код откуда-то списали, даже не разобравшись, от какого он контроллера. Судя по номерам пинов в Сетапе (см ниже) - на Нано и Уно он работать не будет. Может это Мега, а может и вовсе не ардуина...
Интересно, как вы вообще могли что-то подключить в ардуине при таких номерах пинов?! Или просто тыкали провода в первый попавшийся контакт?
вы правы скетч от мега. на нано я его просто залил и нчего не подключал а на уно все ноты подряд шли. вот это код от нано но результат одинаковый
у вас используются аналоговые порты без подтяжки - если к ним ничего не подключено, с них постоянно будет идти мусор. Это совершенно нормальное поведение, китайскость ардуины тут не причем, на оригинале будет то же самое.
Сконфигурируйте порты с внутренней подтяжкой либо подключите к ним внешнюю подтяжку резистором 20-50к к земле или к питанию.
тоесть подключить пьезу паралельно 1мом? я уже делал на уно. Ничего не происходит. Может увеличить сопротивление резистора?
вот как я подключил пьезы
тоесть подключить пьезу паралельно 1мом? я уже делал на уно. Ничего не происходит. Может увеличить сопротивление резистора?
скорее уменьшить
понял попробую отпишусь спасибо огромное за помощь
понял попробую отпишусь спасибо огромное за помощь
сорри, перепутал пьезы с кнопками. Попробуйте в своем варианте уменьшить резистор до 50к
хорошо спасибо
проблема была в том что нужно выставить в прошивке столько пьез сколько подлючаем и тогда не будет шумов. Долго что-то я с этим морочился. Спасибо большое может кому-то пригодится мой опыт. Еще при подключении, чтобы ноты не залипали нужно выставить в vst программе долько входное сообщение с миди а на выходе ничего не ставим. Все гладко идет. Еще раз спасибо.Это мой первый проект на ардуино. До этого ремонтировал усилки блоки питания и так по мелочам.....да кстати использую hairless midi которая посылает сообщения на loop be это виртуальный миди интерфеис а уже в kontakt5 настраиваем входное подключение с loop be и миди канал. Для наглядности происходящего использовал midi ox она показывает все и ноты и канал миди сообщении.
Вышла новая каша. Вместо одной ноты проигрываются две . Есть даже ноты которые не задействованы в коде. Что может быть?