Go Down

Topic: problema a far rimanere data e ora corretta su rtc (Read 10271 times) previous topic - next topic

marco3020


zoomx

ma lo devo riadattare al mio come faccio? se lo metto insieme al mio codice attuale non funziona manco el luci vanno mi dice manca rtc
Il mio sospetto/ipotesi è che ci sia un problema elettrico visto che sul bus I2C hai il display LCD e l'RTC e anche il sensore di temperatura. Ti confesso che non ho mai fatto funzionare più dispositivi sullo stesso bus per cui su quel lato non ti posso aiutare.

marco3020

ma come potrei riadattarlo al mio sketch ? 

marco3020

Buon pomeriggio a tutti voglio fare un ultima prova e voglio provare a impostare data e ora su lcd con i pulsanti qualcuno mi spiega come fare? se ci vogliono resistenze o no grz

marco3020

Buongiorno sto utilizzando questo sketc:    hhttp://www.mauroalfieri.it/elettronica/rtc-shield-ds1307-impostare-data-e-ora.html.      Vedo LCD illuminarsi ma non visualizzo niente,  cosa posso fare?

marco3020

Buona sera oggi ho provato a far andare rtc staccando i rele e da stesso errore lo cambio e vi aggiorno

lo_sty

Io sto utilizzando un modulo SD con RTC incluso . Quando mi è arrivato la parte RTC non funzionava così ho sostituito il ds1307 con uno nuovo ed ho risolto il problema .
Ho notato che l'orario usa "sballarsi" quando c'è un corto sulla batteria . controlla con un tester di non avere corti sulla linea della batteria o sul quarzo

marco3020


lo_sty

Controlla se la frequenza è stabile e combacia con il valore del quarzo con un frequenzimetro

marco3020

Oggi è  arrivato il ds3231  la procedura è  la stessa del ds1307?


marco3020

Buongiorno a tutti ho collegato il ds3231 e funziona bene ma lo devo riadattare epr il mio sketch in quanto mi dice data time no non è una sua funzione, e poi che mi spiega qualcuno gentilmente come far si che quando alertplafo supera un range le luci si spengono g ecco sketch grazie infinite :


Code: [Select]

#include <Time.h>
#include <DS3232RTC.h>
#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip( 192,168,1,6 );
IPAddress gateway( 192,168,1,1 );
IPAddress subnet( 255,255,255,0 );

EthernetServer server(80);

RTC_Millis RTC;

//RTC_DS3231 RTC;

PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

int oraAlba = 9;
int minAlba = 10;
long albas;
int durataAlbas = 720;
int oraTramonto = 17;
int minTramonto = 10;
long tramontos;
int durataTramontos = 720;
long nows;
int delayR = 0;
int delayG = 120;
int delayB = 240;
int delayUV = 360;
int delayW = 360;

int pinR = 2;
int pinG = 3;
int pinB = 4;
int pinW = 5;
int pinUV = 6;

//rele
float rele1 = 35;
float rele2 = 37;
int   rele3 = 39;
int rele4 = 41;
int rele5 = 43;
int rele6 = 45;

char buffer1[20];
char buffer2[20];

float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 27.0; // ventola tangenziale
float alertplafo = 44.0;  // alerta plafoniera temperatura troppo alta
float tempSoglia = 38.0; //temperatura ventole plafo

#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tmp_address;
float temp0=0;
float temp1=0;
int numberOfDevices;

#define VENTOLA 35
#define TANG 37
#define SKIM 39
#define PUMP 41
#define NOTTE 43
#define RISC 45

void setup()
{

Serial.begin(9600);
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  lcd.init();           // LCD Initialization
  lcd.backlight( );      // Backlight ON
  lcd.clear();          // Clear the display

  numberOfDevices = 1;

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  Wire.begin();

  sensors.begin();

  pinMode(pinR, OUTPUT);
  pinMode(pinG, OUTPUT);
  pinMode(pinB, OUTPUT);
  pinMode(pinW, OUTPUT);
  pinMode(pinUV, OUTPUT);

  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  pinMode(rele5, OUTPUT);
  
  pinMode(VENTOLA, OUTPUT);
  pinMode(TANG, OUTPUT);
  
  pinMode(RISC, OUTPUT);
  pinMode(SKIM, OUTPUT);
  pinMode(PUMP, OUTPUT);
  pinMode(NOTTE, OUTPUT);
  
  digitalWrite( rele1, LOW);
  digitalWrite( rele2, LOW);
  digitalWrite( rele3, LOW );
  digitalWrite( rele4, LOW );
  digitalWrite(rele5, LOW);
  
///////////////////////////// SETTAGGIO ORA ////////////////////////////////////
 /*
Come settare correttamente ora:
1) compilare lo sketch con quella riga , a) oppure b)
2) flashare l'Arduino con quello sketch, in modo che lo sketch regoli l'RTC
3) ricompilare lo sketch SENZA quella riga
4) riflashare l'Arduino con il nuovo sketch

Ora puoi fare tutti gli stacchi che vuoi e l'RTC andrà per conto suo correttamente.*/

  
//  RTC.adjust(DateTime(__DATE__, __TIME__)); // settaggio ora automatico b)
   //RTC.begin(DateTime(__DATE__, __TIME__));
///////////////////////////////////////////////////////////////////////////////////  

delay(3000);

}

void loop()
{

    if (millis() > 500000)
    {
    digitalWrite(SKIM, HIGH);
    }
  
  
  // prendo ora attuale
  DateTime now = RTC.now();
  sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,0);
  lcd.print( buffer1 );
  
  sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );
  Serial.println(buffer1);
  Serial.println(buffer2);

  


 

marco3020

problema risolto cosi: mettendo data time= RTC.get();

ora funziona tutto, grazie mille

lo_sty

Hai incluso 2 volte la libreria Wire .
Se hai risolto modifica il titolo del topic mettendo [ RISOLTO ] davnti

Go Up