Как добавить индикаторы на скетч кнопки

Я хотел бы добавить светодиоды к каждому кнопочному переключателю в первом коде. Первый код отправляет миди-сообщения в DAW. Я хотел бы, чтобы он также включал светодиод в качестве светового индикатора. Выключатель должен включать свет, если он выключен, и выключать, если он включен. Второй код является примером, который делает это, он хорошо работает с одной кнопкой. Я хотел бы иметь 3 кнопки на контактах 0, 1, 2 и светодиоды на контактах 3, 4 и 5.

#include <Bounce.h>

const int channel = 1;
Bounce button0 = Bounce(0, 5);
Bounce button1 = Bounce(1, 5);  
Bounce button2 = Bounce(2, 5);  

void setup() {
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
}
void loop() {
  button0.update();
  button1.update();
  button2.update();

  if (button0.fallingEdge()) {
    usbMIDI.sendNoteOn(60, 99, channel);  // 60 = C4 
  }
  if (button1.fallingEdge()) {
    usbMIDI.sendNoteOn(61, 99, channel);  // 61 = C#4
  }
  if (button2.fallingEdge()) {
    usbMIDI.sendNoteOn(62, 99, channel);  // 62 = D4
  }

  if (button0.risingEdge()) {
    usbMIDI.sendNoteOff(60, 0, channel);// 60 = C4
  }
  if (button1.risingEdge()) {
    usbMIDI.sendNoteOff(61, 0, channel);  // 61 = C#4
  }
  if (button2.risingEdge()) {
    usbMIDI.sendNoteOff(62, 0, channel);  // 62 = D4
  }
  while (usbMIDI.read()) {
  }
}

Второй набросок:

/*********************
Simple toggle switch
Created by: P.Agiakatsikas
*********************/

int button = 0;
int led = 13;
int status = false;

void setup(){
  pinMode(led, OUTPUT);
  pinMode(button, INPUT_PULLUP); // устанавливаем внутренний подтягивающий резистор, ненажатая кнопка имеет высокий уровень
}

void loop(){
//a) если кнопка не нажата, ложное состояние меняется на противоположное с помощью !status и загорается светодиод
//b) если кнопка нажата, истинное состояние изменяется на !status и светодиод гаснет

if (digitalRead(button) == true) {
  status = !status;
  digitalWrite(led, status);
} while(digitalRead(button) == true);
  delay(50); // сохраняем небольшую задержку
}

, 👍0

Обсуждение

Ваш код «Простой тумблер» включает/выключает состояние кнопки при каждом нажатии кнопки. Ваш MIDI-скетч больше похож на клавишу органа, где нота воспроизводится, пока клавиша удерживается нажатой, и перестает играть, когда кнопку отпускают. Вы хотите, чтобы светодиоды включались/выключались при каждом нажатии кнопки, даже если MIDI-нота ведет себя иначе?, @Duncan C

Это не сервис по написанию кода. Вы должны попытаться отредактировать свой код самостоятельно и задать вопросы, если у вас возникнут проблемы., @Duncan C

Миди-скетч используется для включения и выключения вещей, а не для воспроизведения нот, я не знаю почему, но это единственный работающий скетч, который я нашел. Я пытался включить/выключить заметку на сообщения копии, но это не работает. Миди-скетч включит параметр в Ableton (например) функцию записи, и он останется включенным до повторного нажатия. именно для этого мне и нужен свет. Я не прошу никого писать для меня полный код. Просто пример того, как это сделать., @edrummer


1 ответ


1

Я бы предложил создать массив структур MIDI-кнопок. Для каждой записи у вас будет объект кнопки, светодиодный вывод и BOOL для отслеживания состояния этой кнопки.

Напишите функцию, которая перебирает массив структур, проверяет состояние каждой из них и выполняет работу по воспроизведению/остановке нот и переключению состояний светодиодов в зависимости от состояния каждой кнопки.

,