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…