problema esecuzione programma su Arduino MEGA

Buongiorno a tutti, ho riscontrato un problema con l'esecuzione dello sketch su due Arduino Mega, uno compatibile che adotta il chip CH340G e uno originale che adotta il chip 16U2, sul primo compatibile lo sketch funziona benissimo sul secondo originale lo sketch funziona parzialmente, considerando che non ho errori di caricamento e lo sketch è lo stesso, sapreste dirmi il motivo?

Senza sapere che differenze di comportamento hai è difficile parlare

Magari hai un qualche pin guasto...

Se metti schema, circuito, risultato giusto e risultato sbagliato è tutto più facile

allora siccome ho due mega originali il difetto lo fa su tutti e due e comunque ho provato con un altro sketch è funzionano benissimo quindi escluderei i pin guasti, lo schema purtroppo non ce l'ho perchè ho tutto in mente e non ho buttato giu niente ma ho solo qualche appunto che viene replicato per i pin che mi servono ma in linea di massima posso dire che tutto lo sketch funziona a differenza di questa parte di listato

buttonStatus1 = digitalRead (buttonPin11);
  buttonStatus2 = digitalRead (buttonPin12);
  buttonStatus3 = digitalRead (buttonPin13);
  buttonStatus4 = digitalRead (buttonPin14);
  buttonStatus5 = digitalRead (buttonPin15);
  buttonStatus6 = digitalRead (buttonPin16);
  buttonStatus7 = digitalRead (buttonPin17);
  buttonStatus8 = digitalRead (buttonPin18);
  buttonStatus9 = digitalRead (buttonPin19);
  buttonStatus10 = digitalRead (buttonPin20);

  if (buttonStatus1 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin14, HIGH);
  }

  if (buttonStatus2 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin15, HIGH);
  }

  if (buttonStatus3 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin16, HIGH);
  }

  if (buttonStatus4 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin17, HIGH);
  }

  if (buttonStatus5 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin18, HIGH);
  }

  if (buttonStatus6 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin19, HIGH);
  }

  if (buttonStatus7 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin20, HIGH);
  }

  if (buttonStatus8 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin21, HIGH);
  }

  if (buttonStatus9 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin22, HIGH);
  }

  if (buttonStatus1 == LOW && buttonStatus2 == LOW && buttonStatus3 == LOW && buttonStatus4 == LOW && buttonStatus5 == LOW && buttonStatus6 == LOW && buttonStatus7 == LOW && buttonStatus8 == LOW && buttonStatus9 == LOW && buttonStatus10 == HIGH) {
    digitalWrite (ledPin14, LOW);
    digitalWrite (ledPin15, LOW);
    digitalWrite (ledPin16, LOW);
    digitalWrite (ledPin17, LOW);
    digitalWrite (ledPin18, LOW);
    digitalWrite (ledPin19, LOW);
    digitalWrite (ledPin20, LOW);
    digitalWrite (ledPin21, LOW);
    digitalWrite (ledPin22, LOW);
  }

in buona sostanza tutti i buttonStatus da 1 a 9 sono ingressi provenienti da open collector di protezioni e buttonStatus10 è il pulsante di reset

e anche questa parte di listato

if (digitalRead(BUTTON3) == HIGH && !cont2) {
    delay(100);
    digitalWrite(array1[cont1], LOW);
    digitalWrite(array2[cont2], LOW);

    {
      cont1 = 4;
      cont2 = 0;
    }

    digitalWrite(array1[cont1], HIGH);
    digitalWrite(array2[cont2], HIGH);
    while (digitalRead(BUTTON3) == HIGH);
    {
      ;
    }
    delay(100);
  }

  if (digitalRead(BUTTON3) == HIGH && cont2) {
    delay(100);
    digitalWrite(array1[cont1], LOW);
    digitalWrite(array2[cont2], LOW);

    {
      cont1 = 3;
      cont2 = 2;
    }

    digitalWrite(array1[cont1], HIGH);
    digitalWrite(array2[cont2], HIGH);
    while (digitalRead(BUTTON3) == HIGH);
    {
      ;
    }
    delay(100);

  }

che mi provvede a fare una sorta di memoria di due array differenti

il resto funziona tutto perfettamente posto comunque tutto il listato

