Orologio RTC 7 segment 4 digit

Salve,
vorrei costruire un orologio con un display 7 segment e il DS1307... poi vorrei aggiungerci funzioni ma quello verrà dopo
Fino ad ora sono riuscito a far funzionare il display da solo con la libreria SevSeg e ho provato ad inserire anche un int al posto del valore ma non riesco a farlo comunicare con lo sketch di esempioTime...

//Simple number displayer

#include "SevSeg.h"

//Create an instance of the object.
SevSeg sevseg;
int time = 1820; //Example number

void setup() {
  //I am using a common anode display, with the digit pins connected
  //from 2-5 and the segment pins connected from 6-13
  sevseg.Begin(0,2,3,4,5,6,7,8,9,10,11,12,13);
  
}

void loop() {
  sevseg.PrintOutput(); //Produce an output on the display
  sevseg.NewNum(time,2); //Number to be displayed, the second argument is the , place
  
}

Qualcuno potrebbe aiutarmi? :slight_smile:

PS: in futuro vorrei pilotare il display con il 74HC595 e questa libreria però non ce l'ho ancora e non voglio aspettare il prossimo ordine per averlo... intanto ho un 74HC164 solo che non ho trovato nulla di analogo...

edit by mod:
di 4 link che hai messo, non ce n'era uno corretto... bisogna controllare i messaggi prima di pubblicarli :stuck_out_tongue:

La libreria Time di per sé è imprecisa. Senza hardware esterno o senza mezzi per poter aggiornare l'orario dipende dall'imprecisione del risonatore ceramico, molto elevata.
Parti subito prevedendo un RTC esterno per non dover poi buttar via mezzo codice.

Se cerchi in rete ci sono una MAREA di esempi di orologi fatti con i display a 7 segmenti. Cerca e troverai quello che fa per te.

Sì sì come ho scritto il rtc è previsto e intendevo lo sketch che lo includeva
ho cercato tutto il giorno ma non ho trovato nulla che utilizzasse il mio hardware o come voglio io...

Potresti aiutarmi?

Ricapitoliamo.
Di che HW disponi al momento? Non quello che vuoi acquistare, ma quello che hai ora in mano.

Arduino UNO
7-Segment Display
Real Time Clock Module
74HC164
Questo è il materiale che ho al momento.. Grazie in anticipo :slight_smile:

Il display già lo piloti senza problemi.
L'RTC si aggancia ai pin A4 e A5 (oppure SDA/SCL se hai una UNO R3) e su internet trovi tanti esempi di codice e librerie. Io uso quella di Adafruit:

Una volta connesso, non devi fare altro che chiedere all'RTC l'ora e visualizzarlo sul display come già stai facendo.

leo72:
Una volta connesso, non devi fare altro che chiedere all'RTC l'ora e visualizzarlo sul display come già stai facendo.

Mi mancava appunto questo passaggio... non riesco a prendere il valore hh.mm e darlo al display :roll_eyes:

Hai cercato "ds1307 arduino" su internet? No, perché altrimenti non facevi la domanda: 172.000 risultati.
Devi dare alimentazione a quel modulo con VCC e GND presi dai pin di Arduino, poi collegare SDA e SCL ai pin che ti ho detto. Per usare la libreria non devi fare altro che leggere:

A questo punto interroghi l'RTC, prendi ora e minuti e poi li passi alla libreria SevSeg che stai usando.

Di più veramente non posso, mica posso farti io il codice, eh! :wink:

Ho già fatto tutto ciò, l'unico passaggio che mi manca è prendere il valore dall'RTC e darlo al display...
Non so come si fa! Non conosco abbastanza il codice... ho chiesto solo un aiuto eh :expressionless:

Maxidvd, hai letto il link che ti ho passato?
Lì c'è tutta la spiegazione di come collegare un RTC, c'è il codice da usare e c'è spiegato come usarlo.

Letta già prima, provati gli esempi e funziona tutto fino a che è nel monitor seriale... ma non so come prendere le ore e i minuti, farci un numero a 4 cifre e darlo al display.
Ripeto mi manca quella linea di codice per passare da uno all'altro

Hai detto che non ti funziona l'esempio che hai postato, cioè non riesci a visualizzare nulla sul display nemmeno con quell'esempio banale? prova a cambiare nome alla variabile "time", che non stia andando in conflitto software con il linguaggio o con la libreria dell'RTC

Nono, il display e il RTC funzionano da soli ma non so che valori prendere dal RTC e in che modo metterli nell'int "time" per farli andare assieme

nel link che ti ha passato leo è spiegato come prelevare le ore ed i minuti dall'RTC, una volta che hai questi valori li devi assegnare alla variabile time, facendo attenzione ai tipi, dov'è la difficoltà?

Ho provato a caricare questo prendendo da bildr e da quello postato ieri ma non va.. cioè si vedono delle cifre appena visibili e sbagliate

#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include "SevSeg.h"

SevSeg sevseg;

void setup(){
  Wire.begin();
  sevseg.Begin(0,1,2,3,4,5,6,7,8,9,10,11,12);
}


void loop() {
  printDate();
  
}

byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());
  int time = hour + minute;

  sevseg.PrintOutput();
  sevseg.NewNum(time,2);

}

maxidvd:
Ho provato a caricare questo prendendo da bildr

Scusa se sono diretto, ma se continui a copia-e-incollare codice scritto da altri non imparerai mai.

Scusa ma sto cercando di imparare e non vedo altri metodi visto che nessuno è tanto gentile da spiegarmi le cose...
Proposte?

sì, muoversi con pazienza per piccoli passi, riparti dal display perfettamente funzionante che visualizza correttamente un qualsiasi valore numerico da te impostato. Al secondo step ricavati dalle istruzioni il comando per ricevere le ore o i minuti dall'RTC, a questp punto prova ad assegnare alla tua variabile di visualizzazione il valore ricevuto dall'RTC, una volta che riesci a vedere le ore procedi col resto.
Non avendo idea di come fare se cerchi di fare tutto non fai niente.

maxidvd:
Scusa ma sto cercando di imparare e non vedo altri metodi visto che nessuno è tanto gentile da spiegarmi le cose...
Proposte?

Questo non me lo dovevi dire.
Sono 2 pagine che ti sto mettendo link a tutto spiano, facendo quello che dovevi fare tu, ossia prendere Google e metterti a cercarti le cose che ti interessano. Dopo 2 pagine in cui ti ho dato tutti i link per poter fare la cosa con un MINIMO di impegno da parte tua, te ne esci che qui nessuno è tanto gentile da spiegarti le cose?

Facciamo così, mi PAGHi, io vengo a casa tua e ti faccio un corso dalla A alla Z.

Ora, se vuoi continuare a chiedere aiuto per favore impegnati a produrre qualcosa di TUO, altrimenti chiudiamo qui la discussione e tanti saluti. Ho fatto più di mezzanotte ieri a cercarti le cose e questo è il tuo ringraziamento??

leo72:
Maxidvd, hai letto il link che ti ho passato?
Lì c'è tutta la spiegazione di come collegare un RTC, c'è il codice da usare e c'è spiegato come usarlo.

Non per fare il puntiglioso, 1:42.