Semaforo ad orario con luci lampeggianti

Salve a tutti,
sono alle prime armi con arduino e con la programmazione in generale, voglio programmare un semaforo per un incrocio a X che di notte (per esempio dalle 23 alle 05) ha su tutti i semafori le luci gialle lampeggianti. Premetto che sono riuscito a programmare il semaforo per normalmente (quindi la sequenza rosso-verde-giallo…) non riesco a programmare la parte con l’orario.
Grazie in anticipo a tutti coloro che risponderanno.

Buongiorno e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO … Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di farla al più presto. :wink:

Ciao, facile da programmare, ma estremamente impreciso, potresti creare un codice che conterà il valore di millis () o micros (), quando passano i secondi aumenta una variabile per i minuti e quando passano i minuti, aumenta un’altra variabile per le ore, quando 24 passano le ore riavvia l’account e metti in giallo le ore che ti interessano. Questa è la parte facile. Le routine imprecise e più goffe possono perdere fino a 4 secondi al minuto, cosa succede se si verifica un’interruzione di corrente? Andrebbe perso tutto? … ecc. facile ma inefficace.
Per questo ti consiglio di usare un modulo rtc, (real time clock), lo imposti e dimenticati del conteggio, quando sei interessato chiedi l’ora e lavora di conseguenza. Portano anche la propria batteria per le interruzioni di corrente, sono economici e facili da usare con la loro libreria corrispondente. un esempio potrebbe essere questo:
RTC

Migliori saluti

Ciao, grazie mille per la risposta davvero completa! Opterò per un modulo RTC allora, tu credi che per il mio “progetto” mi basti solo uno o devo usarne di più?

Se usi solo una scheda arduino, solo un rtc, se usi più arduino dovrebbe essere visto quale sarebbe più ottimale / facile, se uno per scheda, o solo uno e comunicare le schede tra loro.
Saluti.

Va bene, grazie.

Buongiorno a tutti, per l’esame di maturità devo portare un progetto fatto con arduino (a scuola è stato trattato pochissimo, solo per l’accensione dei led). Nel progetto mi serve far accendere dei led solo in un determinato orario, quindi devo usare un modulo RTC. Mi potete consigliare quale modulo prendere (possibilmente con consegne veloci perchè lo devo finire il prima possibile) e dove posso trovare qualche libreria?

@xmichelex : ho riunito io il tuo post con questo thread … NON aprire thread differenti se l’argomento è simile. Il RTC è coinvolto in questo progetto, quindi, in questo thread continua a chiedere informazioni. Grazie.

Guglielmo

Se hai amazon prime: DS3231
Da librerie, installi quella per il DS3231, è un modulo I2C
Necessita di batteria CR2032 per mantenere la data/ora quando non alimentato

Va bene scusami.

Perfetto grazie.

Buongiorno a tutti, ieri mi è arrivato il modulo DS3231, l’ho programmato seguendo un tutorial su youtube (di Paolo Aliverti) dove lo programmo per visualizzare l’ora. Qualcuno mi può dire ora come faccio a programmare Arduino per far si che in un arco di tempo (esempio dalle 13 alle 15) faccia lampeggiare dei led?
Ripeto a tutti che questa è la mia prima esperienza con Arduino. Grazie in anticipo a tutti coloro che risponderanno.

a=date.hour();
if ((a>=13)&&(a<=15)) {
lampegglare led
}
Saluti.

Grazie, quindi devo creare questa variabile che chiamo “a”. Quindi basta che nel programma che ho già creato inserisco quella piccola parte che mi hai inviato? O no?

Si, con le dovute correzioni.
Gonpezzi fa riferimento a “date” come variabile/oggetto che fa riferimento al rtc
Bisogna vedere nel tuo esempio come si chiama

void loop() {
  // in questa fase viene scritto il vero programma per la gestione dei led:
  digitalWrite(11, HIGH); //Pin 11 e led verde accesi
  digitalWrite(5, HIGH); //Pin 5 e led verde accesi

  digitalWrite(10, HIGH); //Pin 10 e led rosso accesi
  digitalWrite(4, HIGH); //Pin 4 e led rosso accesi

  delay(25000); //25 s di pausa

  digitalWrite(11, LOW); //Pin 11 e led verde spenti
  digitalWrite(5, LOW); //Pin 5 e led verde spenti

  digitalWrite(12, HIGH); //Pin 12 e led giallo accesi
  digitalWrite(6, HIGH); //Pin 6 e led giallo accesi

  delay(5000); //5 s di pausa

  digitalWrite(10, LOW); //Pin 10 e led rosso spenti
  digitalWrite(4, LOW); //Pin 4 e led rosso spenti
  digitalWrite(12, LOW); //Pin 12 e led giallo spenti
  digitalWrite(6, LOW); //Pin 6 e led giallo spenti

  digitalWrite(8, HIGH); //Pin 8 e led verde accesi
  digitalWrite(2, HIGH); //Pin 2 e led verde accesi
  digitalWrite(13, HIGH); //Pin 13 e led rosso accesi
  digitalWrite(7, HIGH); //Pin 7 e led rosso accesi

  delay(25000); //25 s di pausa

  digitalWrite(8, LOW); //Pin 8 e led verde spenti
  digitalWrite(2, LOW); //Pin 2 e led verde spenti

  digitalWrite(9, HIGH); //Pin 9 e led giallo accesi
  digitalWrite(3, HIGH); //Pin 3 e led giallo accesi

  delay(5000); //5 s di pausa

  digitalWrite(9, LOW); //Pin 9 e led giallo spenti
  digitalWrite(3, LOW); //Pin 3 e led giallo spenti
}`Testo preformattato`

Buongiorno, questo è il codice che ho per controllare l’accensione dei diversi led, come ho detto in precedenza mi manca solo programmare la parte ad orario. Se cortesemente mi potreste dire come fare utilizzando proprio il codice ve ne sarei grato.

@xmichelex : in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post QUI sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l’icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com’è non è molto leggibile … assicurati di averlo correttamente indentato nell’IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all’intero del IDE). Per maggiori informazioni … punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto. :wink:

Piccolo aggiornamento, sono riuscito a includere una libreria dell’RTC che mi legge l’orario da intervallo di un minuto…mi manca solo di “scrivere” la parte dell’orario in cui tutti i led devono spegnersi tranne 4.

Devi usare una istruzione if
Leggi l’orario, e questo dipende da QUALE libreria usi, non c’e’ una unica lib, c’e’ ne sono tante.
Poi con la if, metti dentro alla parte vera il codice che lampeggia e nella parte falsa il codice per spegnere i led.
Se l’orario in cui vuoi accendere/spegnere è semplice tipo dalla 13:00 alle 15:00 accendo, è una if semplice, se intervallo è invece voglio acceso tra le 22:00 e le 4:00 è più complesso perchè passa la mezzanotte.
supponiamo la lib abbia oggetto (prima della setup()
RTClib myRTC;
allora nella loop() come prima cosa:

  DateTime now = myRTC.now();
  int hh=now.hour();
  if(hh>=13 && hh<=15)
  {   tutto il pezzo che lampeggia
  }
  else
  { digitalWrite(led,LOW); ...... spegni i 4 led che devi
  }

P.S. sul sito di mauro alfieri ci sono molti tutorial