#include <OneShotTimer.h>
#define ledPin7 33 //LED VOUT OFF A+B 
#define ledPin8 35 //LED VOUT OFF C
#define ledPin9 37 //LED VOUT OFF D+E
#define ledPin10 39 //LED VOUT OFF F
#define ledPin11 41 //LED VOUT OFF G
#define ledPin12 43 //LED VOUT OFF H
#define ledPin13 48 //LED VOUT OFF I
#define buttonPin4 32 //PULSANTE VOUT OFF A+B
#define buttonPin5 34 //PULSANTE VOUT OFF C
#define buttonPin6 36 //PULSANTE VOUT OFF D+E
#define buttonPin7 38 //PULSANTE VOUT OFF F
#define buttonPin8 40 //PULSANTE VOUT OFF G
#define buttonPin9 42 //PULSANTE VOUT OFF H 
#define buttonPin10 47 //PULSANTE VOUT OFF I
#define ledPin6 31 //LED DISINSERZIONE TERRA 
#define ledPin5 30 //RELE INSERZIONE TERRA
#define ledPin4 27 //LED LETTURA SINGOLA SELEZIONATA TRAFO 1KVA
#define ledPin3 28 //LED LETTURA SINGOLA SELEZIONATA TRAFO LKB
#define ledPin2 25 //RELE SELEZIONE LETTURA SINGOLA O DUALE TRAFO 1KVA
#define ledPin1 23 //RELE SELEZIONE LETTURA SINGOLA O DUALE TRAFO LKB
#define LED12 26 //RELE SOFT START
#define LED11 12 //RELE SELEZIONE PRIMARIO TRAFO ISOLAMENTO P1
#define LED10 11 //RELE SELEZIONE PRIMARIO TRAFO ISOLAMENTO P2
#define LED9 10 //RELE SELEZIONE PRIMARIO TRAFO ISOLAMENTO P3
#define LED6 8 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S1
#define LED5 7 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S2
#define LED4 6 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S3
#define LED3 5 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S4
#define LED2 4 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S5
#define LED1 3 //RELE SELEZIONE SECONDARIO TRAFO ISOLAMENTO S6
#define buttonPin3 29 //PULSANTE INSERZIONE TERRA
#define buttonPin2 24 //PULSANTE SELEZIONE LETTURA SINGOLA O DUALE TRAFO 1KVA
#define buttonPin1 22 //PULSANTE SELEZIONE LETTURA SINGOLA O DUALE TRAFO LKB
#define BUTTON3 13 //PULSANTE SELEZIONE MEMORIA USCITA VARIAC O 230V
#define BUTTON2 9 //PULSANTE SELEZIONE PRIMARIO TRAFO ISOLAMENTO
#define BUTTON1 2 //PULSANTE SELEZIONE SECONDARIO TRAFO ISOLAMENTO
#define buttonPin11 53 //INGRESSO PROTEZIONE LINEA A (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin12 54 //INGRESSO PROTEZIONE LINEA B (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin13 14 //INGRESSO PROTEZIONE LINEA C (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin14 15 //INGRESSO PROTEZIONE LINEA D (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin15 16 //INGRESSO PROTEZIONE LINEA E (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin16 17 //INGRESSO PROTEZIONE LINEA F (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin17 18 //INGRESSO PROTEZIONE LINEA G (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin18 19 //INGRESSO PROTEZIONE LINEA H (IMAX)
#define buttonPin19 20 //INGRESSO PROTEZIONE LINEA I (OVP, UVP, OCP, UCP, OPP, UPP, OTIMER)
#define buttonPin20 21 //PULSANTE RESET PROTEZIONI
#define ledPin14 55 //RELE PROTEZIONE LINEA A  
#define ledPin15 44 //RELE PROTEZIONE LINEA B
#define ledPin16 45 //RELE PROTEZIONE LINEA C
#define ledPin17 46 //RELE PROTEZIONE LINEA D
#define ledPin18 49 //RELE PROTEZIONE LINEA E
#define ledPin19 50 //RELE PROTEZIONE LINEA F
#define ledPin20 51 //RELE PROTEZIONE LINEA G
#define ledPin21 52 //RELE PROTEZIONE LINEA H
#define ledPin22 56 //RELE PROTEZIONE LINEA I

OneShotTimer timer;

int buttonStatus1 = 0;
int buttonStatus2 = 0;
int buttonStatus3 = 0;
int buttonStatus4 = 0;
int buttonStatus5 = 0;
int buttonStatus6 = 0;
int buttonStatus7 = 0;
int buttonStatus8 = 0;
int buttonStatus9 = 0;
int buttonStatus10 = 0;

