Modulo RTC DS1307

Ciao a tutti. Ho un problema con il mio modulo RTC con chip DS1307. Premetto che l'ho acquistato su ebay, e tolto alcuni componenti come detto dal venditore per farlo funzionare con una normale batteria CR2032 (dato che era previsto per l'utilizzo di una LIR2032). Ho provato ad utilizzare la libreria RTC.h ma ho riscontrato molti problemi. Vorrei creare un programma che: stampa su display l'ora(ho una shield con 6 pulsanti della adafruit che sfrutta i2c), se per un tot di tempo non viene premuto nulla sul display, e se per un altro tot di tempo ancora non si preme nulla si spegne anche la backlight. Poi, se si preme un qualsiasi pulsante la backlight si riaccende e si vede l'ora, e se se ne preme un qualsiasi altro torna a vedersi normalmente le cose.

Ok, ma non ho però capito... da noi cosa vuoi ? Perché non vedo specifiche richieste ...

Guglielmo

Che problema hai col RTC? non l' hai scritto.

O questo é un problema di secondo livello per veggenti. Non si sa ne il problema ne il circuito/sketch? ;) ;) ;) ;) ;) ;) ;) ;) Normalmente una delle due cose si sanno. Ciao Uwe

Avete ragione non mi sono spiegato molto bene. Praticamente non riesco proprio a scrivere ora e data sul display e per lo più quando stacco alimentazione si resetta anche se c'è la batteria tampone. E poi non ho proprio idea di come impostare il programma per spegnere la back e fare che se non si tocca nessun pulsante per un tot di tempo appare l'ora

  • per scrivere data e ora sul display potrebbe andar bene una cosa così:
// variabile per l'RTC
RTC_DS1307 OROLOGIO;
//variabile per la data e l'ora
DateTime DataOra;

// prendi l'ora e data attuale
DataOra = OROLOGIO.now();

// formatti data e ora
char stringa[20];
sprintf(stringa, "  %02d/%02d/%d %02d:%02d", DataOra.day(), DataOra.month(), DataOra.year(), DataOra.hour(), DataOra.minute());

// scrivi data e ora
lcd.clear();
lcd.setCursor(0, 1);
lcd.print( stringa );

ovviamente devi aver incluso tutte le librerie necessarie e aver "configurato" correttamente rtc e lcd.

  • per il reset nonostante la batteria tampone... sicuro di non averlo rotto con la modifica fai-da-te?

  • per il resto forse è meglio vedere lo sketch...

Ciao, verifica anche con i2c scanner se il ds è collegato e l'indirizzo i2c che magari è sbagliato.

Stefano

Sono riuscito. Il mio intento ora è cambiato, vi spiego: ho una fotoresistenza ed un led. Il led si deve accendere gradualmente in base alla fotoresistenza, più è buio e più il led è luminoso. Il tutto che funzioni dalle 6 di mattina alle 20 di sera. Quest'ultimo sono riuscito a farlo, ma il led che regola l'illuminazione no. Fra poco posto anche il codice. P.S.: la fotoresistenza è collegata con un partitore con un resistore da 10kohm. Ho anche provato a vedere l'esempio Fade tra gli sketch di Arduino.

Ciao, facilissimo: piloti il led in PWM e sei a posto ;) Se poi posti anche la risoluzione del tuo problema potrà essere utile ad altri....

Stefano

cam9500:
Ciao, facilissimo: piloti il led in PWM e sei a posto :wink:
Se poi posti anche la risoluzione del tuo problema potrà essere utile ad altri…

Stefano

#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;      // Orologio
DateTime Clock;

const int fotoresistenza = A0;          // fororesistenza

int pinlampada = 9;
int ValoreFotoresistenza = 0;               // valore fotoresistenza
int ValoreLed = 0;
int FotoMin = 1023;              // minimo fotoresistenza
int FotoMax = 0;                 //massimo fotoresistenza
 
void setup() {
pinMode(pinlampada, OUTPUT);//led lampada UV
  RTC.begin();
// record the maximum sensor value
  if (ValoreFotoresistenza > FotoMax) {
    FotoMax = ValoreFotoresistenza;
  }

  // record the minimum sensor value
  if (ValoreFotoresistenza < FotoMin) {
    FotoMin = ValoreFotoresistenza;
  }
void loop()
{

  ValoreFotoresistenza = analogRead(fotoresistenza);
  ValoreFotoresistenza = map (ValoreFotoresistenza, FotoMin, FotoMax, 0, 255);
  ValoreFotoresistenza = constrain(ValoreFotoresistenza, 0, 255);
  ValoreLed = 255 - ValoreFotoresistenza;
  //orologio RTC
  uint8_t hourval, minuteval, secondval;

  DateTime Clock;
  Clock = RTC.now();
  //accensione led lampada UV
  if (Clock.hour() > 1 & Clock.hour() < 21) {
    analogWrite(pinlampada, ValoreLed);
  }
  else {
    analogWrite(pinlampada, LOW);
  }

Cosa c'è che non va? Non funziona...Il led è sempre acceso al massimo!!

che valori ti ritorna la analogRead? se il led è sempre acceso vuol dire che restituisce un valore molto basso... poi, a rigor di logica, il constrain è inutile. map ti restituisce già un valore tra 0 e 255. infine nell'if usi un solo & che però non è l'AND logico. devi usare &&