ciao a tutti,
srivo per un quesito forse semplice, ma che mi sta dando dei problemi:
con arduino UNO e un un display LCD visualizzo correttamente l'ora esatta fornita dal RTC DS3231.
ora io vorrei che si accendesse un led ogni minuto, per 5 secondi, anche quando NON visualizzo l'ora sul display.
mi spiego meglio: sul loop void acquisisco il segnale di un pulsante che fa partire o meno i cicli "printTime" e printDate" per la scrittura su lcd.
quando il valore tm.Seconds è uguale a 0 mi accende il led, se tale valore supera 5 lo spegne.
fiunziona correttamente quando invio i dati all'LCD.
però se pigio il pulsante e interrompo "printTime" e printDate" il led non funziona, nonostante la condizione poc'anzi descritta sia su "void".
è come se il valore del tempo me lo leggesse solo facendo partire "printTime".. da qui la richiesta: quali comandi usare per leggere le variabili di secondi, minuti ecc anche in "void"?
scusate forse può essere banale,
grazie mille
Tommaso
// Wire - Version: Latest
#include <Wire.h>
#include <DS1307RTC.h>
// LiquidCrystal_PCF8574 - Version: Latest
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
// pin pulsanti
#define bottone1 8
#define schermo 10
#define led 12
int P1 = 0; // pulsante 1 associato allo schermo
void setup() {
Serial.begin(9600);
// setup monitor i2c
lcd.begin(20, 4);
lcd.clear();
lcd.setBacklight(255);
// setup pulsanti
pinMode(bottone1,INPUT);
pinMode(led,OUTPUT);
}
void loop(){
// orologio
tmElements_t tm;
if (RTC.read(tm)) {
if (tm.Second == 0)
{
digitalWrite(led,HIGH);
}
if (tm.Second >= 5)
{
digitalWrite(led,LOW);
}
}
// pulsanti
if (digitalRead(bottone1) == HIGH){
P1 = P1+1;
lcd.begin(20, 4);
lcd.clear();
}
if (P1==2) {
P1 = 0;
}
if (P1==0) {
if (RTC.read(tm)) {
printDate(5,1,tm);
printTime(6,2,tm);
}
}
}
void printTime(int character,int line, tmElements_t tm)
{
String seconds,minutes;
lcd.setCursor(character,line);
lcd.print(tm.Hour);
lcd.print(":");
if(tm.Minute<10)
{
minutes = "0"+String(tm.Minute);
lcd.print(minutes);
}else
{
lcd.print(tm.Minute);
}
lcd.print(":");
if(tm.Second<10)
{
seconds = "0"+String(tm.Second);
lcd.print(seconds);
}else
{
lcd.print(tm.Second);
}
}
void printDate(int character,int line, tmElements_t tm)
{
lcd.setCursor(character,line);
lcd.print(tm.Day);
lcd.print("/");
lcd.print(tm.Month);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));
}