spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 16-02-2018, 17.50.06
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 22
888vita E' per ora ancora un mistero
Predefinito orologio con modulo rtc con lcd problema help

ciao ragazzi, vi chiedo un piccolo aiuto, ho assemblato questo orologio ma non capisco il motivo il perché quando spengo l'arduino l'orologio e il calendario rimane fermo. se carico lo sketchup l'ora e il calendario si regola da solo in base al'ora e alla data del PC, *fin qui va bene ma perche quando lo spengo rimane tutto congelato al giorno precedente? chi mi può aiutare?

ps. la batteria e carica

mi chiedo ma nel modulo rtc c'è un pin bat come va utilizzato?



lo sketchup che carico e il seguente



Codice:
#include "Wire.h"
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

RTC_DS1307 RTC;

void setup ()
{
 lcd.begin(20, 4);
 Serial.begin(9600);
 Wire.begin();
 RTC.begin();
 // Se l'ora e' errata la aggiorna
 // con quella del computer
 DateTime OraRTC = RTC.now();
 DateTime OraPC = DateTime(__DATE__, __TIME__);
 if (OraRTC.unixtime() < OraPC.unixtime())
 * Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
 RTC.adjust(OraPC);
 if (! RTC.isrunning())
 * lcd.print("RTC is NOT running!");
}

void printShortDateTime(DateTime now)
{
 char buffer[25] = {'\0'};
 sprintf(buffer, "%02u/%02u/%u %02u:%02u:%02u",
 * * * * now.day(), now.month(), now.year(),
 * * * * now.hour(), now.minute(), now.second());
}

void printLongDateTime(DateTime now)
{
 const char* days[] = *{ *"Lunedi", "Marted", "Mercol","Gioved'", "Venerd", "Sabato", "Domeni"
 * * * * * * * * * * * };
 const char* months[] = { "Gennaio", "Febbraio", "Marzo", "Aprile",
 * * * * * * * * * * * * *"Maggio", "Giugno", "Luglio", "Agosto",
 * * * * * * * * * * * * *"Settembre", "Ottobre", "Novembre *", "Dicembre "
 * * * * * * * * * * * *};
 char buffer[40];

 sprintf(buffer, "%s, %u %s %u %02u:%02u:%02u",
 * * * * days[now.dayOfWeek() - 1], 
 * * * * now.day(), 
 * * * * months[now.month() - 1], 
 * * * * now.year(),
 * * * * now.hour(), 
 * * * * now.minute(), 
 * * * * now.second());
 * * * * lcd.print(buffer);

}

void loop ()
{
 lcd.setCursor(0, 0);
 printLongDateTime(RTC.now());
 printShortDateTime(RTC.now());
 delay(1000);
}

adesso ho un altro problema non lo riesco piu a caricare mi da questo errore cosa si tratta?

Arduino:1.8.5 (Windows 7), Scheda:"Arduino/Genuino Uno"

C:\Users\Chicco\Desktop\Nuova cartella\Varie\arduino progetti e altro\orologio AL MOMENTO IN USO\orologio\orologio\orologio.ino: In function 'void printLongDateTime(DateTime)':

orologio:43: error: 'class DateTime' has no member named 'dayOfWeek'

days[now.dayOfWeek() - 1],

^

exit status 1
'class DateTime' has no member named 'dayOfWeek'

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Ultima modifica di 888vita : 16-02-2018 alle ore 17.52.56
Rispondi citando
  #2  
Vecchio 17-02-2018, 10.46.44
ivotek ivotek non è collegato
Robottaro sostenitore
 
Data registrazione: 30-11-2003
Residenza: Ostia Lido
Età : 43
Messaggi: 736
Potenza reputazione: 83
ivotek E' sulla buona strada
Invia un messaggio via MSN a ivotek Invia un messaggio via Yahoo a ivotek
Predefinito

Che librerie usi?
Le hai incorporate con la funzione "Gestione librerie" oppure le hai copiate nella cartella librerie?
Dove le hai scaricate?

