Il programma principale di controllo domotico
Il programma principale di controllo domotico per ARDUINO: rileva ingressi, comanda uscite e logica interpretativa
Bozza in revisione
Vediamo il pezzi del programma per rilevare lo stato degli ingressi
Variabili
byte IC1GP0 = B00000000;
byte IC1GP1 = B00000000;
byte IC1GP2 = B00000000;
byte IC1GP3 = B00000000;
byte IC1GP4 = B00000000;
byte IC1GP5 = B00000000;
byte IC1GP6 = B00000000;
byte IC1GP7 = B00000000;
byte IC1GP8 = B00000000;
byte IC1GP9 = B00000000;
byte IC1GP10 = B00000000;
byte IC1GP11 = B00000000;
byte IC1GP0_old = B00000000;
byte IC1GP1_old = B00000000;
byte IC1GP2_old = B00000000;
byte IC1GP3_old = B00000000;
byte IC1GP4_old = B00000000;
byte IC1GP5_old = B00000000;
byte IC1GP6_old = B00000000;
byte IC1GP7_old = B00000000;
byte IC1GP8_old = B00000000;
byte IC1GP9_old = B00000000;
byte IC1GP10_old = B00000000;
byte IC1GP11_old = B00000000;
Inizializzazione degli integrati
void inizializzaMCP23016() {
Wire.beginTransmission(0x20);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission ();
Wire.beginTransmission(0x20);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x21);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x21);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x22);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x22);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x23);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x23);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x24);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x24);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x25);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x25);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x26);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x26);
Wire.write(0x07);
Wire.write(0xFF);
Wire.endTransmission();
}
Il setup
void setup() {
//l’mcp23016 parte da esadecimale 20 a 27. In decimali da 32 a 39.
Wire.begin();
delay(200);
//Inizializzo gli mcp23016 settandogli i piedini come ingressi
inizializzaMCP23016();
delay(100);
//una lettura degli input per valorizzare il vettore
leggiinputdalleschede();
//memorizza il vettore appena letto in OLD
IC1GP0_old=IC1GP0;
IC1GP1_old=IC1GP1;
IC1GP2_old=IC1GP2;
IC1GP3_old=IC1GP3;
IC1GP4_old=IC1GP4;
IC1GP5_old=IC1GP5;
IC1GP6_old=IC1GP6;
IC1GP7_old=IC1GP7;
IC1GP8_old=IC1GP8;
IC1GP9_old=IC1GP9;
IC1GP10_old=IC1GP10;
IC1GP11_old=IC1GP11;
} // end setup
Il modulo di come si leggono gli input degli mcp23016
void leggiinputdalleschede()
{
//Serial.println(” 10 “);
// read port 1
Wire.beginTransmission(0x20);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x20, 2);
IC1GP0 = Wire.read();
IC1GP1 = Wire.read();
// read port 1
Wire.beginTransmission(0x21);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x21, 2);
IC1GP2 = Wire.read();
IC1GP3 = Wire.read();
// read port 1
Wire.beginTransmission(0x22);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x22, 2);
IC1GP4 = Wire.read();
IC1GP5 = Wire.read();
// read port 1
Wire.beginTransmission(0x23);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x23, 2);
IC1GP6 = Wire.read();
IC1GP7 = Wire.read();
// read port 1
Wire.beginTransmission(0x24);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x24, 2);
IC1GP8 = Wire.read();
IC1GP9 = Wire.read();
// read port 1
Wire.beginTransmission(0x25);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x25, 2);
IC1GP10 = Wire.read();
IC1GP11 = Wire.read();
}
e cosa mettere nell loop
void loop()
{
leggiinputdalleschede();
}
Prossimamente…