Semaforo

Salve !
Sto frequentando il secondo anno per perito informatico e adesso siamo alle prese con questo meraviglioso giocattolino che è un vero computer miniaturizzato.
Ho realizzato un semplice semaforo e funziona benissimo e vi posterò il progetto.
Vorrei semplicemente aggiungere il funzionamento dei veri semafori cioè che quando ad una certa ora il semaforo si spegna e funzionano solo i led gialli lampeggianti .
Chi è disposto ad aiutarmi?

void setup() {
 for(int pin=8; pin<=13; pin++){
  
  pinMode(pin,OUTPUT);
 } 
}

void loop() {
  
 digitalWrite(13,HIGH);
 digitalWrite(8,HIGH);
 delay(4000);
 digitalWrite(12,HIGH);
 digitalWrite(9,HIGH);
 delay(2000); 
 digitalWrite(12,LOW);
 digitalWrite(9,LOW);
 digitalWrite(13,LOW);
 digitalWrite(8,LOW);
 
 digitalWrite(10,LOW);
 digitalWrite(10,HIGH);
 digitalWrite(11,HIGH);
 delay(4000);
 digitalWrite(12,HIGH);
 digitalWrite(9,HIGH);
 delay(2000);
 digitalWrite(12,LOW);
 digitalWrite(9,LOW);
 digitalWrite(10,LOW);
 digitalWrite(11,LOW);
  
 

}

Beh, Arduino non ha un orologio, quindi devi aggiungere un modulo RTC.
Poi semplicemente, una variabile booleana vero/falso distingue con un if la parte di codice che lampeggia (usando millis e NON delay, vedi esempio BlinkWithoutDelay) dalla parte di funzionamento diurno.
Sempre nella loop, ci deve essere una verifica dell'ora del RTC per settare la variabile booleana a vero/falso.

perche non si puo contare i cicli che sono interno al loop?. Per esempio dopo tot cicli allora fai questo cioe, i led gialli li fai lampeggiare!

Per il momento ho usato una fotoresistenza e gli faccio lampeggiare quando c’è una intensita luminosa poi quando arriva ad un certo valore i led gialli lampeggiano

un po cosi;

if (luminosita<300){

//il ciclo normale del semaforo
}
else{

// i led gialli lampeggiano
}

Mar52:
perche non si puo contare i cicli che sono interno al loop?. Per esempio dopo tot cicli allora fai questo cioe, i led gialli li fai lampeggiare!

... e ti sembra quello un modo per fare "... che quando ad una certa ora il semaforo si spegna e funzionano solo i led gialli lampeggianti" ? ? ?

Da dove pensi di leggere "una certa ora" se non c'è un orologio a bordo ? ? ?

Se non vuoi mettere un modulo RTC, perché essendo solo un esercizio non ti serve la precisione del secondo, comunque devi costruire un orologio via "software" (... piuttosto poco preciso, ma comunque fattibile).

Guglielmo

Quello era solo un esempio di come ho usato un istruzione che serviva per accendere un led ad una certa luminosità .Io l'ho adattata per fare in modo che all'imbrunire della sera , cioè ad una certa luminosità e quindi ad una certa ora , il normale funzionamento del semaforo cessasse e cominciasse il sistema dei gialli lampeggianti, cosi all'incontrario la mattina ad una certa luminosità il semaforo riprendesse il normale funzionamento!
Quello che chiedo se cera un' istruzione che conta i cicli , quelli dentro il loop!
Evidentemente non esiste altrimenti qualche persona più esperta di me lo avrebbe postato!
Io avevo pensato ad un conteggio dei cicli con il while ! o no!!!!???

Quello che chiedo se cera un’ istruzione che conta i cicli , quelli dentro il loop!

Usi una variabile, ad esempio Count che ad ogni ciclo incrementi
es:
unsigned long Count++ ;

poi con un IF controlli a che punto e’ arrivata, nello stesso modo che hai usato per la fotocellula

if (Count <= 300){

//il ciclo normale del semaforo
}
else{

// i led gialli lampeggiano
}

Mar52:
perche non si puo contare i cicli che sono interno al loop?. Per esempio dopo tot cicli allora fai questo cioe, i led gialli li fai lampeggiare!

Non serve contare i cicli. Hai la funzione millis() che conta i millisecondi da quanto é acceso Arduino.
Puoi usare quello che dopo per esempio 5 minuti va nel modo motturno e dopo altri 5 minuti passa al ciclo giorno.
vita di usare il delay() perché blocca il codice. prova di fare i ritardi con millis().

Ciao Uwe

Grazie a Brunello ma dopo per farlo ritornare al ciclo normale?
Puoi farmi un po di codice Uwe?
Anticipatamente ringrazio!