Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Минимальная MIDI-ударная установка с 3D-принтером

Компоненты и расходные материалы

Arduino UNO
× 1
Стандартный ЖК-экран Adafruit - 16x2, белый на синем
× 1
SparkFun Piezo
× 1
Чувствительный к силе резистор Adafruit (FSR)
× 1
Резистор 10 кОм
× 1
Резистор 1 МОм
× 1
стабилитрон SparkFun - 5,1 В, 1 Вт
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1
Ползунковый переключатель
× 1
TRS Socket
× 1
Кабель USB-A - B
× 1
Адаптер Apple Lightning - USB для камеры
× 1

Необходимые инструменты и машины

3D-принтер (общий)
Лазерный резак (универсальный)
не обязательно, дополнительно
Паяльник (общий)
круговой резак

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Привет.

Это минимальная ударная установка с использованием Arduino UNO.

Прежде всего, проверьте эту страницу с инструкциями.

https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/

С тех пор, как я начал это делать, я был очарован пьезо и электронными барабанами.

Я был очарован очень простым механизмом электронных барабанов и великим изобретением под названием MIDI.

Другими словами, я не мог удовлетвориться только изготовлением подушечек.

Эта ударная установка условно разделена на две части.

1. Блокнот из 3д-принтера и плотной бумаги.

2.Запустите конвертер midi с помощью Arduino UNO.

Сигнал, отправленный с пэда «1», обрабатывается Arduino «2» и преобразуется в MIDI-сигнал. А MIDI-сигнал передается с Arduino на iPhone, ноутбук и т. Д., И звук выходит.

Вам не нужно готовить блок питания, кроме смартфона или ПК.

Что вам понадобится

Инструменты

・ 3D-принтер

・ Лазерный резак (дополнительно)

・ Шестигранный ключ

・ Резак

・ Круговой резак

・ Паяльник

Резак для труб

・ Шуруповерт

・ Сверло 9мм / 10мм

Материал

・ Бумага толщиной 1 мм

・ Нить PLA

・ Листы губчатой ​​пены 5 мм / 10 мм

・ МДФ 2,5 мм / 5,5 мм (Extra)

・ M6 - болт и гайка 70 мм

・ M6 - болт и гайка 50 мм

・ M3 - 10 мм болт и гайка

・ M3 - болт и гайка 15 мм

・ M3 - болт и гайка 25 мм

・ Винт M2

・ Диаметр 13 мм Труба из нержавеющей стали

Барабанное оборудование

・ Головка сетки 10 дюймов / 8 дюймов

・ Стойка малого барабана (все в порядке. Я использую YAMAHA SS662.)

・ Стойка для хай-хэта (все в порядке. Я использую YAMAHA HS650A)

・ Педаль бас-бочки (все в порядке. Я использую YAMAHA FP7210A)

・ Барабан

Шаг 1. 3D-печать

Все данные есть на Thingiverse и GitHub.

Для обода используйте версию 2.

Я печатал детали с заполнением 20%. Толщина слоя 0,3 мм.

Также вы можете использовать лазерный резак для изготовления подушек.

https://github.com/RyoKosaka/drums/tree/master/vector

Шаг 2. Сборка

Для соединения деталей используйте болты и гайки M3-10мм.

Используйте болты M3-15 мм или M3-25 мм для центральной части, чтобы прикрепить нижнюю часть друг к другу.

Шаг 3. Изготовление оболочки

Во-первых, высота корпуса 55 мм.

Сделайте три ленты шириной 55 мм.

Длина немного больше длины, покрывающей подушечку.

Так как внизу есть зазор, попробуйте вставить в него одну ленту.

Обрежьте ленту так, чтобы она была длиной идеального круга.

Повторите это 3 раза и наложите клей.

Когда скорлупа высохнет, при закрепленной сетчатой ​​головке проделайте отверстие диаметром 9 мм для раструба.

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

Для фиксации сетчатой ​​головки используйте болты M6-70 мм.