Per quanto riguarda il mantenere in memoria l'ora, se la batteria è carica non dovresti avere problemi.
Carica uno Sketch di esempio e vedi come si comporta, ma credo che sia un problema della scheda.


Ciao
__________________
http://www.ivotek.it
Rispondi citando
  #3  
Vecchio 17-02-2018, 12.17.20
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 22
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da ivotek Visualizza messaggio
Che librerie usi?
Le hai incorporate con la funzione "Gestione librerie" oppure le hai copiate nella cartella librerie?
Dove le hai scaricate?

Per quanto riguarda il mantenere in memoria l'ora, se la batteria è carica non dovresti avere problemi.
Carica uno Sketch di esempio e vedi come si comporta, ma credo che sia un problema della scheda.


Ciao
ciao, per quanto riguarda la libreria ho risolto adesso lo cancellata e rimessa adesso funziona,

batteria e perfetta il modulo sembra funzionare, per caso hai notato qualche errore nello sketchup che mi sarà sfuggito?
Rispondi citando
  #4  
Vecchio 17-02-2018, 12.49.18
ivotek ivotek non è collegato
Robottaro sostenitore
 
Data registrazione: 30-11-2003
Residenza: Ostia Lido
Età : 43
Messaggi: 736
Potenza reputazione: 83
ivotek E' sulla buona strada
Invia un messaggio via MSN a ivotek Invia un messaggio via Yahoo a ivotek
Predefinito

Fai questa prova:
1) Carica il programma come hai sempre fatto.
2) Commenta il comando DateTime OraPC etc
3) Ricarica il programma su Arduino
4) Vedi se ti ha tenuto in memoria i vecchi dati.

Commenta anche:
if (OraRTC.unixtime() < OraPC.unixtime())
* Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
RTC.adjust(OraPC);

In sintesi carica lo schetch per sincronizzare l'orologio è poi carica uno schetch che NON sincronizza l'orologio.


Presumo che il modello sia il ds1307?
__________________
http://www.ivotek.it

Ultima modifica di ivotek : 17-02-2018 alle ore 13.26.00 Motivo: Aggiunta informazioni
Rispondi citando
  #5  
Vecchio 17-02-2018, 14.28.36
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 22
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da ivotek Visualizza messaggio
Fai questa prova:
1) Carica il programma come hai sempre fatto.
2) Commenta il comando DateTime OraPC etc
3) Ricarica il programma su Arduino
4) Vedi se ti ha tenuto in memoria i vecchi dati.

Commenta anche:
if (OraRTC.unixtime() < OraPC.unixtime())
* Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
RTC.adjust(OraPC);

In sintesi carica lo schetch per sincronizzare l'orologio è poi carica uno schetch che NON sincronizza l'orologio.


Presumo che il modello sia il ds1307?
si modulo ds1307

hai un esempio di schetch per provarlo?
Rispondi citando
  #6  
Vecchio 17-02-2018, 15.03.11
ivotek ivotek non è collegato
Robottaro sostenitore
 
Data registrazione: 30-11-2003
Residenza: Ostia Lido
Età : 43
Messaggi: 736
Potenza reputazione: 83
ivotek E' sulla buona strada
Invia un messaggio via MSN a ivotek Invia un messaggio via Yahoo a ivotek
Predefinito

Fai una prova come ti ho detto, ti spiego i perché:

Con l'istruzione DateTime(__DATE__, __TIME__) tu prelevi l'orario e il tempo in cui lo Schetch è stato compilato e non l'orario e la data del PC corrente.
Sì, è vero che coincidono perché L'IDE Arduino compila e carica lo Schetch nello stesso tempo, ma sono due cose differenti.

Con l'istruzione:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime())
Tu controlli se la data del RTC è minore di quella di compilazione (e non del PC), condizione sempre falsa.

