Problema MIDI - hairless-midiserial (windows)

Salve, ho trovato un esempio di codice e l’ho modificato in questo modo:

#include <MIDI.h>

MIDI_CREATE_INSTANCE(HardwareSerial, Serial, midiOut);

// ========================  Led  ==================================//
int led = 8;

// ========================  Channel  ==================================//
const byte channel = 1;
// ======================== Buttons ==================================//
const int nButtons = 5;               // Number of buttons
const int pinButtons[nButtons] = {2}; // Buttons pins
int flag[nButtons] = {};              // Flag to see if the button was pressed or not
int lastflag[nButtons] = {};      //
//=====================================================================

// =================== Potentiometers / LDRs ================================//
const int nPots = 2;                  // Number of potentiometers
const int potentiometer[nPots] = {0}; // Potentiometers pins: A0 = 0; A1 = 1

byte value[nPots] = {};                // Curent value
byte lastvalue[nPots] = {};            // Last value
//=====================================================================

void setup() {
  //MIDI.begin(1);
  // 115200 hairless MIDI
  Serial.begin(115200);
  for (int i = 0; i < nButtons; i++) {
    pinMode(pinButtons[i], INPUT_PULLUP);
  }
  pinMode(led, OUTPUT);
}

void loop() {

  digitalWrite(led, LOW);

  momentary_Buttons();
  potentiometers();
  ldr();

  delay(100);
}

void dpdt_Buttons() {
  for (int i = 0; i < nButtons; i++) {
    flag[i] = digitalRead(pinButtons[i]);
    if (flag[i] != lastflag[i]) {
      lastflag[i] = flag[i];
      midiOut.sendControlChange(90 + i, 127, 1);
      midiOut.sendControlChange(90 + i, 0, 1);
    }
  }
}

void momentary_Buttons() {
  for (int i = 0; i < nButtons; i++) {
    if (digitalRead(pinButtons[i]) == LOW) {
      midiOut.sendControlChange(90 + i, 127, channel);
      flag[i] = 1;
    } else {
      if (flag[i] == 1 && digitalRead(pinButtons[i]) == HIGH) {
        midiOut.sendControlChange(90 + i, 0, channel);
        flag[i] = 0;
      }
    }
  }
}


void ldr() {
  for (int i = 0; i < nPots; i++) {
    value[i] = 127 - (analogRead(potentiometer[i]) / 8); // 127 is to reverse the function of an LDR
    if (value[i] != lastvalue[i]) {
      lastvalue[i] = value[i];
      midiOut.sendControlChange(1, value[i], channel);
      Serial.write(value[i]);
    }
  }
  delay(10);
}

void potentiometers() {
  for (int i = 0; i < nPots; i++) {

    value[i] = analogRead(potentiometer[i]);
    value[i] = map(value[i], 0, 1023, 0, 127);
    value[i] = constrain(value[i], 0, 127);

    if (value[i] != lastvalue[i]) {
      lastvalue[i] = value[i];
      midiOut.sendControlChange(1, value[i], channel);
      Serial.write(value[i]);
    }
  }
  delay(10);
}

Ma non capisco perché da questi avvisi che vi allego come foto.
Mi sapete dire come risolvere il problema?
Vi allego lo schema anche se lì usa arduino uno, invece io uso arduino mega.

Grazie mille e buona settimana.

Non sapendo cos'hai modificato rispetto al programma originale occorre andare per intuizioni, la prima cosa che vedo è che il programma si aspetta due byte e tu ne invii uno soltanto.
A questo punto credo che tu abbia modificato l'array da int a byte, ma questo sembra non essere corretto pur non conoscendo la libreria MIDI vado ad intuito.
Poi questa riga

value[i] = constrain(value[i], 0, 127);

è superflua già la map prima di garantisce di stare tra 0 e 127.
Non sapendo se sto dicendo una cosa corretta per quanto riguarda il protocollo MIDI per ave un maggior dettaglio essendo un byte puoi usare valori tra 0 e 254 raddoppiano la risoluzione letta dal potenziometro, ma ripeto non so se è lecito per il protocollo usato.

ok, questo è il codice originale :
ma non capisco perché da tanti avvisi ed alcune volte il programma esce in arrestato.

/*************************************************************
  MIDI CONTROLLER

  by Felipe Gomes - 2018

  Version 1.0
 *************************************************************/
#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE ();