bool active = true;

int ledState7 = HIGH;
int buttonState4;
int lastButtonState4 = HIGH;

long lastDebounceTime4 = 0;
long debounceDelay4 = 50;

int ledState8 = HIGH;
int buttonState5;
int lastButtonState5 = HIGH;

long lastDebounceTime5 = 0;
long debounceDelay5 = 50;

int ledState9 = HIGH;
int buttonState6;
int lastButtonState6 = HIGH;

long lastDebounceTime6 = 0;
long debounceDelay6 = 50;

int ledState10 = HIGH;
int buttonState7;
int lastButtonState7 = HIGH;

long lastDebounceTime7 = 0;
long debounceDelay7 = 50;

int ledState11 = HIGH;
int buttonState8;
int lastButtonState8 = HIGH;

long lastDebounceTime8 = 0;
long debounceDelay8 = 50;

int ledState12 = HIGH;
int buttonState9;
int lastButtonState9 = HIGH;

long lastDebounceTime9 = 0;
long debounceDelay9 = 50;

int ledState13 = HIGH;
int buttonState10;
int lastButtonState10 = HIGH;

long lastDebounceTime10 = 0;
long debounceDelay10 = 50;

int ledState6 = HIGH;
int ledState5 = LOW;
int buttonState3;
int lastButtonState3 = HIGH;

long lastDebounceTime3 = 0;
long debounceDelay3 = 50;

int ledState3 = HIGH;
int ledState1 = LOW;
int buttonState1;
int lastButtonState1 = HIGH;

long lastDebounceTime1 = 0;
long debounceDelay1 = 50;

int ledState4 = HIGH;
int ledState2 = LOW;
int buttonState2;
int lastButtonState2 = HIGH;

long lastDebounceTime2 = 0;
long debounceDelay2 = 50;

int array1[] = {LED6, LED5, LED4, LED3, LED2, LED1};
int array2[] = {LED11, LED10, LED9};
int cont1, cont2;
int maxArray1, maxArray2;
void setup () {

  pinMode (buttonPin11, INPUT);
  pinMode (buttonPin12, INPUT);
  pinMode (buttonPin13, INPUT);
  pinMode (buttonPin14, INPUT);
  pinMode (buttonPin15, INPUT);
  pinMode (buttonPin16, INPUT);
  pinMode (buttonPin17, INPUT);
  pinMode (buttonPin18, INPUT);
  pinMode (buttonPin19, INPUT);
  pinMode (buttonPin20, INPUT);
  pinMode (ledPin14, OUTPUT);
  pinMode (ledPin15, OUTPUT);
  pinMode (ledPin16, OUTPUT);
  pinMode (ledPin17, OUTPUT);
  pinMode (ledPin18, OUTPUT);
  pinMode (ledPin19, OUTPUT);
  pinMode (ledPin20, OUTPUT);
  pinMode (ledPin21, OUTPUT);
  pinMode (ledPin22, OUTPUT);
  pinMode (ledPin7, OUTPUT);
  pinMode (ledPin8, OUTPUT);
  pinMode (ledPin9, OUTPUT);
  pinMode (ledPin10, OUTPUT);
  pinMode (ledPin11, OUTPUT);
  pinMode (ledPin12, OUTPUT);
  pinMode (ledPin13, OUTPUT);
  pinMode (buttonPin4, INPUT);
  pinMode (buttonPin5, INPUT);
  pinMode (buttonPin6, INPUT);
  pinMode (buttonPin7, INPUT);
  pinMode (buttonPin8, INPUT);
  pinMode (buttonPin9, INPUT);
  pinMode (buttonPin10, INPUT);
  pinMode (ledPin6, OUTPUT);
  pinMode (ledPin5, OUTPUT);
  pinMode (buttonPin3, INPUT);
  pinMode (ledPin4, OUTPUT);
  pinMode (ledPin3, OUTPUT);
  pinMode (LED12, OUTPUT);
  pinMode (buttonPin1, INPUT);
  pinMode (ledPin1, OUTPUT);
  pinMode (buttonPin2, INPUT);
  pinMode (ledPin2, OUTPUT);
  pinMode (LED11, OUTPUT);
  pinMode (LED10, OUTPUT);
  pinMode (LED9, OUTPUT);
  pinMode (LED6, OUTPUT);
  pinMode (LED5, OUTPUT);
  pinMode (LED4, OUTPUT);
  pinMode (LED3, OUTPUT);
  pinMode (LED2, OUTPUT);
  pinMode (LED1, OUTPUT);
  pinMode (BUTTON3, INPUT);
  pinMode (BUTTON2, INPUT);
  pinMode (BUTTON1, INPUT);
  //definisco il quantitativo di led delle due serie
  maxArray1 = 6; //la prima serie è composta da 6 led
  maxArray2 = 3; //la seconda serie è composta da 3 led
  //spengo tutti i led delle due serie
  for (int i = 0; i < 6; i++) digitalWrite (array1[i], LOW);
  for (int i = 0; i < 3; i++) digitalWrite (array2[i], LOW);
  cont1 = 4; //inizializzo contatore array1
  cont2 = 0; //inizializzo contatore array2
  //accendo i primi led delle due serie
  digitalWrite (ledPin7, ledState7);
  digitalWrite (ledPin8, ledState8);
  digitalWrite (ledPin9, ledState9);
  digitalWrite (ledPin10, ledState10);
  digitalWrite (ledPin11, ledState11);
  digitalWrite (ledPin12, ledState12);
  digitalWrite (ledPin13, ledState13);
  digitalWrite (ledPin4, ledState4);
  digitalWrite (ledPin3, ledState3);
  digitalWrite (LED12, LOW);
  digitalWrite (BUTTON3, LOW);
  digitalWrite (ledPin1, ledState1);
  digitalWrite (ledPin2, ledState2);
  digitalWrite (array1[cont1], HIGH);
  digitalWrite (array2[cont2], HIGH);
  timer.OneShot (3000, action);
}

