El estado de las entradas digitales es inestable

Hola a a todos!
Mi nombre es Gustavo y soy un aficionado principiante con Arduino.
Con la idea de hacer un entrenador de reflejos visuales (que consiste en una serie de pulsadores con leds que al encenderse en forma aleatoria deben ser pulsados, y se mide el tiempo de respuesta, los aciertos y los errores cometidos) comencé con un Arduino Mega.

Conecté 2 pulsadores a las entradas digitales como Pull Down, con resistores de 10K a tierra como especifican, e hice un programita (que transcribo más abajo) para leer los estados, y funcionó bien. El tema se complicó cuando agregué 2 pulsadores más y se volvió inestable (en el entrenador serán 6).
Aleatoriamente me da estados HIGH en los dos pulsadores agregados sin ser pulsados.

// Definiciones para los PULSADORES 
// Se definen las entradas digitales para los pulsadores
#define PULSADOR1 22 
#define PULSADOR2 23
#define PULSADOR3 24
#define PULSADOR4 25
//define estado inicial de los pulsadores
//bool activo22 = 0;
//bool activo23 = 0;
//bool activo24 = 0;
//bool activo25 = 0;
byte activo[4]; //Almacena datos de Estado de los pulsadores
int i; // variable para utilizar en el for

void setup() {
// Iniciamos el monitor serie
    Serial.begin(9600);
  

    
// Defino los Pines como INPUTS para los Pulsadores
    pinMode(PULSADOR1, INPUT);
    pinMode(PULSADOR2, INPUT);
    pinMode(PULSADOR3, INPUT);
    pinMode(PULSADOR4, INPUT);

}

void loop(){
for (int i=22; i<26; i++){
   activo[i] = digitalRead(i);
   
  if(activo[i]==HIGH){
    Serial.print(i);           // para visualizar los resultados en el monitor, que son horribles!
    Serial.print("\r\n");
    Evaluar(i);                //ir a la funcion de evaluación
  }
   delay(100);
  
}
}

Hice varios cambios en la forma de definir las entradas y cómo evaluar su estado, pero con 4 pulsadores los resultados son siempre inestables.

Dónde estoy cometiendo el/los errores? Las conexiones me cansé de revisarlas y remontarlas.
Desde ya les agradezco su tiempo.

El problema es que defines un vector para 4 elementos y luego apuntas a los elementos 22 en adelante y claro, no existen y te daran cualquier cosa.
Tus elementos son activo[0] a activo[3]
Por lo tanto si defines i = 22 debes descontar 22 a su lectura o bien ir de 0 a 3 pero cuando leas con digitalRead(i+22)

Ahora te reformo el programa

void loop(){
  for (int i=0; i<25; i++){
      activo[i] = digitalRead(i+22);
      Serial.print("Pin :");
      Serial.print(i);
      Serial.print(" => ");
      Serial.println(activo[i]?"ON":"OFF");  
      delay(100);
  }
}

Veamos si sigue mal

Hola a a todos!
Mi nombre es Gustavo y soy un aficionado principiante con Arduino.
Con la idea de hacer un entrenador de reflejos visuales (que consiste en una serie de pulsadores con leds que al encenderse en forma aleatoria deben ser pulsados, y se mide el tiempo de respuesta, los aciertos y los errores cometidos) comencé con un Arduino Mega.

Conecté 2 pulsadores a las entradas digitales como Pull Down, con resistores de 10K a tierra como especifican, e hice un programita (que transcribo más abajo) para leer los estados, y funcionó bien. El tema se complicó cuando agregué 2 pulsadores más y se volvió inestable (en el entrenador serán 6).
Aleatoriamente me da estados HIGH en los dos pulsadores agregados sin ser pulsados.

// Definiciones para los PULSADORES 
// Se definen las entradas digitales para los pulsadores
#define PULSADOR1 22 
#define PULSADOR2 23
#define PULSADOR3 24
#define PULSADOR4 25
//define estado inicial de los pulsadores
//bool activo22 = 0;
//bool activo23 = 0;
//bool activo24 = 0;
//bool activo25 = 0;
byte activo[4]; //Almacena datos de Estado de los pulsadores
int i; // variable para utilizar en el for

void setup() {
// Iniciamos el monitor serie
    Serial.begin(9600);
  

    
// Defino los Pines como INPUTS para los Pulsadores
    pinMode(PULSADOR1, INPUT);
    pinMode(PULSADOR2, INPUT);
    pinMode(PULSADOR3, INPUT);
    pinMode(PULSADOR4, INPUT);

}

void loop(){
for (int i=22; i<26; i++){
   activo[i] = digitalRead(i);
   
  if(activo[i]==HIGH){
    Serial.print(i);           // para visualizar los resultados en el monitor, que son 
                                       inestables (presentan "1" sin estar presionados)
    Serial.print("\r\n");
    Evaluar(i);                //ir a la función de evaluación (no la agrego porque el 
                                      problema está en void loop()
  }
   delay(100);
  
}
}

Hice varios cambios en la forma de definir las entradas y cómo evaluar su estado, pero con 4 pulsadores los resultados son siempre inestables.

Dónde estoy cometiendo el/los errores? Las conexiones me cansé de revisarlas y remontarlas.
Desde ya les agradezco su tiempo.

Por mucho que postees, si alguien no responde, es que aun no lo ha visto.

El moderador te cerrará uno de los dos post.

Estas leyendo mal las entradas.

for (i=22; i<26; i++) {
  activo[i]=digitalRead(i);
}

la variable activo es un array de cuatro posiciones. Esas posiciones van del 0 al 3. En tu código la primera posición es 22, fuera del array.

Una version correcta seria:

for (i=22; i<26; i++) {
  activo[i-22]=digitalRead(i);
}

con lo que la secuencia leerá 22-22=0, 23-22=1, 24-22=2, 25-2=3…

Hola Victorjam, muchas gracias por tu respuesta.
El segundo posteo no ha sido voluntario, sino un error al querer modificar el primero. La inexperiencia...! Pido disculpas y prometo ser más cuidadoso.

Nuevamente te agradezco, confundí el contenido del array con su subíndice. Lección aprendida, e implementada.

El problema sigue, pero debe ser del circuito. Lo voy a montar nuevamente.

Abrazo.

Solucionado el tema, era un problema del circuito.
Una pista quebrada hizo que los dos botones agregados (entradas 24 y 25) no tuviesen masa común con el Arduino y, por lo que leí, eso provocaba la inestabilidad en los valores de las entradas.

2 hilos duplicados. Espero no se repita en el futuro.
Un hilo fue mezclado a este, y otro borrado.