Problema sketch con MCP23017

Salve a tutti,
ho realizzato uno sketch per un controllo di input ed output con un MCP23017.
Dopo varie correzioni sono arrivato a questo codice, ma ora che lo sto testando su breadboard ho alcuni problemi.
Ho collegato agli “input” (i pin GPA dell’MCP23017) dei cavetti che muovo manualmente da GND a 5V (dovrebbero simulare il cambio di stato di un interruttore), mentre agli “output” (pin GPB dell’MCP23017) a vari led colorati, con opportune resistenze.
Provando a cambiare gli input da 0 a 5V ogni tanto si accende qualche altro led (non previsto dallo sketch ::slight_smile: ::slight_smile: ), non riesco a capire cosa possa essere.
Qui lo sketch

#include <Wire.h>
#include "Adafruit_MCP23017.h"

// Pin #12 mcp to pin 3 (SCL, Arduino Leonardo)
// Pin #13 mcp to pin 2 (SDA, Arduino Leonardo)
// Pins #15, #16, #17 mcp to ground (address selection)
// Pin #9 mcp to 5V (power)
// Pin #10 mcp to ground
// Pin #18 through a ~10kohm resistor to 5V (reset pin, active low)
// Leds with 1 kohm resistor

Adafruit_MCP23017 mcp; //inizializzo mcp

//Input pin, from GPA0 to GPA7, right side of MCP23017
const int i0=0;
const int i1=1;
const int i2=2;
const int i3=3;
const int i4=4;
const int i5=5;
const int i6=6;
const int i7=7;
//Output pin, from GPB0 to GPB7, left side of MCP23017
const int o0=15;
const int o1=14;
const int o2=13;
const int o3=12;
const int o4=11;
const int o5=10;
const int o6=9;
const int o7=8;

const int input[8]={i0,i1,i2,i3,i4,i5,i6,i7};  //interruttori
const int output[8]={o0,o1,o2,o3,o4,o5,o6,o7}; //led
const int comando[8]={o0,o1,o2,o3,o4,o7,o7,o7}; //led associati all'i-esimo interruttore
boolean stateIn[8]={}; //stato interruttori

void setup() {
  //Serial.begin(9600);//debug
  //while(!Serial){}; //debug
  mcp.begin(0);
  for(int i=0; i<8; i++){
    mcp.pinMode(input[i], INPUT);
    mcp.pinMode(output[i], OUTPUT);  
    stateIn[i]=mcp.digitalRead(input[i]); //legge e memorizza gli stati degli interruttori
    mcp.digitalWrite(output[i], LOW); //imposto tutte uscite a livello basso
  }

}

void loop() {
  
  for(int i=0; i<8; i++){    
    if(mcp.digitalRead(input[i])!=stateIn[i]){
      //Serial.println("Input "+(String)i+": "+(String)input[i]);//debug
      stateIn[i]=mcp.digitalRead(input[i]);   
      //Serial.println("Stato : "+(String)i+": "+(String)stateIn[i]);//debug
      boolean st=mcp.digitalRead(comando[i]);
      mcp.digitalWrite(comando[i],!st);
      //Serial.println("Comando : "+(String)i+": "+(String)comando[i]);//debug
    }
  }
  
}

Ringrazio anticipatamente per l’aiuto :smiley:

Brunez3BD:
Provando a cambiare gli input da 0 a 5V ogni tanto si accende qualche altro led (non previsto dallo sketch ::slight_smile: ::slight_smile: ), non riesco a capire cosa possa essere.

Cioè ? Se prima che lo porti da gnd a 5v ci passa un secondo, in quel secondo il filo è "flottante" e si becca un fracco di disturbi. Mai lasciare flottante il segnale che va ad un pin.

Grazie del consiglio, ho fatto altre prove con un interruttore. Stesso problema.
Inoltre ogni tanto diciamo che perde uno "scatto", mi spiego meglio: se l'interruttore ha due possibili posizioni A e B,inizialmente il led é spento in posizione A ed acceso in B. Dopo un po' di variazioni da A a B mi trovo con le cose invertite, cioè acceso in A e spento in B. Penso che questo sia dovuto alla frequenza con cui schiaccio ripetutamente l'interruttore (ho provato una decina di scatti sequenziali e frenetici)

Anche un pulsante ha dei problemi, i rimbalzi. Cerca debounce a button

Grazie mille:) e per risolvere il problema dell'accensione non voluta di altri led?