Код для емкостной сенсорной клавиатуры с 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 входами каждый)

Итак, о чем я прошу помощи, так это о следующем:

Как объединить код для библиотеки емкостных датчиков с:

  1. Как настроить 6 Arduino для сбора данных CapSense.
  2. Как с помощью этих данных отправлять MIDI-ноты для управления синтезатором, который будет работать на 7-м Arduino, когда значение, выдаваемое емкостным датчиком, превышает определенное число.

Заранее спасибо и извините за беспорядочное описание моей проблемы, я все еще пытаюсь разобраться во всем этом!

, 👍0

Обсуждение

протестируйте свой код со всеми входными данными, а не только с тремя, @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