Fermandosi alla prima parte del listato del post 2

Cosa succede?

Non riesci ad accendere i vari led?
O non riesci a spegnerli?

void loop () {

  buttonStatus1 = digitalRead (buttonPin11);
  buttonStatus2 = digitalRead (buttonPin12);
  buttonStatus3 = digitalRead (buttonPin13);
  buttonStatus4 = digitalRead (buttonPin14);
  buttonStatus5 = digitalRead (buttonPin15);
  buttonStatus6 = digitalRead (buttonPin16);
  buttonStatus7 = digitalRead (buttonPin17);
  buttonStatus8 = digitalRead (buttonPin18);
  buttonStatus9 = digitalRead (buttonPin19);
  buttonStatus10 = digitalRead (buttonPin20);

  if (buttonStatus1 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin14, HIGH);
  }

  if (buttonStatus2 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin15, HIGH);
  }

  if (buttonStatus3 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin16, HIGH);
  }

  if (buttonStatus4 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin17, HIGH);
  }

  if (buttonStatus5 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin18, HIGH);
  }

  if (buttonStatus6 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin19, HIGH);
  }

  if (buttonStatus7 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin20, HIGH);
  }

  if (buttonStatus8 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin21, HIGH);
  }

  if (buttonStatus9 == HIGH && buttonStatus10 == LOW) {
    digitalWrite (ledPin22, HIGH);
  }

  if (buttonStatus1 == LOW && buttonStatus2 == LOW && buttonStatus3 == LOW && buttonStatus4 == LOW && buttonStatus5 == LOW && buttonStatus6 == LOW && buttonStatus7 == LOW && buttonStatus8 == LOW && buttonStatus9 == LOW && buttonStatus10 == HIGH) {
    digitalWrite (ledPin14, LOW);
    digitalWrite (ledPin15, LOW);
    digitalWrite (ledPin16, LOW);
    digitalWrite (ledPin17, LOW);
    digitalWrite (ledPin18, LOW);
    digitalWrite (ledPin19, LOW);
    digitalWrite (ledPin20, LOW);
    digitalWrite (ledPin21, LOW);
    digitalWrite (ledPin22, LOW);
  }

  if (digitalRead(BUTTON3) == HIGH && !cont2) {
    delay(100);
    digitalWrite(array1[cont1], LOW);
    digitalWrite(array2[cont2], LOW);

    {
      cont1 = 4;
      cont2 = 0;
    }

    digitalWrite(array1[cont1], HIGH);
    digitalWrite(array2[cont2], HIGH);
    while (digitalRead(BUTTON3) == HIGH);
    {
      ;
    }
    delay(100);
  }

  if (digitalRead(BUTTON3) == HIGH && cont2) {
    delay(100);
    digitalWrite(array1[cont1], LOW);
    digitalWrite(array2[cont2], LOW);

    {
      cont1 = 3;
      cont2 = 2;
    }

    digitalWrite(array1[cont1], HIGH);
    digitalWrite(array2[cont2], HIGH);
    while (digitalRead(BUTTON3) == HIGH);
    {
      ;
    }
    delay(100);

  }

  timer.Update();

  int reading4 = digitalRead(buttonPin4);
  if (reading4 != lastButtonState4) {
    lastDebounceTime4 = millis();
  }
  if ((millis() - lastDebounceTime4) > debounceDelay4) {
    if (reading4 != buttonState4) {
      buttonState4 = reading4;
      if (buttonState4 == HIGH) {
        ledState7 = !ledState7;
      }
    }
  }
  digitalWrite(ledPin7, ledState7);
  lastButtonState4 = reading4;

  int reading5 = digitalRead(buttonPin5);
  if (reading5 != lastButtonState5) {
    lastDebounceTime5 = millis();
  }
  if ((millis() - lastDebounceTime5) > debounceDelay5) {
    if (reading5 != buttonState5) {
      buttonState5 = reading5;
      if (buttonState5 == HIGH) {
        ledState8 = !ledState8;
      }
    }
  }
  digitalWrite(ledPin8, ledState8);
  lastButtonState5 = reading5;

  int reading6 = digitalRead(buttonPin6);
  if (reading6 != lastButtonState6) {
    lastDebounceTime6 = millis();
  }
  if ((millis() - lastDebounceTime6) > debounceDelay6) {
    if (reading6 != buttonState6) {
      buttonState6 = reading6;
      if (buttonState6 == HIGH) {
        ledState9 = !ledState9;
      }
    }
  }
  digitalWrite(ledPin9, ledState9);
  lastButtonState6 = reading6;

  int reading7 = digitalRead(buttonPin7);
  if (reading7 != lastButtonState7) {
    lastDebounceTime7 = millis();
  }
  if ((millis() - lastDebounceTime7) > debounceDelay7) {
    if (reading7 != buttonState7) {
      buttonState7 = reading7;
      if (buttonState7 == HIGH) {
        ledState10 = !ledState10;
      }
    }
  }
  digitalWrite(ledPin10, ledState10);
  lastButtonState7 = reading7;

  int reading8 = digitalRead(buttonPin8);
  if (reading8 != lastButtonState8) {
    lastDebounceTime8 = millis();
  }
  if ((millis() - lastDebounceTime8) > debounceDelay8) {
    if (reading8 != buttonState8) {
      buttonState8 = reading8;
      if (buttonState8 == HIGH) {
        ledState11 = !ledState11;
      }
    }
  }
  digitalWrite(ledPin11, ledState11);
  lastButtonState8 = reading8;

  int reading9 = digitalRead(buttonPin9);
  if (reading9 != lastButtonState9) {
    lastDebounceTime9 = millis();
  }
  if ((millis() - lastDebounceTime9) > debounceDelay9) {
    if (reading9 != buttonState9) {
      buttonState9 = reading9;
      if (buttonState9 == HIGH) {
        ledState12 = !ledState12;
      }
    }
  }
  digitalWrite(ledPin12, ledState12);
  lastButtonState9 = reading9;

  int reading10 = digitalRead(buttonPin10);
  if (reading10 != lastButtonState10) {
    lastDebounceTime10 = millis();
  }
  if ((millis() - lastDebounceTime10) > debounceDelay10) {
    if (reading10 != buttonState10) {
      buttonState10 = reading10;
      if (buttonState10 == HIGH) {
        ledState13 = !ledState13;
      }
    }
  }
  digitalWrite(ledPin13, ledState13);
  lastButtonState10 = reading10;

  int reading3 = digitalRead(buttonPin3);
  if (reading3 != lastButtonState3) {
    lastDebounceTime3 = millis();
  }
  if ((millis() - lastDebounceTime3) > debounceDelay3) {
    if (reading3 != buttonState3) {
      buttonState3 = reading3;
      if (buttonState3 == HIGH) {
        ledState5 = !ledState5;
        ledState6 = !ledState6;
      }
    }
  }
  digitalWrite(ledPin5, ledState5);
  digitalWrite(ledPin6, ledState6);
  lastButtonState3 = reading3;

  int reading1 = digitalRead(buttonPin1);
  if (reading1 != lastButtonState1) {
    lastDebounceTime1 = millis();
  }
  if ((millis() - lastDebounceTime1) > debounceDelay1) {
    if (reading1 != buttonState1) {
      buttonState1 = reading1;
      if (buttonState1 == HIGH) {
        ledState1 = !ledState1;
        ledState3 = !ledState3;
      }
    }
  }
  digitalWrite(ledPin1, ledState1);
  digitalWrite(ledPin3, ledState3);
  lastButtonState1 = reading1;

  int reading2 = digitalRead(buttonPin2);
  if (reading2 != lastButtonState2) {
    lastDebounceTime2 = millis();
  }
  if ((millis() - lastDebounceTime2) > debounceDelay2) {
    if (reading2 != buttonState2) {
      buttonState2 = reading2;
      if (buttonState2 == HIGH) {
        ledState2 = !ledState2;
        ledState4 = !ledState4;
      }
    }
  }
  digitalWrite(ledPin2, ledState2);
  digitalWrite(ledPin4, ledState4);
  lastButtonState2 = reading2;

  if (digitalRead(BUTTON2) == HIGH) {
    delay(100); //attesa antibounce
    digitalWrite(array2[cont2], LOW); //spengo led corrente
    cont2 = cont2 + 1; //incremento contatore led corrente
    if (cont2 == maxArray2) //se il contatore è al massimo
      cont2 = 0; //azzeralo
    digitalWrite(array2[cont2], HIGH); //accendi il nuovo led corrente
    while (digitalRead(BUTTON2) == HIGH); //attendi il rilascio di BUTTON2
    delay(100); //attesa antibounce
  }

  if (digitalRead(BUTTON1) == HIGH) {
    delay(100); //attesa antibounce
    digitalWrite(array1[cont1], LOW); //spengo led corrente
    cont1 = cont1 + 1; //incremento contatore led corrente
    if (cont1 == maxArray1) //se il contatore è al massimo
      cont1 = 0; //azzeralo
    digitalWrite(array1[cont1], HIGH); //accendi il nuovo led corrente
    while (digitalRead(BUTTON1) == HIGH); //attendi il rilascio di BUTTON1
    delay(100);
  }

}
void action()
{
  digitalWrite(LED12, HIGH);
}

