Salve a tutti, come già scritto nella mia presentazione sono un appassionato che si diletta a giocare con componenti elettronici e arduino, cerco sempre di capire dove sbaglio ma in questo caso non trovo il mio errore.
Cercando informazioni anche qui sul forum, ho creato uno sketch che dovrebbe far funzionare il mio progetto che si articola in questo modo:
1° sensore PIR
10 led
2° sensore PIR
I due sensori si trovano all'inizio e alla fine di un corridoio di circa 4 metri senza illuminazione naturale, e questa soluzione eviterebbe di dover camminare al buio, (si il corridoio è provvisto di luci) ma principalmente dovrebbe servire come segnapasso per degli eventuali spostamenti notturni.
Comunque dovrebbe funzionare in questo modo, quando i led vengono attivati dal sensore 1 si accendono in sequenza dal led 1 al led 10 e restano accesi per un tempo x, dopodiché iniziano a spegnersi con la stessa sequenza dal led 1 al led 10.
Quando i led vengono attivati dal sensore 2 si accendono in sequenza dal led 10 al led 1 e restano accesi per un tempo x, dopodiché iniziano a spegnersi con la stessa sequenza dal led 10 al led 1.
Sono riuscito a far funzionare tutto tranne la sequenza finale in cui i led si dovrebbero spegnere dal 10 all'1, invece accade il contrario.
So per certo che avrei potuto fare di meglio e che si potrebbe compattare studiandolo più approfonditamente, ma vi prego di avere pietà delle mie scarse capacità di programmazione.
byte StatoSensore = 0;
unsigned long previousMillis = 0;
unsigned long interval = 3000; //timer
byte ritardo = 50; //attesa.
void setup() {
pinMode(2, OUTPUT); //uscita LED
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, INPUT); //ingresso sensore 1
pinMode(13, INPUT); //ingresso sensore 2
}
void loop() {
StatoSensore = digitalRead(12); //leggo i dati del sensore 1
if (StatoSensore == HIGH) { //sensore attivo
digitalWrite(2, HIGH); //accendi led
previousMillis = millis(); //ricorda il momento in cui lo hai acceso
delay(ritardo); //attendi prima di accendere il led successivo
digitalWrite(3, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(4, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(5, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(6, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(7, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(8, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(9, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(10, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(11, HIGH);
previousMillis = millis();
} else {
if (millis() - previousMillis > interval) {
digitalWrite(2, LOW); //intervallo di tempo passato, spegni il led
delay(ritardo); //attendi prima di spegnere il led successivo
digitalWrite(3, LOW);
delay(ritardo);
digitalWrite(4, LOW);
delay(ritardo);
digitalWrite(5, LOW);
delay(ritardo);
digitalWrite(6, LOW);
delay(ritardo);
digitalWrite(7, LOW);
delay(ritardo);
digitalWrite(8, LOW);
delay(ritardo);
digitalWrite(9, LOW);
delay(ritardo);
digitalWrite(10, LOW);
delay(ritardo);
digitalWrite(11, LOW);
}
delay(ritardo); //aspetta
StatoSensore = digitalRead(13); //leggo i dati del sensore 2
if (StatoSensore == HIGH) { //sensore attivo
digitalWrite(11, HIGH); //accendi led
previousMillis = millis(); //ricorda il momento in cui lo hai acceso
delay(ritardo); //attendi prima di accendere il led successivo
digitalWrite(10, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(9, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(8, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(7, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(6, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(5, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(4, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(3, HIGH);
previousMillis = millis();
delay(ritardo);
digitalWrite(2, HIGH);
previousMillis = millis();
} else {
if (millis() - previousMillis > interval) {
digitalWrite(11, LOW); //intervallo di tempo passato, spegni il led
delay(ritardo); //attendi prima di spegnere il led successivo
digitalWrite(10, LOW);
delay(ritardo);
digitalWrite(9, LOW);
delay(ritardo);
digitalWrite(8, LOW);
delay(ritardo);
digitalWrite(7, LOW);
delay(ritardo);
digitalWrite(6, LOW);
delay(ritardo);
digitalWrite(5, LOW);
delay(ritardo);
digitalWrite(4, LOW);
delay(ritardo);
digitalWrite(3, LOW);
delay(ritardo);
digitalWrite(2, LOW);
}
}
delay(ritardo); //aspetta
}
}
Grazie.