После того, как вы проделали отверстие, снова снимите сетчатую головку, чтобы поставить пьезо

Шаг 4. Присоединение пьезо

SNARE

В случае малого барабана используйте два пьезо, как показано на рисунке.

Подключите красный кабель пьезо к каждому наконечнику и кольцу.

Оба черных кабеля подключаются к муфте.

Не забудьте пропустить кабели через отверстия в пластине сенсора при пайке.

Пьезо для головки (пьезоэлемент, соединенный с наконечником) должен быть зажат с губчатой ​​пеной толщиной 10 мм, как показано на рисунке.

Один снизу, три сверху. И сделайте 3 верхних конуса, как на картинке.

Затем положите его на сенсорную пластину.

УДАР

Поскольку в пэде бас-пэда используется только один пьезо, можно использовать только наконечник.

Сенсорная пластина не требуется. Две поролоновые губки под пьезо

Поместите датчик со смещением от центра.

Это связано с тем, что Arduino не может судить о силе удара, если колотушка попадает прямо в датчик.

HI-HAT

Схема такая же, как у пэда.

Подложите под пьезоэлемент кусок вспененной губки толщиной 10 мм.

Пьезо тонкий. Будьте осторожны, чтобы не погнуться и не пораниться.

Шаг 5:10-дюймовый пэд малого барабана

Сначала прикрепите датчик обода.

Закрепите сенсорную пластину. Крепко исправьте. Сделайте так, чтобы конец конуса был виден на 2–3 мм при взгляде сбоку.

Конечно, такая же процедура используется и при использовании 8-дюймового пэда в качестве малого барабана.

Шаг 6:8-дюймовая подушка для ударов

Сначала отрежьте трубу из нержавеющей стали диаметром 13 мм.

Сделайте два 200 мм и два 365 мм.

Так как длину можно отрегулировать, даже если есть ошибка в длине, все в порядке.

Соберите их со ссылкой на картинки.

Чтобы закрепить трубу, она сконструирована так, чтобы гайку M3 можно было нагружать внутри детали.

Надежно закрепите трубу. Используйте болты и гайки M3-15 мм.

Шаг 7. 12-дюймовый хай-хет

Изготовив оболочку из плотной бумаги, я подумал, что если использовать плотную бумагу, я могу сделать тарелки.

Первый. Из плотной бумаги нарежьте круг диаметром 300 мм. Сделайте три таких штуки.

Далее сделайте выемку из центра.

Наконец, делается вторая выемка от точки на расстоянии 10 мм параллельно первой выемке.

Таким образом изготавливаются три пакмана с маленьким открытым ртом.

Затем осторожно закройте рот Pac Man липкой лентой, чтобы он принял форму тарелки.

Нанесите клей и наложите его. Не забудьте растянуть клей чисто и тонко

Крепко возьмитесь руками, затем поместите гирю и просушите.

Для глушителя положите губку толщиной 5 мм и просверлите отверстие. Вы не можете открыть отверстие аккуратно, но можете скрыть отверстие, так что все в порядке.

Завершается прикреплением держателя датчика и кабельной направляющей с помощью двустороннего скотча. Будет проще, если вы воспользуетесь клеевым пистолетом.

Шаг 8:Контроллер хай-хэта

Контроллер хай-хэта отправляет информацию об открытии и закрытии хай-хэта на Arduino.

Схема очень простая.

Он состоит из трех частей.

Присоедините FSR к нижней части и закрепите розетку. FSR можно использовать, даже если отверстие открыто.

Прикрепите к FSR губку 10 мм, как на фото.

Закрепите крышку болтами М3 - 10 мм.

Несмотря на то, что он только ВЫСОКИЙ и НИЗКИЙ, вы можете задаться вопросом, почему я использовал FSR.

Я использую FSR для соответствия звуковым модулям, таким как Roland и Yamaha.

А в источнике звука, эксклюзивном для ударных, таком как EZ DRUMMER 2, есть несколько стадий открытия хай-хэта.

Если это FSR, возможно, можно будет ответить, просто изменив код. Однако я не пробовал.

