I created a 3 channel midi controller using Arduino micro. I got help from chatgpt in the code section. But there is a problem. The platform where I placed the Arduino is an old footswitch. The buttons of this pedal work as toggle. It is not momentary .
The problem is that when I press a button twice, I can only switch between channels. I could not solve this problem. Can you help me?
the clone i use
The code I use
#include <MIDIUSB.h>
// Buton ve LED Pinleri
const int buttonPins[3] = {2, 3, 4};
const int ledPins[3] = {5, 6, 7}; // LED pinlerini belirledik
bool lastButtonState[3] = {HIGH, HIGH, HIGH};
bool buttonPressed[3] = {false, false, false};
// MIDI Program Change Numaraları (Amplitube preset numaraları)
const byte presetNumbers[3] = {0, 1, 2}; // Amplitube Preset 1, 2 ve 3
int activePreset = -1;
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
pinMode(ledPins[i], OUTPUT); // LED pinlerini çıkış olarak belirledik
digitalWrite(ledPins[i], LOW); // Başlangıçta tüm LED'leri söndürdük
}
}
void loop() {
for (int i = 0; i < 3; i++) {
int buttonState = digitalRead(buttonPins[i]);
// Butona basıldığında
if (buttonState == LOW && lastButtonState[i] == HIGH && !buttonPressed[i]) {
delay(50); // Debounce zaman aralığı
if (digitalRead(buttonPins[i]) == LOW) {
changePreset(i);
buttonPressed[i] = true;
}
}
// Buton bırakıldığında
if (buttonState == HIGH && lastButtonState[i] == LOW) {
buttonPressed[i] = false;
}
lastButtonState[i] = buttonState;
}
}
// MIDI Preset Değiştirme
void changePreset(int newPreset) {
if (activePreset != newPreset) {
if (activePreset != -1) {
digitalWrite(ledPins[activePreset], LOW); // Mevcut aktif LED'i söndür
}
sendMIDIProgramChange(presetNumbers[newPreset]);
digitalWrite(ledPins[newPreset], HIGH); // Yeni aktif LED'i yak
activePreset = newPreset;
}
}
// MIDI Program Change Mesajı Gönderme
void sendMIDIProgramChange(byte program) {
midiEventPacket_t midiMessage = {0x0C, 0xC0, program, 0};
MidiUSB.sendMIDI(midiMessage);
MidiUSB.flush();
}