In più, l'istruzione seguente:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime()) Serial.println("L'RTC e' indietro! Lo aggiorno con quello del C!");
RTC.adjust(OraPC);
E' differente dall'istruzione seguente:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime()){
             Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
             RTC.adjust(OraPC);
}
Nel secondo caso, se l'istruzione è vera si esegue la stampa con Serial.println() e poi l'istruzione di assegnazione RTC.adjust(OraPC).

Nel primo caso no, nel primo caso, se l'istruzione è vera si esegue solo la stampa Serial.println().
L'istruzione RTC.adjust(OraPC) viene sempre eseguita cambiandoti l'ora con quella di compilazione.
__________________
http://www.ivotek.it
Rispondi citando
  #7  
Vecchio 17-02-2018, 15.42.38
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 22
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da ivotek Visualizza messaggio
Fai una prova come ti ho detto, ti spiego i perché:

Con l'istruzione DateTime(__DATE__, __TIME__) tu prelevi l'orario e il tempo in cui lo Schetch è stato compilato e non l'orario e la data del PC corrente.
Sì, è vero che coincidono perché L'IDE Arduino compila e carica lo Schetch nello stesso tempo, ma sono due cose differenti.

Con l'istruzione:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime())
Tu controlli se la data del RTC è minore di quella di compilazione (e non del PC), condizione sempre falsa.

In più, l'istruzione seguente:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime()) Serial.println("L'RTC e' indietro! Lo aggiorno con quello del C!");
RTC.adjust(OraPC);
E' differente dall'istruzione seguente:
Codice:
if (OraRTC.unixtime() < OraPC.unixtime()){
             Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
             RTC.adjust(OraPC);
}
Nel secondo caso, se l'istruzione è vera si esegue la stampa con Serial.println() e poi l'istruzione di assegnazione RTC.adjust(OraPC).

Nel primo caso no, nel primo caso, se l'istruzione è vera si esegue solo la stampa Serial.println().
L'istruzione RTC.adjust(OraPC) viene sempre eseguita cambiandoti l'ora con quella di compilazione.
mi sono ritrovato questo Schetch, se imposto la data e l'ora e spengo l'Arduino non rimane in memoria, se regolo l'ora con il primo Schetch e poi carico il secondo Schetch rimane in memoria come mai?

Codice:
#include <LiquidCrystal_I2C.h>
#include "Wire.h"
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527

void setup(){
  lcd.begin(20, 4);
  Wire.begin();
  

  
  Serial.begin(9600);
  setDateTime(); //MUST CONFIGURE IN FUNCTION
}

void loop(){
  printDate();
  delay(1000);
}

void setDateTime(){

  byte second =      0; //0-59
  byte minute =      24; //0-59
  byte hour =        16; //0-23
  byte weekDay =     3; //1-7
  byte monthDay =    17; //1-31
  byte month =       02; //1-12
  byte year  =       18; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));

  Wire.write(zero); //start 

  Wire.endTransmission();

}

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

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);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);
  lcd.clear ();
  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());

  //print the date EG   3/1/11 23:59:59
  lcd.setCursor(0, 0);
  lcd.print(month);
  lcd.print("/");
  lcd.print(monthDay);
  lcd.print("/");
  lcd.print(year);
  lcd.print(" ");
  lcd.print(hour);
  lcd.print(":");
  lcd.print(minute);
  lcd.print(":");
  lcd.print(second);

}


Codice:
#include "Wire.h"
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

RTC_DS1307 RTC;

void setup () {
  lcd.begin(20, 4);
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
 
}

void printShortDateTime(DateTime now) {
  char buffer[25] = {'\0'};
  sprintf(buffer, "%02u/%02u/%u %02u:%02u:%02u",
          now.day(), now.month(), now.year(),
          now.hour(), now.minute(), now.second());
}