Шаг 9:USB - MIDI

Что мы можем сделать на этом этапе?

Используя только USB-кабель, вы можете отправлять MIDI-сигнал от Arduino.

Другими словами, сделайте так, чтобы ардуино распознавалось iPhone и т. Д. Как миди-устройство без какого-либо дополнительного оборудования.

Прежде всего, проверьте эту страницу.

http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/

https://github.com/kuwatay/mocolufa

Если вы подключите обычный Arduino UNO напрямую к iPhone, вы получите сообщение об ошибке типа «Arduino UNO несовместима».

Итак, вам нужно переписать USB-чип (ATmega16U2), используемый в Arduino UNO.

https://www.arduino.cc/en/Hacking/DFUProgramming8U2

Эта инструкция описывает, как переписать шестнадцатеричный файл.

Продолжайте в соответствии с этим сайтом до описания ниже.

sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex

Просто замените «Arduino-usbserial-uno.hex» на «dualMoco.hex».

Поэтому

sudo dfu-programmer atmega16u2 flash dualMoco.hex

После перезаписи ваш Arduino будет распознан как MIDI-устройство.

Если вы закоротите контакт, как показано на рисунке, он будет распознан как нормальный Arduino.

В противном случае (при отсутствии короткого замыкания) arduino UNO будет распознан как MIDI-устройство.

Другими словами, при написании кода с использованием Arduino IDE вы должны закоротить контакты, как показано на рисунке.

Шаг 10:Триггер в конвертер MIDI

В коробке есть arduino UNO и шилд.

См. Изображение фритзинга для схемы экрана.

Диоды предназначены для защиты, но я видел информацию о том, что у Arduino UNO есть схема защиты, диоды могут не понадобиться. Кто-нибудь знает об этом?

После распечатки модели корпуса и крышки, хорошо бы сделать щит по ней.

Также есть 3D модель крышки, но я сделал крышку лазерным резаком. Пожалуйста, выберите то, что вам нравится.

Шаг 11. Играйте с GarageBand

Просто запустите гаражный бэнд и подключитесь. Нет особо сложной настройки.

Есть несколько DAW для ПК, которые можно использовать с этой ударной установкой, в том числе GarageBand.

Среди них можно бесплатно добавить Hydrogen, и вы можете добавить звук.

Шаг 12. Настройка

При создании кода было сложно переписывать код каждый раз при изменении значения, поэтому я хотел иметь возможность изменять значение только с помощью Arduino.

Другими словами, это сделано для отладки кода, поэтому есть элементы, которые не нужно изменять.

Тем не менее, настройка необходима в зависимости от размера пьезоэлемента, размера подушечки и твердости губчатого вспененного материала.

Выберите инструмент с помощью кнопки INC / DEC и выберите параметр настройки с помощью кнопки NEXT / BACK. При нажатии кнопки EDIT во время отображения инструментов и элементов, которые вы хотите установить, вы можете изменить значение с помощью кнопки INC / DEC. Затем повторное нажатие кнопки EDIT подтверждает изменение.

Если вы посмотрите последнюю часть видео, вы поймете, как действовать.

ПОРОГ

Наименьшее значение, при котором выходит звук

ЧУВСТВИТЕЛЬНОСТЬ

Чувствительность сенсора. Если вы его уменьшите, вы получите большую скорость, даже если вы будете мягко бить.

ПРИМЕЧАНИЕ

Номер заметки. Меняя, вы можете менять инструменты. См. Изображение.

ФЛАГ

Значение для оценки того, что избиение окончено. Вам не нужно слишком сильно его менять. Было бы неплохо установить значение от 1 до 10. Если вы увеличите значение слишком сильно, вы получите звук дважды при одном ударе. Если вы снизите его слишком сильно, вы можете потерять звук при повторных ударах.

ВРЕМЯ ПРОВЕРКИ

При поиске пиков значения берутся последовательно в течение нескольких миллисекунд после превышения порога. Самое высокое значение среди них будет пиковым. Эти несколько миллисекунд - SCANTIME. Его не нужно менять.