allora non riesco ad accendere i vari led, ripeto che il listato funziona perfettamente sul clone ma non sull'originale

Quindi o non sente i vari ingressi oppuresente sempre l'ingresso di reset

Con due print ti togli il dubbio

Oppure con qualche led in parallelo agli ingressi

Azzardo ipotesi

Hai detto che gli ingressi sono connessi a delle uscite open collector, che resistenza di pullup hai messo?

lo solita 10K come se fossero dei pulsanti ovviamente IN open collector a 5V, OUT open collector a pin arduino e resistenza tra pin arduino e massa

Così è pulldown

Disegnalo lo schema del singolo ingresso, che non mi è chiaro per nulla

Anche a matita sulla carta del salumiere

E poi fai foto e posti

come si fa a postare una foto? mi chiede il link,

Devi aggiungerla come allegato

Poi, se vuoi metterla come foto devi postare con l'allegato, editare il post e aggiungere la foto usando come indirizzo l'allegato già postato

file:///Users/utente/Downloads/IMG_8131.JPG

chiedo scusa ma non riesco a mettere la foto e non riesco a trovare il pulsante allegato

No, non va il link

RoccoStragapede:
come si fa a postare una foto? mi chiede il link,

Puoi usare uno dei tanti servizi che ti permettono di mettere delle immagini on-line e quindi recuperare il link ...
... il REGOLAMENTO lo hai letto? Perché il punto 9 spiega proprio questo!

Guglielmo

se non dovesse andare anche questa volta posso confermare che il collegamento è il pulldown

Su un uscita opencollector?

Il comportamento corretto è NON andare

Infatti le due schede originali non vanno

L'imitazione userà materiale fuori specifica, che magari solo di corrente di fuga riesce a fare da pullup

Oppure ho capito male lo schema

Tu per caso stai usando degli uln 2803 o simili?

ma io non sto usando lo schema pullup ma sto utilizzando il pulldown cioè open collector tra positivo e pin arduino e resistenza tra massa e pin arduino
non sto utilizzando ULN o simili

Il problema è hardware e ineffabilmente nascosto in questa frase:

"ingressi provenienti da open collector di protezioni "