void printLongDateTime(DateTime now) {
  const char* days[] =  {  "Lunedi", "Marted", "Mercol", "Gioved'", "Venerd", "Sabato", "Domeni"
                        };
  const char* months[] = { "Gennaio", "Febbraio", "Marzo", "Aprile",
                           "Maggio", "Giugno", "Luglio", "Agosto",
                           "Settembre", "Ottobre", "Novembre  ", "Dicembre "
                         };
  char buffer[40];

  sprintf(buffer, "%s, %u %s %u %02u:%02u:%02u",
          days[now.dayOfWeek() - 1],
          now.day(),
          months[now.month() - 1],
          now.year(),
          now.hour(),
          now.minute(),
          now.second());
  lcd.print(buffer);

}

void loop ()
{
  lcd.setCursor(0, 0);
  printLongDateTime(RTC.now());
  printShortDateTime(RTC.now());
  delay(1000);
}
ps ho modificato il secondo Schetch togliendo questa parte

// Se l'ora e' errata la aggiorna
// con quella del computer
DateTime OraRTC = RTC.now();
DateTime OraPC = DateTime(__DATE__, __TIME__);
if (OraRTC.unixtime() < OraPC.unixtime())
Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
RTC.adjust(OraPC);
if (! RTC.isrunning())
lcd.print("RTC is NOT running!");
Rispondi citando
  #8  
Vecchio 17-02-2018, 16.21.05
ivotek ivotek non è collegato
Robottaro sostenitore
 
Data registrazione: 30-11-2003
Residenza: Ostia Lido
Età : 43
Messaggi: 736
Potenza reputazione: 83
ivotek E' sulla buona strada
Invia un messaggio via MSN a ivotek Invia un messaggio via Yahoo a ivotek
Predefinito

Perché, come ti ho scritto sopra, la data e l'ora la imposti con il primo Sketch e non la reimposti con il secondo schetch.
Infatti, nel secondo schetch, non c'è l'istruzione RTC.adjust(OraPC) o l'istruzione setdatetime()

In questo modo rimane la vecchia ora che è corretta.

Le istruzioni che hai tolto ti cambiavano l'ora e la data, inserendo la data e l'ora di compilazione dello schetch, che è errata.
__________________
http://www.ivotek.it
Rispondi citando
  #9  
Vecchio 17-02-2018, 23.16.00
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 22
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da ivotek Visualizza messaggio
Perché, come ti ho scritto sopra, la data e l'ora la imposti con il primo Sketch e non la reimposti con il secondo schetch.
Infatti, nel secondo schetch, non c'è l'istruzione RTC.adjust(OraPC) o l'istruzione setdatetime()

In questo modo rimane la vecchia ora che è corretta.

Le istruzioni che hai tolto ti cambiavano l'ora e la data, inserendo la data e l'ora di compilazione dello schetch, che è errata.
c'è un altro problema non riconosce la domenica

Rispondi citando
  #10  
Vecchio 18-02-2018, 15.16.14
ivotek ivotek non è collegato
Robottaro sostenitore
 
Data registrazione: 30-11-2003
Residenza: Ostia Lido
Età : 43
Messaggi: 736
Potenza reputazione: 83
ivotek E' sulla buona strada
Invia un messaggio via MSN a ivotek Invia un messaggio via Yahoo a ivotek
Predefinito

Prova mettendo la domenica prima del lunedì.
Ma gli altri giorni della settimana appaiono senza problemi?

Perché leggo dicembre?
Lo sketch inserito è quello del post precedente?
__________________
http://www.ivotek.it

Ultima modifica di ivotek : 18-02-2018 alle ore 15.19.11 Motivo: Aggiunta informazioni.
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Modulo LCD Alan100 Arduino 7 28-12-2012 18.21.38
Alcune domande per un orologio Davuzz11 Elettronica 21 09-02-2010 18.08.23
timer del pic uso come orologio max8946 E. Digitale 13 10-06-2009 17.51.11
Orologio digitale marnic Discussioni off-topic 5 22-09-2003 19.53.55
Orologio Server rinux Suggerimenti 1 08-05-2003 23.20.46


Tutti gli orari sono GMT. Adesso sono le: 06.18.21.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB