- Codice: Seleziona tutto
#include <LCD.h>
#include <LiquidCrystal.h>
/* --------------------------------------------------------------------------
Imposto l'orario su un modulo RTC (con interfaccia seriale I2C) tramite il
keypad (# per settare la data e * per settare l'orario) e poi lo mostro su
un display LCD 20x4 con interfaccia seriale I2C "YwRobot Arduino LCM1602
IIC V1". Il pin SDA di I2C è connesso alla pin analogico A4 mentre SCL e'
connesso alla pin analogico A5
-------------------------------------------------------------------------- */
#include "Wire.h" // E' richiesta da I2CIO.cpp
// *************************************************************
// IMPOSTAZIONE PER L'OROLOGIO
// *************************************************************
#include "RTClib.h"
RTC_DS1307 RTC;
// *************************************************************
// IMPOSTAZIONE PER IL KEYPAD
// *************************************************************
#include "Keypad.h"
const byte ROWS = 4; //4 righe
const byte COLS = 3; //3 colonne
char keys[ROWS][COLS] =
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {8, 7, 6, 5}; // Pin di arduino connessi ai pin 1,2,3 e 4 delle righe del keypad
byte colPins[COLS] = {4, 3, 2}; // Pin di arduino connessi ai pin 5,6,7 delle righe del keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// *************************************************************
// IMPOSTAZIONI PER IL DISPLAY LCD
// *************************************************************
#include "LiquidCrystal_I2C.h" // Libreria LCD I2C
// Imposta i pin usati sul chip I2C per le connessioni
// con il display LCD: addr, en, rw ,rs ,d4 ,d5 ,d6 ,d7 ,bl ,blpol
// ed inoltre pone l'indirizzo del display a 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// -------------------------------------------------------------
// PROGRAMMA VERO E PROPRIO
// -------------------------------------------------------------
// Variabili globali necessarie al nostro progetto.
#define StringaVuota " ";
String cifre="";
boolean AttivaModificaData;
boolean AttivaModificaOra;
void ScriviRiga3e4(String Frase3, String Frase4)
{
if (Frase3!="")
{
lcd.setCursor(0, 2); // 1° colonna - 3° riga
lcd.print(Frase3);
}
if (Frase4!="")
{
lcd.setCursor(0, 3); // 1° colonna - 4° riga
lcd.print(Frase4);
}
}
void Pulisci3e4Riga()
{
String Vuota=" ";
ScriviRiga3e4(Vuota,Vuota);
}
void Pulisci4Riga()
{
String Vuota=" ";
ScriviRiga3e4("",Vuota);
}
void MessaggioAvviso(String Frase1, String Frase2)
{
String Frase3="...:: "+Frase1+" ::...";
String Frase4=">> "+Frase2;
ScriviRiga3e4(Frase3,Frase4);
}
void printLCD_DateTime(DateTime now)
{
char buffer[25]={'\0'};
sprintf(buffer, "DATA: %02u/%02u/%u",now.day(),now.month(),now.year());
lcd.setCursor(0, 0); // 1° colonna - 1° riga
lcd.print(buffer);
sprintf(buffer, "ORA: %02u:%02u:%02u",now.hour(), now.minute(), now.second());
lcd.setCursor(0, 1); // 1° colonna - 2° riga
lcd.print(buffer);
}
boolean EUnaDataCorretta(uint8_t dd, uint8_t mm, uint16_t yy)
{
uint8_t GGMese[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if ((mm<1) || (mm>12)) return false; // non e' un mese!
if (yy % 4 == 0) GGMese[1]=29; // Bisestile
if (dd<1 || dd>GGMese[mm-1]) return false;
return true;
}
boolean EUnOraCorretta(uint8_t hh, uint8_t mm, uint8_t ss)
{
if ( (hh>23) || (mm>59) || (ss>59) ) return false;
return true;
}
void AnnullaSet()
{
AttivaModificaData=false;
AttivaModificaOra=false;
cifre="";
}
void Registra()
{
DateTime DataOraRTC = RTC.now();
DateTime DataOraNuova;
uint8_t dd, mm, hh, ss;
uint16_t yy;
if (cifre.length()!=6) return; // ignoro # o * prima delle 6 cifre
if (AttivaModificaOra==true)
{
hh=(uint8_t)cifre.substring(0,2).toInt();
mm=(uint8_t)cifre.substring(2,4).toInt();
ss=(uint8_t)cifre.substring(4,6).toInt();
if ( EUnOraCorretta(hh,mm,ss) )
{
DataOraNuova=DateTime(DataOraRTC.year(),DataOraRTC.month(),
DataOraRTC.day(),hh,mm,ss);
RTC.adjust(DataOraNuova);
MessaggioAvviso("SET ORA ","Orario settato!");
}
else
MessaggioAvviso("SET ORA ",cifre.substring(0,2)+":"
+cifre.substring(2,4)+":"
+cifre.substring(4,6)+" ERRATA!");
}
else if (AttivaModificaData==true)
{
dd=(uint8_t)cifre.substring(0,2).toInt();
mm=(uint8_t)cifre.substring(2,4).toInt();
yy=(uint16_t)(2000+cifre.substring(4,6).toInt());
if ( EUnaDataCorretta(dd,mm,yy) )
{
DataOraNuova=DateTime(yy,mm,dd,DataOraRTC.hour(),
DataOraRTC.minute(),DataOraRTC.second());
RTC.adjust(DataOraNuova);
MessaggioAvviso("SET DATA","Data settata!");
}
else
MessaggioAvviso("SET DATA",cifre.substring(0,2)+"/"
+cifre.substring(2,4)+"/"
+cifre.substring(4,6)+" ERRATA!");
}
AnnullaSet();
}
void StampaConSeparatore(String cifr)
{
int i;
char sep=(AttivaModificaData) ? '/' : ':';
Pulisci4Riga();
lcd.setCursor(0,3);
lcd.print(">> IN: ");
for (i=0; i registro // Qua e' l'errore
Registra();
else if (AttivaModificaOra)
{
AnnullaSet(); // Azzero l'impostazione della data
Pulisci3e4Riga();
}
else
{
AttivaModificaData=true;
cifre="";
MessaggioAvviso("SET DATA","IN: GG:MM:AA");
}
}
else if (key=='*') // Imposta orario
{
if (AttivaModificaOra) // 2° * => registro
Registra();
else if (AttivaModificaData)
{
AnnullaSet(); // Azzero l'impostazione dell'ora
Pulisci3e4Riga();
}
else
{
AttivaModificaOra=true;
cifre="";
MessaggioAvviso("SET ORA ","IN: HH:MM:SS");
}
}
else if (AttivaModificaOra || AttivaModificaData)
{
if (cifre.length()<6) // non vado oltre le 6 cifre
{
cifre=cifre+String(key);
StampaConSeparatore(cifre);
}
}
}
delay(20);
}
OROLOGIO CON RTC
8 messaggi
• Pagina 1 di 1
0
voti
[1] OROLOGIO CON RTC
Ho preso da internet uno sketch di un orologio con rtc 1306,purtroppo il compilatore alla riga for(i=0;i registro da' l'errore expcted ';' before 'registro'.So che manca qualcosa nel for,ma nonostante mi sia sforzato,non sono riuscito a completarlo.Potete aiutarmi? Grazie
0
voti
Nella riga del programma dove è presente il ciclo for segnala un errore perché la sintassi è incompleta, quindi, da lì in poi l'interpretazione è compromessa.
Forse hai perso qualcosa copiando, perché anche quanto segue la stessa riga del for sembra riportato in modo parziale.
La sintassi del "for" è semplicemente questa:
Due righe dopo il "for", c'è un "else if" privo dello "if" che lo dovrebbe precedere.
Saluti
Forse hai perso qualcosa copiando, perché anche quanto segue la stessa riga del for sembra riportato in modo parziale.
La sintassi del "for" è semplicemente questa:
- Codice: Seleziona tutto
// codice che precede
for( int a=1; b<5; a++)
{
b = a; //
}
// codice che segue
Due righe dopo il "for", c'è un "else if" privo dello "if" che lo dovrebbe precedere.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
ho copiato bene lo sketch,comunque vi mando il link da dove potete verificarlo:
http://www.brescianet.com/appunti/Elett ... io_RTC.htm
http://www.brescianet.com/appunti/Elett ... io_RTC.htm
0
voti
Ho cercato l'originale (almeno credo):
http://www.brescianet.com/appunti/Elett ... io_RTC.htm
ha gli errori riportati. Difficile correggerli se non si è l'autore del codice, prova a contattarlo se ti risponde oppure cerca in rete un altro codice magari scritto meglio oppure impari a promanarlo con una tua versione.
http://www.brescianet.com/appunti/Elett ... io_RTC.htm
ha gli errori riportati. Difficile correggerli se non si è l'autore del codice, prova a contattarlo se ti risponde oppure cerca in rete un altro codice magari scritto meglio oppure impari a promanarlo con una tua versione.
8 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



