[SOLUCIONADO]Repeticion de mensaje en programacion MIDI

Buen dia a todos

Mi problema es el siguiente, estoy haciendo un proyecto para un MIDI foot controller para usarse en programas como bias fx o guitar rig y cuando intento probar la señal en MIDIBerry o pocketMIDI el mensaje de salida se repite infinitamente.

Estoy usando un arduino leonardo con unos switches 3PDT
adjunto codigo

#include <MIDIUSB.h>



int estadoboton = 0;
const int boton = 3;
 int estadoBoton;
 int estadoBotonAnterior;
 

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
  MidiUSB.flush();
}

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
  MidiUSB.flush();
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
  MidiUSB.flush();
}





void setup() {
  // put your setup code here, to run once:
  Serial.begin(31250);
pinMode(boton, INPUT_PULLUP);
}
void loop() {
  // put your main code here, to run repeatedly:
  estadoboton = digitalRead(boton);
if(estadoboton != estadoBotonAnterior){
controlChange(0, 5, 127);
}
else{
  controlChange(0, 5, (byte)0x00);
}
  estadoBotonAnterior=estadoBoton;
}

asi se veria en pocketMIDI

B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 00
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F
B0 05 7F

¿Hay alguna solución?

Un cordial saludo.

No se si te comprendo bien porque no conozco que hace la librería MIDIUSB pero esto podría resolver tu problema

void loop() {
    
    // put your main code here, to run repeatedly:
    estadoboton = digitalRead(boton);
    if (estadoboton && !estadoBotonAnterior){ // envia 0,5,127 cuando cambia de 1 a 0
        controlChange(0, 5, 127);
    }
    if (!estadoboton && estadoBotonAnterior){{// envia 0 5 0 cuando cambia de 0 a 1
         controlChange(0, 5, (byte)0x00);
    }
    estadoBotonAnterior = estadoBoton;
}

Hola

gracias por la respuesta surbyte probe el codigo y sigue mandando erro en el mensaje final, pero actualmente ya logre una solucion para este

dejare la programacion que estoy usando por si a alguien mas le sirve actualmente la estoy usando en Bias FX para prender y apagar pedales y/o cambiar el preset

#include <MIDIUSB.h>




bool estadoBoton, estadoBotonAnt = false;
bool estadoBoton2, estadoBotonAnt2 = false;
bool estadoBoton3, estadoBotonAnt3 = false;
bool estadoBoton4, estadoBotonAnt4 = false;

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
  MidiUSB.flush();
}

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
  MidiUSB.flush();
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
  MidiUSB.flush();
}





void setup() {
  // put your setup code here, to run once:
  Serial.begin(31250);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
}


void botonuno(){
  // put your main code here, to run repeatedly:
  estadoBoton = digitalRead(5); 
if(estadoBoton == HIGH && estadoBotonAnt == LOW){
controlChange(0, 5, 127);
delay(100);
}else{
if (estadoBoton == LOW && estadoBotonAnt == HIGH){
controlChange(0, 5, (byte)0x00);
  delay(100);
}
  
}
  
 estadoBotonAnt=estadoBoton;           
}
void botondos(){
  // put your main code here, to run repeatedly:
  estadoBoton2 = digitalRead(4); 
if(estadoBoton2 == HIGH && estadoBotonAnt2 == LOW){
controlChange(0, 6, 127);
delay(100);
}else{
if (estadoBoton2 == LOW && estadoBotonAnt2 == HIGH){
controlChange(0, 6, (byte)0x00);
  delay(100);
}
  
}
  
 estadoBotonAnt2 =estadoBoton2;  
}
void botontres(){
   // put your main code here, to run repeatedly:
  estadoBoton3 = digitalRead(3); 
if(estadoBoton3 == HIGH && estadoBotonAnt3 == LOW){
controlChange(0, 7, 127);
delay(100);
}else{
if (estadoBoton3 == LOW && estadoBotonAnt3 == HIGH){
controlChange(0, 7, (byte)0x00);
  delay(100);
}
  
}
  
 estadoBotonAnt3 =estadoBoton3;  
}
void botoncuatro(){
   // put your main code here, to run repeatedly:
  estadoBoton4 = digitalRead(2); 
if(estadoBoton4 == HIGH && estadoBotonAnt4 == LOW){
controlChange(0, 8, 127);
delay(100);
}else{
if (estadoBoton4 == LOW && estadoBotonAnt4 == HIGH){
controlChange(0, 8, (byte)0x00);
  delay(100);
}
  
}
  
 estadoBotonAnt4 =estadoBoton4;  
}

void loop() {
    
  botonuno();
 botondos();
 botontres();
 botoncuatro();

}

si alguien tiene alguna duda que no dude en preguntar

Saludos cordiales.