RTC Shield con DS1307 Errore di compilazione

Salve a tutti. Ho acquistato e saldato questa shield da attaccare alla mia Arduino UNO R3 e seguito passo passo il tutorial del link sottostante:

http://www.mauroalfieri.it/elettronica/tutorial-rtc-shield-con-ds1307.html

Al termine, per test, ho caricato la libreria dal link presente nella stessa pagina, preso lo sketch presente e provato a caricare sulla mia arduino, ma mi appare il seguente errore in fase di compilazione:

Arduino:1.6.4 (Windows 8.1), Scheda:"Arduino Uno"

In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/WString.h:29:0,
                 from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Print.h:26,
                 from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
                 from C:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
                 from C:\Users\Administrator\Documents\Arduino\libraries\RTClib\RTClib.cpp:4:
C:\Users\Administrator\Documents\Arduino\libraries\RTClib\RTClib.cpp:17:31: error: variable 'daysInMonth' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
                               ^
Errore durante la compilazione

  Questo report potrebbe essere più ricco
di informazioni con
  "Mostra un output dettagliato durante la compilazione"
  abilitato in "File > Impostazioni"

Ho provato di tutto, ma senza esito. Potete aiutarmi per cortesia? Grazie per la vostra attenzione. Saluti

Attilio

Ciao

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Libreria “vecchia”. Prova ad usare l’IDE 1.0.6

Ciao e grazie per avermi risposto.
Sinceramente, invece di tornare indietro di versione, ho preferito cercare qualche cosa di nuovo e mi sono imbattuto in una nuova libreria e in uno sketch che, caricato, funziona e mi riporta correttamente data e ora (dopo aver settato quella di partenza). Allego codice e la libreria in questione se può essere utile.

#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>


void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}

void loop() {
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

Alla luce di tutto questo, e partendo da questo sketch (visto che la libreria funziona), il mio scopo sarebbe quello di creare un timer che mi possa far scattare un modulo relè a due uscite (foto in allegato), per accendere due luci a orari differenti. Pensate sia fattibile o troppo complicato per uno con poche conoscenze di programmazione come me? Potete aiutarmi?
Grazie

DS1307RTC.zip (4.52 KB)

modulo relè.jpg

nid69ita:
Libreria “vecchia”. Prova ad usare l’IDE 1.0.6

Avevi ragione. Per fare una prova ho installato la versione 1.0.5 (la 1.0.6 non l’ho trovata), e la compilazione è andata a buon fine. Una volta verificato ciò, ho provato a fare i collegamenti e a caricare lo sketch che metto di seguito, ma non funziona il relè. Qualche suggerimento?

#include <Wire.h>
#include <RTClib.h>


// PIN definitions
#define RELAY_PIN 8

// FSM states
#define STATE_OFF  0
#define STATE_ON   1

// Timer settings
#define START_TIME  1723
#define END_TIME    1724

// variables
RTC_DS1307 RTC;
int fsm_state;

void setup() {
 
 Serial.begin(9600);
 Serial.println("SimpleTimer running...");
 Serial.println();

 Wire.begin();
 RTC.begin();  

 pinMode(RELAY_PIN, OUTPUT);
 digitalWrite(RELAY_PIN, LOW);
 fsm_state = STATE_OFF;
}

void loop() {

 DateTime now = RTC.now();
 int nowHourMinute = now.hour() * 100 + now.minute();

 // FSM states
 switch(fsm_state) {
   
   case STATE_OFF:
     if(nowHourMinute > START_TIME && nowHourMinute < END_TIME) {
       Serial.print(now.hour(), DEC);
       Serial.print(':');
       Serial.print(now.minute(), DEC);
       Serial.println(", it's time to wake up!");
       digitalWrite(RELAY_PIN, HIGH);
       fsm_state = STATE_ON;
     }
     break;
   
   case STATE_ON:
     if(nowHourMinute > END_TIME) {
       Serial.print(now.hour(), DEC);
       Serial.print(':');
       Serial.print(now.minute(), DEC);        
       Serial.println(", it's time to go to sleep!");
       digitalWrite(RELAY_PIN, LOW);
       fsm_state = STATE_OFF;
     }    
     break;
 }
}

Grazie!!

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Ma le varie Serial.print, quindi sul monitor seriale, quali messaggi vedi ? Come hai collegato il tutto ?

La 1.0.6 la trovi qui --> http://www.arduino.cc/en/Main/OldSoftwareReleases#previous

nid69ita: Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Ma le varie Serial.print, quindi sul monitor seriale, quali messaggi vedi ? Come hai collegato il tutto ?

Hai ragione e ti chiedo scusa, mi ero dimenticato del tag. Comunque ho collegato gli elementi a pila partendo dal basso con l’arduino, poi sopra il modulo DS1307 e dai pin di quest’ultimo ho fatto partire 3 fili (+5V, Ground e segnale dal pin 8), che ho portato sul modulo relè (modulo Keyes funduino). Ho inserito l’orario di aggancio e quello di sgancio relè, ma una volta caricato su Arduino il relè non scatta quando è il momento e il monitor seriale rimane su ” Simple timer running”. Qualche suggerimento? Grazie ancora

newlife60: Hai ragione e ti chiedo scusa, mi ero dimenticato del tag.

Ma non scrivere solo le Tue scuse; aggiungi i TAG Ciao Uwe

uwefed: Ma non scrivere solo le Tue scuse; aggiungi i TAG Ciao Uwe

Fatto !!! Aggiunti i tag :)