Работа кипит , жду последний необходимый компонент - УФ лампу для засветки фоторезиста , платы уже почти развел , макет для слепка будущего корпуса триггеров надыбал и самое главное - решил проблему срабатывания триггера при просто прикосновении колотушкой к пластику без удара. Залез на днях в гугл почитать подробнее про триковские и тригмиковские триггеры. Мучал меня вопрос - есть ли там такая проблема . Инфы особо не нашел , но еще раз пересмотрел видео с демонстрацией Триг Мик , и обратил внимание на то , что там таки есть некая настройка чувствительности которая позволяет отсеять слабые удары . Пару дней ходил и думал как же они смогли реализовать бесконтактный съем с учетом какой-никакой динамики и буквально вчера вечером перед сном меня осенило
Не уверен что именно такой подход применен в Триг Мике , но в моей реализации он вроде как работает. По крайней мере быстрый тест на импровизированном пэде ( который на видео в шапке ))) показал хороший результат. Суть проста - чем сильнее удар тем быстрее колотушка преодолевает путь от положения замаха ( скажем с точки 45 градусов по отношению к полу и пластику) до точки соприкосновения с пластиком ибо именно благодаря "резкости" , "хлесткости" ( я не физик и не теоретик хрен его знает как правильно этот процесс назвать ну суть я думаю понятна)) достигается мощный звук . Чем слабее удар , тем соотв. эта скорость меньше . Добавив в код буквально несколько строчек и посмотрев результаты в Serial Monotr'е я убедился в своих предположениях . В код добавлена функция замера момента времени (в микросекундах ) в двух местах - когда колотушка пересекает нижний порог ( Threshold Low ) назовем эту величину Т1 ( собственно точка откуда начинается замах) и затем в момент пересечения колотушкой точки где фиксируется удар - пусть будет Т2 , от значения Т2 отнимаем Т1 и получаем значение времени которое потребовалось колотушке чтобы преодолеть расстояние от точки замаха до точки удара. Дабы цифры на выходе не были пугающе большими полученный результат делился на 1000 ( просто нашел в гугл код для отображения времени реакции на нажатие кнопки , он как раз подошел ) . Короче удары с нормальной , полезной скажем так , динамикой варьировались между 15 и 30 единиц . Все что выше - это либо очень слабые удары и рикошеты , либо просто колебания колотушки даже без соприкосновения с пластиком . Таким образом добавив в код фиксации удара условие - что время преодоленное колотушкой не должно превышать значения 40 единиц удалось отсеять самые слабые удары и "не полезные " дивижения колотушки. Осталось проверить это все в реальной игре . Новый код приведен ниже , если кто делал уже первый вариант проекта - можете попробовать в действии. К слову пришла идея как добиться и динамики и съема без ненужных срабатываний - объединить оба подхода съема ударов - классический с пьезоэлементом и бесконтактный. Где пьезы будут отвечать за съем динамики , а магнитные триггеры выступать в роли фильтра от ложных срабатываний и рикошетов. Но к сожалению пока испытать в деле не могу. Все имеющиеся у меня электронные барабаны и педы я продал не успев попробовать их в работе с ардуиной , а имеющиеся у меня пьезоэлементы выдают слишком слабый импульс чтобы снять удар не только ним самим но и по поверхности к которым они приклеены. Не знаю в чем причина , испытывал на двух разных платах , пьезы покупались в двух разных магазинах и даже нашел старую , которая отлично работала восемь лет назад с модулем Мегадрам. Потому эту идею оставлю на потом .
// ///////////////////////////////////////////////////////// Функция обработки первого триггера ///////////////////////////////////////////////
uint16_t val=analogRead(A0); // переменная для хранения значений считанных с первого датчика Холла
if ( val>=ThresholdNoteOff && Flag == 0){ t1=micros(); // фиксируем момент времени когда был преодолен нижный порог
Flag=!Flag; // разрешаем срабатывание триггера
}
if (val>=ThresholdNoteOn && Flag == 1 ) // если значение с датчика превысило порог срабатывания ( колотушка прижалась к пластику)
// и флаг разрещающий срабатывание ноты равен нулю
{
t3=((micros()-t1)/1000); // вычисляем время требуемое на приодоление колотушкой расстояние от ниженого порога до точки удара
if(t3<40 && t3>10 ) { // если значение времени t3 лежит в диапазоне между 10 и 40
Flag=!Flag; // инвертируем значение флага тем самым запрещая следующее срабатывание ноты пока не будет сделан новый замах колотушкой
noteOn (); // Посылаем ноту в DAW
digitalWrite(A1 , LOW ) ; // Гасим светодиод сигнализируя что триггер сработал и новый замах еще не сделан
}
}
if (Flag==1 && val<=ThresholdNoteOff) // если значение с датчика опустилось ниже порога замаха колотушки ( колотушка отдалилась от пластика на заданное расстояние )
{
Flag=!Flag ; // Инвертируем значение флага разрешая новое срабатывание ноты
digitalWrite(A1 ,HIGH ) ; // Включаем светодиод сигнализируя что новое срабатывание триггера разрешено
}