Salve a tutti ho un problema per quanto riguarda l' RTC dello schetch di una stazione meteo, che mi sto costruendo, consiste nella trasmissione dall'esterno all' interno di casa, di alcuni valori, quali: temperatura, umidità(acquisiti tramite un DHT22) e velocità del vento.
In pratica, pur avendo la batteria carica l'RTC non si sincronizza e non mantiene l'orario. Questo è uno dei problemi principali che provando e riprovando, non sono riuscito a risolvere. Spero che possiate darmi una mano perchè in questo momento sono bloccato. Grazie in anticipo a chiunque mi aiuterà.
/******************************************************************
Created with PROGRAMINO IDE for Arduino - 21.09.2018 17:32:56
Project :Wheather Station (Receiver)
Libraries :RcSwitch.h Wire.h NewliquidCrystal.h rtcLib.h
Author :Giacomo Pascon
Description :Receiver for the whether station by Giacomo Pascon
Copyright :Giacomo Pascon (All Rights Reserved)
******************************************************************/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RCSwitch.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //dichiaro LCD
RCSwitch rc = RCSwitch(); //dichiaro rf433
RTC_DS3231 rtc;
//simboli LCD
byte barra[8]{B00100,B00100,B00100,B00100,B00100,B00100,B00100,B00100};
byte term[8]{B00100,B01010,B01010,B01110,B01110,B11111,B11111,B01110};
byte goccia[8]{B00000,B00100,B01110,B01110,B11111,B11111,B11111,B01110};
byte pallino[8]{B01100,B10010,B10010,B01100,B00000,B00000,B00000,B00000};
byte bandiera[8] = {B00001,B10111,B11111,B11111,B11110,B11000,B10000,B10000};
byte Mh[8] = {B00100,B00111,B00101,B10000,B11111,B10101,B10101,B10101};
String value;
float t;
float h;
float v;
word statogiorno = 0;
word statomese = 0;
word statoora = 0;
word statominuti = 0;
void setup()
{
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
lcd.begin(20,4); //inizializzo lcd
rc.enableReceive(0); //inizializzo la ricezione sul pin 2
//creo i caratteri
lcd.createChar(1,barra);
lcd.createChar(2,term);
lcd.createChar(3,goccia);
lcd.createChar(4,pallino);
lcd.createChar(5,bandiera);
lcd.createChar(6,Mh);
}
void loop()
{
//stampo i caratteri per dividere in due parti il display
lcd.setCursor(11,0);
lcd.write(1);
lcd.setCursor(10,1);
lcd.write(1);
lcd.setCursor(11,2);
lcd.write(1);
lcd.setCursor(10,3);
lcd.write(1);
lcd.setCursor(0,0);
lcd.write(2);
lcd.setCursor(1,0);
lcd.print('=');
lcd.setCursor(0,1);
lcd.write(3);
lcd.setCursor(1,1);
lcd.print('=');
lcd.setCursor(0,2);
lcd.write(5);
lcd.setCursor(1,2);
lcd.print('=');
DateTime now = rtc.now();
int reiceivedvalue = rc.getReceivedValue();
value = String(reiceivedvalue);
if(value.substring(0,3) == "888"){
t = value.substring(3).toInt();
lcd.setCursor(2,0);
lcd.print(t);
lcd.setCursor(7,0);
}
//riconosco se ricevo l'umidità e la stampo su lcd
if(value.substring(0,3) == "999"){
h = value.substring(3).toInt();
lcd.setCursor(2,1);
lcd.print(h);
lcd.setCursor(7,1);
}
//riconosco se ricevo la temperatura e la stamppo su lcd
if(value.substring(0,3) == "889"){
t = (value.substring(3).toInt()) * (-1);
lcd.setCursor(2,0);
lcd.print(t);
lcd.setCursor(7,0);
lcd.print('%');
}
//riconosco se ricevo il vento e lo stamppo su lcd
if(value.substring(0,3) == "777"){
v = value.substring(3).toInt();
lcd.setCursor(2,2);
lcd.print(v);
lcd.setCursor(7,2);
lcd.print('K');
lcd.setCursor(8,2);
lcd.write(6);
}
//stampo data su lcd
lcd.setCursor(11,0);
lcd.print(now.day(),DEC);
lcd.setCursor(13,0);
lcd.print('/');
lcd.setCursor(14,0);
lcd.print(now.month(),DEC);
lcd.setCursor(16,0);
lcd.print('/');
lcd.setCursor(17,0);
lcd.print(now.year(),DEC);
//stampo l'ora su lcd
lcd.setCursor(14,1);
lcd.print(now.hour(),DEC);
lcd.setCursor(16,1);
lcd.print(':');
lcd.setCursor(17,1);
lcd.print(now.minute(),DEC);
if(statogiorno != now.day()){
lcd.setCursor(12,0);
lcd.print(' ');
statogiorno = now.day();
}
if(statomese != now.month()){
lcd.setCursor(15,0);
lcd.print(' ');
statomese = now.month();
}
if(statoora != now.hour()){
lcd.setCursor(15,1);
lcd.print(' ');
statoora = now.hour();
}
if(statominuti != now.minute()){
lcd.setCursor(18,1);
lcd.print(' ');
statominuti = now.minute();
}
}
Staz_Meteo_Ric.ino (3.59 KB)