Код для емкостной сенсорной клавиатуры с 88 клавишами для управления синтезатором Arduino
Я создаю сенсорную клавиатуру в качестве школьного проекта для управления библиотекой цифровых синтезаторов на Arduino. Я полный новичок, когда дело доходит до программирования, и только начал разбираться в этом.
Я довольно много читал, и вот решение, которое, я думаю, сработает:
Это синтезаторная библиотека, которой я хочу управлять:
https://github.com/dzlonline/the_synth
88 клавиш потребуют параллельного подключения 6 Arduino Nanos, взаимодействующих друг с другом с помощью I2C.
Мастер Arduino отправит MIDI на синтезатор, используя пример MIDI_synth.ino для запуска синтезатора. (https://github.com/dzlonline/the_synth/tree/master/examples/MIDI_synth)
Некоторое объяснение приведенного выше предложения:
Я написал и попробовал этот код на одном Arduino Nano с тремя емкостными сенсорными входами и проецировал исходящие данные на последовательный монитор, чтобы понять и посмотреть, работает ли код:
// сенсорный датчик
#include <CapacitiveSensor.h>
// конфигурация сенсорного датчика
CapacitiveSensor capSensor1 = CapacitiveSensor(2, 3);
CapacitiveSensor capSensor2 = CapacitiveSensor(2, 4);
CapacitiveSensor capSensor3 = CapacitiveSensor(2, 5);
void setup() {
Serial.begin(115200);
}
void loop() {
long sensorValue1 = capSensor1.capacitiveSensor(30);
long sensorValue2 = capSensor2.capacitiveSensor(30);
long sensorValue3 = capSensor3.capacitiveSensor(30);
Serial.println(sensorValue1);
Serial.println(sensorValue2);
Serial.println(sensorValue3);
delay(500);
}
Затем я думаю, что можно было бы использовать входные данные D0-D17 (с одним общим выводом между точками касания), поправьте меня, если я здесь ошибаюсь. И контакты A4 (D18) и A5 (D19) будут использоваться для I2C, чтобы наносистемы могли взаимодействовать друг с другом, используя этот метод:
https://docs.arduino.cc/tutorials/nano-every/I2C
(Я не знаю, имеет ли это значение, поскольку это руководство предназначено для плат Nano Every, а мое - нет.)
Поскольку я использую 88 клавиш (и поскольку я, по сути, хочу расширить один Arduino Nano с помощью большего количества емкостных сенсорных входов), я полагаю, что для этого потребуется 6 Arduino Nanos в соответствии с этой распиновкой:
https://i.stack.imgur.com/0aOOM.png
(У меня есть куча китайских нано-клонов, поэтому было бы наиболее экономически эффективным использовать их вместо, скажем, 8 Adafruit MPR121s с 12 входами каждый)
Итак, о чем я прошу помощи, так это о следующем:
Как объединить код для библиотеки емкостных датчиков с:
- Как настроить 6 Arduino для сбора данных CapSense.
- Как с помощью этих данных отправлять MIDI-ноты для управления синтезатором, который будет работать на 7-м Arduino, когда значение, выдаваемое емкостным датчиком, превышает определенное число.
Заранее спасибо и извините за беспорядочное описание моей проблемы, я все еще пытаюсь разобраться во всем этом!
@neomorph, 👍0
Обсуждение0
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отправить строку на мастер с помощью i2c
- Как выбрать альтернативные контакты I2C на ESP32?
- Что означает в I2C «NACK получен»?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Несколько датчиков I2C с одинаковым адресом
протестируйте свой код со всеми входными данными, а не только с тремя, @jsotola
"Я придумал один проект. Чтобы достичь этого, я думаю, мне нужно сделать A и B. Можете ли вы сказать мне, как сделать A и B? " - вы видите здесь проблему ...?, @Majenko
Лично я бы не стал использовать I2C для этого. Я бы использовал UART и последовательно соединял устройства вместе (TX одного переходит в RX другого) и передавал данные. Я бы придумал самый простой протокол, какой только мог (возможно, однобайтовый, поскольку 88 ключей умещаются более чем в два раза в байте), имеющий старший бит в качестве индикатора "примечание включено / выключено"., @Majenko
Проблема с I2C заключается в том, что это протокол master / slave, в котором ведущему Arduino придется опрашивать все подчиненные Arduino на предмет состояний заметок. Что было бы ужасно. С помощью UART вы можете просто отправлять изменения заметок в тот момент, когда они происходят., @Majenko
Это звучит как лучшее решение для этого проекта. Сейчас я просматривал протоколы UART и не совсем понимаю, как разные платы будут отправлять разные заметки? Я имею в виду, как, например, вывод 18 на плате no1 отличается от вывода 18 на плате no2? Должен ли я переименовывать контакты на каждой плате, чтобы у них не было, так сказать, одинаковой метки?, @neomorph
Вы не заботитесь о выводах. Ты заботишься о метках. Вывод 18 на одной плате может быть E5, но G7 на другой плате. Управление должно знать, какие метки к нему подключены., @Majenko
Итак, нужно ли мне каким-либо образом преобразовать MIDI-информацию, чтобы она была отправлена по последовательному каналу на Arduino, который отправляет MIDI-сигнал на синтезатор? Или это работает автоматически, когда Arduino, которые отправляют MIDI-ноты, и Arduino, выступающий в качестве синтезатора, находятся в одной и той же цепочке UART / Serial daisy-chain?, @neomorph