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 : :
), 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