sisi è che ho finito i pin...cmq lo posto!
include <LiquidCrystal.h>
#define ON 1
#define OFF 0
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int enel = 6;
const int gruppo = 7;
const int rele1 = 8;
const int rele2 = 9;
const int contattore = 10;
const int spia = 13;
boolean stato_enel;
boolean stato_gruppo;
boolean flag =0;
boolean error =false;
int cicli =0;
void setup(){
Serial.begin(9600);
lcd.begin(16, 4);
lcd.clear();
pinMode(enel, INPUT_PULLUP);
pinMode(gruppo, INPUT_PULLUP);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(contattore, OUTPUT);
pinMode(spia, OUTPUT);
}
void ritardo(int i){
Serial.print("Sto aspettando ");
Serial.print(i);
Serial.println(" secondi");
for (int k=0; k<i; k++){
lcd.setCursor(0,3);
lcd.print("Wait ");
lcd.print(i-k);
lcd.write(" secondi ");
delay(1000);
}
}
void accensione_gruppo() {
Serial.println("Accensione gruppo elettrogeno in corso...");
lcd.setCursor(0,2);
lcd.print("Accensione... ");
lcd.setCursor(0,3);
Serial.print("Tentativo n: ");
lcd.print("Tentativo : ");
Serial.println(cicli+1);
lcd.print(cicli+1);
lcd.print(" ");
delay(2000);
digitalWrite(rele1, HIGH);
delay(2000);
digitalWrite(rele2, HIGH);
delay(1500);
digitalWrite(rele2,LOW);
cicli++;
}
void spengimento_gruppo(){
Serial.println("Spengimento gruppo elettrogeno in corso...");
lcd.setCursor(0,2);
lcd.print("Spengimento... ");
ritardo(18);
digitalWrite(contattore, LOW);
ritardo(6);
digitalWrite(rele1, LOW);
}
void errore() {
digitalWrite(spia, HIGH);
digitalWrite(rele1, LOW);
digitalWrite(rele2, LOW);
error = true;
Serial.println("ERRORE IL GRUPPO NON SI E' ACCESO");
lcd.setCursor(0,2);
lcd.print(" ERRORE ");
lcd.setCursor(0,3);
lcd.print("NON SI E' ACCESO");
}
void loop(){
stato_enel = digitalRead(enel); //controllo se c'è rete
stato_gruppo = digitalRead(gruppo);
Serial.print("Stato Enel: ");
Serial.println(stato_enel);
Serial.print("Stato Gruppo: ");
Serial.println(stato_gruppo);
lcd.setCursor(0,0);
lcd.print("ENEL : ");
if(stato_enel==ON)
lcd.print("OK ");
else lcd.print("ASSENTE");
lcd.setCursor(0,1);
lcd.print("GRUPPO : ");
if(stato_gruppo==ON)
lcd.print("ON ");
else lcd.print("OFF");
//Senza enel
if (stato_enel== OFF){ //senza ENEL
if (stato_gruppo == OFF) { //Gruppo Spento
if(cicli == 0) {
lcd.setCursor(0,2);
lcd.print(" Sto aspettando ");
ritardo(12);
}
if (digitalRead(enel) == 0) {
if(cicli<3) accensione_gruppo();
else errore();
}
}
if (stato_gruppo == ON){ //Gruppo Acceso e non attaccato
if (flag == 0){
Serial.println("Gruppo acceso");
lcd.setCursor(0,2);
lcd.print("Gruppo Acceso ");
ritardo(15); //15 secondi
digitalWrite(contattore, HIGH);
flag = 1;
cicli = 0;
}
if (flag == 1) {
Serial.println("Gruppo acceso e collegato");
lcd.setCursor(0,3);
lcd.print("Gruppo collegato");
}
}
}
//c'è Enel
if (stato_enel == ON ) {
if (stato_gruppo == ON) {
spengimento_gruppo();
flag = 0;
cicli=0;
}
if (stato_gruppo == OFF) {
Serial.println(" Tutto OK");
lcd.setCursor(0,2);
if (error == true ) lcd.print(" ERRORE ");
else lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" Tutto OK ");
}
}
}