// ========================  Led  ==================================//
int led = 8;

// ========================  Channel  ==================================//
byte channel = 1;
// ======================== Buttons ==================================//
const int nButtons = 1;               // Number of buttons
const int pinButtons[nButtons] = {2}; // Buttons pins
int flag[nButtons] = {};              // Flag to see if the button was pressed or not
int lastflag[nButtons] = {};      // 
//=====================================================================

// =================== Potentiometers / LDRs ================================//
const int nPots = 1;                  // Number of potentiometers
const int potentiometer[nPots] = {0}; // Potentiometers pins: A0 = 0; A1 = 1

int value[nPots] = {};                // Curent value 
int lastvalue[nPots] = {};            // Last value
//=====================================================================

void setup() {
  //MIDI.begin(1);
  // 115200 hairless MIDI
  Serial.begin(9600);
  for(int i = 0; i < nButtons; i++){
   pinMode(pinButtons[i], INPUT_PULLUP); 
  }
  pinMode(led, OUTPUT);
}

void loop() { 

  digitalWrite(led, LOW);
  
  momentary_Buttons();
  potentiometers();
  //ldr();
  
  //delay(100);
}

// Use this function if you are using DPDT
void dpdt_Buttons(){
  for(int i = 0; i < nButtons; i++){
    flag[i] = digitalRead(pinButtons[i]);
    if(flag[i] != lastflag[i]){
      lastflag[i] = flag[i];
      MIDI.sendControlChange(90+i,127,1);
      MIDI.sendControlChange(90+i,0,1);
    }
  }
}

// Use this function if you are using push buttons (momentary buttons)
void momentary_Buttons(){
  for(int i = 0; i < nButtons; i++){
    if (digitalRead(pinButtons[i]) == LOW) {
        MIDI.sendControlChange(90+i, 127, channel);
        flag[i] = 1;
    } else {
      if (flag[i] == 1 && digitalRead(pinButtons[i]) == HIGH) {
        MIDI.sendControlChange(90+i, 0, channel);
        flag[i] = 0;
      }   
    } 
  }
}


void ldr(){
  for(int i = 0; i < nPots; i++){
    value[i] = 127-(analogRead(potentiometer[i])/8); // 127 is to reverse the function of an LDR
    if(value[i] != lastvalue[i]){
      lastvalue[i] = value[i];
      MIDI.sendControlChange(1, value[i], channel);
      Serial.write(value[i]); 
    }
  }
  delay(10);
}

void potentiometers(){
  for(int i = 0; i < nPots; i++){
    //value[i] = analogRead(potentiometer[i])/8;
    //value[i] = constrain(value[i], 0, 127);

    value[i] = analogRead(potentiometer[i]);
    value[i] = map(value[i], 0, 1023, 0, 127);
    value[i] = constrain(value[i], 0, 127);
    
    if(value[i] != lastvalue[i]){
      lastvalue[i] = value[i];
      MIDI.sendControlChange(1, value[i], channel);
      Serial.write(value[i]); 
    }
  }
  delay(10);
}

Mi protesti dirmi cosa dovrei cambiare e far funzionare… tipo ho

4 button → 2 , 3 , 4, 5
2 Potenziometri → A0 , A1
3 Ldr → in A2

Hai idea come far funzionare senza che da quelli arresti anomali ?

grazie mille e buona settimana.

Per aggiungere pulsanti devi agire su queste due righe:

const int nButtons = 1;               // Number of buttons
const int pinButtons[nButtons] = {2}; // Buttons pins

i vettori si inizializzano con le parentesi graffe e le virgole al loro interno
Stessa cosa per i potenziometri, modifichi il numero e i indichi i pin dove sono connessi modificando le due righe apposite.
Capitolo arresti anomali, se ti riferisci al programma che gira sul PC non saprei che dirti, non lo conosco e non conosco il protocollo MIDI quindi non saprei darti indicazioni.
Se ti riferisci ad Arduino invece definisci meglio arresto anomalo in quanto Arduino non è un PC dove gira un sistema operativo che può bloccarsi per svariati motivi, qui il programma continua a girare (al netto di casistiche esterne che non credo siano il caso di quello che lamenti).
Smette di comunicare? Se si, da quel che capisco usango la Mega avevi ridefinito in modo da avere comunque i messaggi sul serial monitor, quando si blocca anche li non hai messaggi?