ГОЛОВА / ОБОД

Установите легкость обода. Повышение его затрудняет звучание. Если вы опустите его слишком сильно, обод будет звучать при ударе головой. Что касается оценки головы и обода, возможно, потребуется улучшить код

ПЕДАЛЬ ВЕЛО

В отличие от других пэдов, скорость педали постоянна. Начальное значение - 100. Измените на ваше любимое значение.

ВРЕМЯ МАСКИ

Это значение, связанное с FLAG. Менять его не нужно. Если вы поднимете его, вы можете не услышать звука при постоянном ударе.

Шаг 13:Fusion 360

Некоторые детали могут быть непригодны для использования, если их размеры не будут изменены. Редактировать данные STL сложно. Итак, я загрузил данные Fusion 360. Однако, поскольку я редактирую данные методом проб и ошибок, лучше не слишком полагаться на функцию истории.

https://github.com/RyoKosaka/drums/tree/master/Fusion360

ДОПОЛНИТЕЛЬНО

Дополнительные шаги указаны в инструкциях.

https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/

И подробный производственный процесс опубликован в этом блоге.

Проверьте это, если вам интересно.

Не стесняйтесь спрашивать о чем угодно.

Удачи!

Код

  • Hello Drum, версия 2
Hello Drum v2 Arduino
Изменено:12.05.2019 Джорджем Братстоном
 / * MIDI-контроллер ударных Создано:28.06.2017 Рио Косака как "HELLO DRUM" Ver.1.0 Изменено:05.12.2019 Джорджем Братстоном * /// Библиотека включает // #include  // Библиотека Arduino (включается автоматически) // НИЗКИЙ (строка 41) // ВЫСОКИЙ (строка 40) // INPUT_PULLUP (строка 47) // digitalRead () (строка 177) / / analogRead () (Строка 178) #include  // Библиотека MIDI - Версия:4.3.1 // включает  // класс MIDI (Строка 30) // метод класса 'begin' (Строка 55) #include  // LiquidCrystal - версия:1.0.7 // объект ЖКД создан (в разделе переменных ниже) из класса LiquidCrystal (строка 45) // переменные - объявить и инициализировать // переменные - программа boolean bSnareFlag =ложь; логическое bHihatFlag =false; логическое bKickFlag =false; логическое bPedalFlag =false; логическое bButtonState =true; логическое bButtonState_set =true; int iUPDOWN =0; int iNEXTBACK =0; // Массивы - Программа // InstrumentSensor [6] ={порог, чувствительность, примечание, флаг, скорость, iPeakValue} // 'iPeakValue' и 'velocity' должны быть равны нулю для всех массивов InstrumentSensor // Все 'aHIHAT []' и Элементы массива 'aHIHAT_CLOSE []' должны иметь то же значение, за исключением элемента 'note'. int aSNARE [6] ={150, 950, 38, 3, 0, 0}; int aSNARE_RIM [6] ={5, 500, 37, 3, 0, 0}; int aHIHAT [6] ={100, 800, 46, 1, 0, 0}; int aHIHAT_CLOSE [6] ={100, 800, 42, 1, 0, 0}; int aKICK [6] ={200, 700, 36, 1, 0, 0}; // Instrument_ContinuousController [4] ={время сканирования, малый барабан / обод, pedalVelocity, masktime} int aHIHAT_PEDAL [4] ={600, 0, 44, 0}; // InstrumentSensor_ParameterValue [4] ={порог, чувствительность, примечание, флаг} int aSETTING [4] ={4, 500, 100, 1}; // Библиотеки // LiquidCrystal.h // Константы (уже определенные в библиотеке, все еще в области действия? Если нет, то определите ниже) // const int rs =12, en =11, d4 =5, d5 =4, d6 =3 , d7 =2; // объект ЖК-дисплея, созданный из класса LiquidCrystal (LiquidCrystal.h, строка 45) LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // Связываем выводы ЖК-интерфейса с соответствующим номером вывода Arduino // MIDI.h // Инициализируем библиотеку MIDI_CREATE_DEFAULT_INSTANCE (); // Программный код // Выполнение программы - Начальная (настройка программы) void setup () {MIDI.begin (10); // begin (MIDI.h, строка 55) lcd.begin (16, 2); // begin (LiquidCrystal.h Строка 62) lcd.print ("ИНИЦИАЛИЗАЦИЯ ..."); // печать (LiquidCrystal.h, строка 45) lcd.setCursor (0, 1); // setCursor (LiquidCrystal.h, строка 82) lcd.print ("МИДИ КОНТРОЛЛЕР БАРАБАНА"); pinMode (6, INPUT_PULLUP); // pinMode (Arduino.h Line 175); INPUT_PULLUP (Arduino.h, строка 47) pinMode (7, INPUT_PULLUP); pinMode (8, INPUT_PULLUP); pinMode (9, INPUT_PULLUP); pinMode (10, INPUT_PULLUP); } // Выполнение программы - стабильное состояние (непрерывный цикл до отключения питания) void loop () {// Схема MIDI-контроллера барабана // Объявление и инициализация переменных int iButton_set =digitalRead (6); // Установить кнопку // digitalRead () (Arduino.h, строка 177) int iButton_up =digitalRead (7); // Кнопка вверх int iButton_down =digitalRead (8); // Кнопка вниз int iButton_next =digitalRead (9); // Кнопка "Далее" int iButton_back =digitalRead (10); // Кнопка возврата int iPiezoValue_A0 =analogRead (A0); // Пьезо - малый барабан // analogRead () (Arduino.h, строка 178) int iPiezoValue_A1 =analogRead (A1); // Пьезо - обод малого барабана int iPiezoValue_A2 =analogRead (A2); // Хай-хет int iPiezoValue_A3 =analogRead (A3); // Удар барабана int iFSRValue_A4 =analogRead (A4); // Педаль хай-хэта // Режим редактирования int aUP [4] ={5, 50, 1,1}; // {порог, чувствительность, примечание, флаг} int aUP_ADVANCE [4] ={1, 50, 1,1}; // {время сканирования, обод / головка, скорость педали, время маски} // Примечание:массив aINSTRUMENT [] не был объявлен в 'Arrays' выше char * aINSTRUMENT [] ={"SNARE HEAD", "SNARE RIM", "HIHAT OPEN "," HIHAT CLOSE "," HIHAT PEDAL "," KICK "," ADVANCED SETTING "}; // Примечание:массив aSETTING [] БЫЛ объявлен в 'Arrays' выше char * aSETTING [] ={"ПОРОГ", "ЧУВСТВИТЕЛЬНОСТЬ", "ПРИМЕЧАНИЕ", "ФЛАГ"}; // Примечание:aSETTING_ADVANCE [] не был объявлен в 'Arrays' выше char * aSETTING_ADVANCE [] ={"SCAN TIME", "HEAD / RIM", "PEDAL VELO", "MASK TIME"}; если (iUPDOWN <0) {iUPDOWN =6; } если (iUPDOWN> 6) {iUPDOWN =0; } если (iNEXTBACK <0) {iNEXTBACK =3; } если (iNEXTBACK> 3) {iNEXTBACK =0; } // Кнопка EDIT // LOW (Arduino.h, строка 41) if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==true) {lcd.clear (); lcd.print («РЕДАКТИРОВАТЬ»); bButtonState =false; bButtonState_set =ложь; задержка (500); } если (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==false) {lcd.clear (); lcd.print ("РЕДАКТИРОВАНИЕ ВЫПОЛНЕНО"); bButtonState =false; bButtonState_set =true; задержка (500); } if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==false) {переключатель (iUPDOWN) {case 0:aSNARE [iNEXTBACK] =aSNARE [iNEXTBACK] + aUP [iNEXTBACK]; ломать; случай 1:aSNARE_RIM [iNEXTBACK] =aSNARE_RIM [iNEXTBACK] + aUP [iNEXTBACK]; ломать; case 2:переключатель (iNEXTBACK) {case 2:aHIHAT [iNEXTBACK] =aHIHAT [iNEXTBACK] + aUP [iNEXTBACK]; ломать; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } break; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; ломать; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } break; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; ломать; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; ломать; } break; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] + aUP[iNEXTBACK]; ломать; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; ломать; } bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; ломать; case 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] - aUP[iNEXTBACK]; ломать; case 2:switch (iNEXTBACK) { case 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; ломать; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } break; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; ломать; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } break; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; ломать; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; ломать; } break; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] - aUP[iNEXTBACK]; ломать; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; ломать; } bButtonState =false; delay(30); } // Pushbuttons UP; DOWN; NEXT; BACK if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =++iUPDOWN; bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =--iUPDOWN; bButtonState =false; delay(30); } if (iButton_next ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =++iNEXTBACK; bButtonState =false; delay(30); } if (iButton_back ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =--iNEXTBACK; bButtonState =false; delay(30); } if (bButtonState ==false &&iButton_up ==HIGH &&iButton_down ==HIGH &&iButton_next ==HIGH &&iButton_back ==HIGH &&iButton_set ==HIGH) { // HIGH is defined in Arduino.h Line 40 switch (iUPDOWN) { case 0:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE[iNEXTBACK]); ломать; case 1:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE_RIM[iNEXTBACK]); ломать; case 2:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); ломать; case 3:lcd.clear();lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_CLOSE[iNEXTBACK]); ломать; case 4:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_PEDAL[iNEXTBACK]); ломать; case 5:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); ломать; case 6:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING_ADVANCE[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSETTING[iNEXTBACK]); ломать; } bButtonState =true; } // Instrument Sensors // Snare Drum if (iPiezoValue_A0> aSNARE[0] &&bSnareFlag ==false) { for (int i =0; i  aSNARE[4]) { aSNARE[4] =iPeak_A0; } if (iPeak_A1> aSNARE_RIM[4]) { aSNARE_RIM[4] =iPeak_A1; } } aSNARE[5] =aSNARE[4]; aSNARE_RIM[5] =aSNARE_RIM[4]; aSNARE[4] =map(aSNARE[4], aSNARE[0], aSNARE[1], 0, 127); aSNARE_RIM[4] =map(aSNARE_RIM[4], aSNARE_RIM[0], aSNARE_RIM[1], 0, 127); aSNARE[4] =(aSNARE[4] * aSNARE[4]) / 127; // Curve setting //aSNARE_RIM[4] =(aSNARE_RIM[4] * aSNARE_RIM[4]) / 127; if (aSNARE[4] <=1) { aSNARE[4] =1; } if (aSNARE[4]> 127) { aSNARE[4] =127; } if (aSNARE_RIM[4] <=0) { aSNARE_RIM[4] =0; } if (aSNARE_RIM[4]> 127) { aSNARE_RIM[4] =127; } if (aSNARE_RIM[5]> aSETTING[1]) { MIDI.sendNoteOn(aSNARE_RIM[2], aSNARE_RIM[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE_RIM[2], 0, 1); lcd.clear(); lcd.print("SNARE RIM"); lcd.setCursor(0, 1); lcd.print(aSNARE_RIM[4]); bSnareFlag =true; } //else if (aSNARE[5]> aSNARE_RIM[5]) else { MIDI.sendNoteOn(aSNARE[2], aSNARE[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE[2], 0, 1); lcd.clear(); lcd.print("SNARE HEAD"); lcd.setCursor(0, 1); lcd.print(aSNARE[4]); //lcd.setCursor(10, 1); //lcd.print(aSNARE_RIM[5]); bSnareFlag =true; } } // Hi-Hat Cymbal if (iPiezoValue_A2> aHIHAT[0] &&bHihatFlag ==false) { for (int i =0; i  aHIHAT[4]) { aHIHAT[4] =iPeak_A2; } } aHIHAT[5] =aHIHAT[4]; aHIHAT[4] =map(aHIHAT[4], aHIHAT[0], aHIHAT[1], 0, 127); aHIHAT[4] =(aHIHAT[4] * aHIHAT[4]) / 127; if (aHIHAT[4] <=1) { aHIHAT[4] =1; } if (aHIHAT[4]> 127) { aHIHAT[4] =127; } if (iPiezoValue_A0 =aHIHAT_PEDAL[0]) { MIDI.sendNoteOn(aHIHAT_CLOSE[2], aHIHAT[4], 1); MIDI.sendNoteOn(aHIHAT_CLOSE[2], 0, 1); lcd.clear(); lcd.print("HIHAT CLOSE"); lcd.setCursor(0, 1); lcd.print(aHIHAT[4]); bHihatFlag =true; } } // Hi-hat Pedal if (iPiezoValue_A0> aHIHAT_PEDAL[0] &&bPedalFlag ==false) { MIDI.sendNoteOn(aHIHAT_PEDAL[2], aSETTING[2], 1); // (note, velocity, channel) MIDI.sendNoteOn(aHIHAT_PEDAL[2], 0, 1); lcd.clear(); lcd.print("HIHAT PEDAL"); lcd.setCursor(0, 1); lcd.print(aSETTING[2]); bPedalFlag =true; } // Kick Drum if (iPiezoValue_A3> aKICK[0] &&bKickFlag ==false) { for (int i =0; i  aKICK[4]) { aKICK[4] =iPeak_A3; } } aKICK[5] =aKICK[4]; aKICK[4] =map(aKICK[4], aKICK[0], aKICK[1], 0, 127); aKICK[4] =(aKICK[4] * aKICK[4]) / 127; if (aKICK[4] <=1) { aKICK[4] =1; } if (aKICK[4]> 127) { aKICK[4] =127; } MIDI.sendNoteOn(aKICK[2], aKICK[4], 1); MIDI.sendNoteOn(aKICK[2], 0, 1); lcd.clear(); lcd.print("KICK"); lcd.setCursor(0, 1); lcd.print(aKICK[4]); bKickFlag =true; }// --- BEGIN 'Code in Progress' --- //// --- I could be wrong, but this is what it appears to be --- and out of curiousity what is purpose of this sequence? -- // // I=(A0); // Previous Code // -- DOES iSensorValue_A0 need to be declared as an integer? How does this relate to iPiezoValue_A0? -- // if (iSensorValue_A0 <(aSNARE[5] * (0.01 * aSNARE[3]))) { bSnareFlag =false; } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); // iSensorValue_A1 is reading analogRead(A2), but this is aHIHAT_PEDAL (which is analogRead(A2) int iSensorValue_A1 =analogRead(A2); if (iSensorValue_A1 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A0>=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] *(0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); int iSensorValue_A2 =analogRead(A2); if (iSensorValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3])) &&bKickFlag ==true) { delay(aSETTING[3]); // -- Should declared iSensorValue_A3 be iPiezoValue_A3? iSensorValue_A3 is declared but not used anywhere?? int iSensorValue_A3 =analogRead(A3); if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3]))) { bKickFlag =false; } } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&bPedalFlag ==true) { bPedalFlag =false; }// --- END 'Code in Progress' --- // }
Hello Drum

Схема

circuit_nZotR7rJMM.fzz

Производственный процесс

  1. Барабан
  2. Китайские хирурги создают титановые кости на 3D-принтере
  3. Конструкторский комплект для измерения артериального давления с помощью оптического датчика
  4. Как подключить печать GrabCAD к вашему 3D-принтеру Stratasys
  5. Что можно сделать с помощью 3D-принтера?
  6. Удовольствие от гироскопа с кольцом NeoPixel
  7. Костюм облака
  8. Unopad - MIDI-контроллер Arduino с Ableton
  9. Простой датчик препятствий с Arduino
  10. Распознавание и синтез речи с помощью Arduino