Ciao a tutti
mi chiamo Andrea
e sto tentando di fare un progetto per la domotica della mia casa che sto ristuttrurando, sfruttando uno o più arduini.
Al momento sono alle prese con la gestione luci, il mio impianto è gestito da dei pulsanti che comandano dei RELE passo passo con 2 uscite (2 NO) ad una è collegata l'utenza (Lampade di illuminazione + una spia di segnalazione a 220V) ed il secondo contatto lo utilizzo per far capire all'arduino lo stato del Rele passo passo (collego il +5VDC che va ad una resistenza all'ingresso del INPUT dell'arduino).
il mio scopo per ora è far si che il sistema dopo aver premuto un tasto che chiamo ALLOFF deve spegnere solo le luci attualmente accese.
in pratica leggo tutti gli stati del rele passo passo li do in pasto all'arduino e se premo il tasto ALLOFF allora attiva dei rele in parallelo alla bombina del passo passo per far si che cambi di stato
ho compilato il codice e funziona ma se accendo e a caso le luci per fare delle prove tipo 2 assieme e poi una subito dopo l'arduino impazzisce e comanda a caso qualche rele.
qualcuno sa darmi qualche dritta al riguardo?
di seguito posto il mio codice spero sia comprensibile, lo so mi sarò complicato sicuramente la vita ma non sono un genio in programmaziona anzi...
#define OCORR 22 // LUCE CORRIDIO collegato al pin digitale 22
#define OCUCINA 24
#define OSALA 26
#define OBAGNOP 28
#define OBAGNOG 30
#define OCBIMBO 32
#define OCSTUDIO 34
#define OCMATR 36
#define OBALCONE 38
#define ALLOFF 7 //INPUT all off
#define ICORR 23 //INPUT di stato
#define ICUCINA 25
#define ISALA 27
#define IBAGNOP 29
#define IBAGNOG 31
#define ICBIMBO 33
#define ICSTUDIO 35
#define ICMATR 37
#define IBALCONE 39
int valalloff = 0; // conservo i valori
int SCORR = 0;
int SCUCINA = 0;
int SSALA = 0;
int SBAGNOP = 0;
int SBAGNOG = 0;
int SCBIMBO = 0;
int SCSTUDIO = 0;
int SCMATR = 0;
int SBALCONE = 0;
void setup() {
Serial.begin(9600);
pinMode(OCORR, OUTPUT); // impostazioni pin in-out
pinMode(OCUCINA, OUTPUT);
pinMode(OSALA, OUTPUT);
pinMode(OBAGNOP, OUTPUT);
pinMode(OBAGNOG, OUTPUT);
pinMode(OCBIMBO, OUTPUT);
pinMode(OCSTUDIO, OUTPUT);
pinMode(OCMATR, OUTPUT);
pinMode(OBALCONE, OUTPUT);
pinMode(ALLOFF, INPUT);
pinMode(ICORR, INPUT);
pinMode(ICUCINA, INPUT);
pinMode(ISALA, INPUT);
pinMode(ICBIMBO, INPUT);
pinMode(IBAGNOP, INPUT);
pinMode(IBAGNOG, INPUT);
pinMode(ICSTUDIO, INPUT);
pinMode(ICMATR, INPUT);
pinMode(IBALCONE, INPUT);
digitalWrite(OCORR, HIGH);
digitalWrite(OCUCINA,HIGH);
digitalWrite(OSALA,HIGH);
digitalWrite(OBAGNOG,HIGH);
digitalWrite(OBAGNOP,HIGH);
digitalWrite(OCBIMBO,HIGH);
digitalWrite(OCSTUDIO,HIGH);
digitalWrite(OCMATR,HIGH);
digitalWrite(OBALCONE,HIGH);
}
void loop() {
valalloff = digitalRead(ALLOFF); // legge il valore dell'input e lo conserva
SCORR = digitalRead(ICORR);
SCUCINA = digitalRead(ICUCINA);
SSALA = digitalRead(ISALA);
SBAGNOP = digitalRead(IBAGNOP);
SBAGNOG = digitalRead(IBAGNOG);
SCBIMBO = digitalRead(ICBIMBO);
SCSTUDIO = digitalRead(ICSTUDIO);
SCMATR = digitalRead(ICMATR);
SBALCONE = digitalRead(IBALCONE);
// controlla che l'input ALL OFF sia HIGH (pulsante premuto)
if (valalloff == HIGH) {
delay(100);
if (SCORR == HIGH) {
digitalWrite(OCORR, LOW);
delay(300);
digitalWrite(OCORR, HIGH);
delay(100);
Serial.println("Luce Corridoio");
}
if (SCUCINA == HIGH) {
delay(100);
digitalWrite(OCUCINA, LOW);
delay(300);
digitalWrite(OCUCINA, HIGH);
Serial.println("Luce Cucina");
delay(100);
}
if (SSALA == HIGH) {
delay(100);
digitalWrite(OSALA, LOW);
delay(300);
digitalWrite(OSALA, HIGH);
Serial.println("Luce Sala");
delay(100);
}
if (SBAGNOP == HIGH) {
delay(100);
digitalWrite(OBAGNOP, LOW);
delay(300);
digitalWrite(OBAGNOP, HIGH);
Serial.println("Luce Bagno Piccolo");
delay(100);
}
if (SBAGNOG == HIGH) {
delay(100);
digitalWrite(OBAGNOG, LOW);
delay(300);
digitalWrite(OBAGNOG, HIGH);
Serial.println("Luce Bagno Grande");
delay(100);
}
if (SCBIMBO == HIGH) {
delay(100);
digitalWrite(OCBIMBO, LOW);
delay(300);
digitalWrite(OCBIMBO, HIGH);
Serial.println("Luce Camera Bambino");
delay(100);
}
if (SCSTUDIO == HIGH) {
delay(100);
digitalWrite(OCSTUDIO, LOW);
delay(500);
digitalWrite(OCSTUDIO, HIGH);
Serial.println("Luce Studio");
delay(200);
}
if (SCMATR == HIGH) {
digitalWrite(OCMATR, LOW);
delay(500);
digitalWrite(OCMATR, HIGH);
Serial.println("Luce Camera Matrimoniale");
delay(200);
}
if (SBALCONE == HIGH) {
delay(100);
digitalWrite(OBALCONE, LOW);
delay(500);
digitalWrite(OBALCONE, HIGH);
Serial.println("Luce Balcone");
delay(200);
}
}
}