Arduino Forum

International => Italiano => Software => Topic started by: marco3020 on Aug 23, 2015, 06:19 am

Title: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 23, 2015, 06:19 am
Buongiorno ho un mega 2560 quando carico lo sketch mi da dat e ora corretta ma se stacco corrente ritorna indietro a quando lo avevo compilato, seguendo la procedura cioè flasharlo con la riga adjust time e poi senza quella riga va alle 6.28 del 2106 cosa posso fare?, leggevo su internet che lo sketch bisogna che venga passato anche dall rtc con un pulsante  intanto ecco mio sketch :

Code: [Select]
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>

RTC_Millis 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;
float rele4 = 41;
int rele5 = 43;

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

float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 26.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 NOTTE 39
#define PUMP 41
#define PUMP1 43
#define RISC 45

void setup()
{


lcd.init(); // LCD Initialization
lcd.backlight( ); // Backlight ON
lcd.clear(); // Clear the display

numberOfDevices = 1;

Serial.begin(9600);
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(NOTTE, OUTPUT);
pinMode(PUMP, OUTPUT);
pinMode(PUMP1, 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() {


// 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);

// Richiesta temperatura
sensors.requestTemperatures(); // Comando per misurare la temp.
temp0 = sensors.getTempCByIndex(0);
lcd.setCursor(0,2); // Colonna 0, Riga 0
lcd.print("acqua:");
lcd.setCursor (6, 2);
lcd.print(temp0);

temp1 = sensors.getTempCByIndex(1);
lcd.setCursor (0,3); //Colonna 0, Riga 1
lcd.print("plafo:");
lcd.setCursor (6,3);
lcd.print(temp1);



//PLAFONIERA =TEMP1 vetole

if (temp1 > tempSoglia - 0.2 and - 0.6 ) {
digitalWrite(VENTOLA, LOW);
}
if (temp1 < tempSoglia + 0.2 and + 0.6) {
digitalWrite(VENTOLA, HIGH);
}

// ventola tangenziale

if (temp0 > alertacqua - 0.2 and - 0.6) {
digitalWrite(TANG, LOW);
}
if (temp0 < alertacqua + 0.2 and + 0.6) {
digitalWrite(TANG, HIGH);
}
// riscaldatore

if (temp0> riscaldatore + 1.0 and +4.0 ) {
digitalWrite (RISC, LOW);
}

if (temp0< riscaldatore - 1.0 and - 4.0 ){
digitalWrite (RISC, HIGH);

}


// Calcolo inizio alba in secondi
albas = oraAlba * 3600 + minAlba * 60;

// Calcolo inizio tramonto in secondi
tramontos = oraTramonto * 3600 + minTramonto * 60;

// Calcolo attuale in secondi
nows = now.hour() * 3600 + now.minute() * 60 + now.second();

// Notte
if (nows < albas || nows > tramontos + durataTramontos) {

digitalWrite(pinR, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinUV, LOW);
digitalWrite(pinW, LOW);

digitalWrite(NOTTE, HIGH);
digitalWrite(PUMP, LOW);
digitalWrite(PUMP1, HIGH);

}

// Alba
if (nows > albas && nows + delayR < albas + durataAlbas) {
analogWrite(pinR, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayR)));
}
if (nows > albas && nows + delayG < albas + durataAlbas) {
analogWrite(pinG, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayG)));
}
if (nows > albas && nows + delayB < albas + durataAlbas) {
analogWrite(pinB, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayB)));
}
if (nows > albas && nows + delayUV < albas + durataAlbas) {
analogWrite(pinUV, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayUV)));
}
if (nows > albas && nows + delayW < albas + durataAlbas) {
analogWrite(pinW, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayW)));
}

// Giorno
if (nows > albas + durataAlbas && nows < tramontos) {
digitalWrite(pinR, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinUV, HIGH);
digitalWrite(pinW, HIGH);
digitalWrite(PUMP,HIGH);
digitalWrite (PUMP1,LOW);
digitalWrite (NOTTE, LOW);
}


if ( temp1 > alertplafo + 0.2 and + 0.6 ) {
digitalWrite(pinR, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinUV, LOW);
digitalWrite(pinW, LOW);




}

// Tramonto
if (nows > tramontos && nows + delayR < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayR)));
analogWrite(pinR, v);
}
if (nows > tramontos && nows + delayG < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayG)));
analogWrite(pinG, v);
}
if (nows > tramontos && nows + delayB < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayB)));
analogWrite(pinB, v);
}
if (nows > tramontos && nows + delayUV < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayUV)));
analogWrite(pinUV, v);
}
if (nows > tramontos && nows + delayW < tramontos + durataTramontos) {
int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayW)));
analogWrite(pinW, v);
}

}
[code]

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: GiovanniGiga on Aug 23, 2015, 10:04 am
Non ne sono sicuro, ma prova a controllare se la batteria dell' RTC è carica.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: uwefed on Aug 23, 2015, 10:47 am
1) Quale RTC hai?
2) quale libreria usi (prego link)
3) Controla la tensione dei 5V
4) controlla tensione della batteria.

Ciao Uwe
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: SukkoPera on Aug 23, 2015, 12:47 pm
Ho avuto lo stesso problema tempo fa e il problema era... Appunto la batteria! Ne avevo presi due e uno era arrivato con la batteria scarica.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: GiovanniGiga on Aug 23, 2015, 01:37 pm
io mi chiedo come mai le vendono con la batteria scarica  :o
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 23, 2015, 01:51 pm
Hai commesso un errore, questa istruzione usa il timer di Arduino e non il modulo RTC.

RTC_Millis RTC;

Usa invece:

RTC_DS1307 RTC;
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 23, 2015, 03:14 pm
ho provato a cambiare con RTC_DS1307 RTC; ma non va
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 23, 2015, 03:22 pm
1) Quale RTC hai?
2) quale libreria usi (prego link)
3) Controla la tensione dei 5V
4) controlla tensione della batteria.

Ciao Uwe
RTC DS1307

libreria quersta:
#include <RTClib.h>

la batteria è carica appena provata con il tester  ed è 3.07

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 23, 2015, 03:46 pm
La libreria in mia possesso è diversa.

Scaricala da qui:

https://github.com/adafruit/RTClib/blob/master/RTClib.cpp (https://github.com/adafruit/RTClib/blob/master/RTClib.cpp)
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 24, 2015, 12:17 am
ok scaricata domani al provo e vi aggiorno grazie per ora
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: uwefed on Aug 24, 2015, 01:06 am
Misura la tensione 5V
Ciao Uwe
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 24, 2015, 04:00 pm
ho provato a mettere questa libreria consiglita e ora mi da questo errore ;   This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Mega 2560 or Mega ADK"
In file included from sketch_jun07a_funz__rel_.ino:2:
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:12: error: expected `)' before 't'
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:13: error: expected `)' before 'year'
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: expected ',' or '...' before '*' token
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: ISO C++ forbids declaration of '__FlashStringHelper' with no type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:18: error: 'uint16_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:19: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:20: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:21: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:22: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:23: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:24: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:29: error: 'uint32_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:36: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:42: error: expected `)' before 'seconds'
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:43: error: expected `)' before 'days'
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:45: error: 'int16_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:46: error: 'int8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:47: error: 'int8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:48: error: 'int8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:49: error: 'int32_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:55: error: 'int32_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:63: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:65: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:69: error: 'uint8_t' does not name a type
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\marco\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
sketch_jun07a_funz__rel_.ino: In function 'void loop()':
sketch_jun07a_funz__rel_:134: error: 'class DateTime' has no member named 'hour'
sketch_jun07a_funz__rel_:134: error: 'class DateTime' has no member named 'minute'
sketch_jun07a_funz__rel_:134: error: 'class DateTime' has no member named 'second'
sketch_jun07a_funz__rel_:138: error: 'class DateTime' has no member named 'day'
sketch_jun07a_funz__rel_:138: error: 'class DateTime' has no member named 'month'
sketch_jun07a_funz__rel_:138: error: 'class DateTime' has no member named 'year'
sketch_jun07a_funz__rel_:197: error: 'class DateTime' has no member named 'hour'
sketch_jun07a_funz__rel_:197: error: 'class DateTime' has no member named 'minute'
sketch_jun07a_funz__rel_:197: error: 'class DateTime' has no member named 'second'
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 24, 2015, 04:04 pm
Meglio che riposti lo sketch.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 24, 2015, 04:21 pm
eccolo modificando libreria e la variabile rt: #
Code: [Select]



include <RTClib.h>



#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>


RTC_DS1307 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;
float rele4 = 41;
int rele5 = 43;

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

float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 26.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 NOTTE 39
#define PUMP 41
#define PUMP1 43
#define RISC 45

void setup()
{

 
  lcd.init();           // LCD Initialization
  lcd.backlight( );      // Backlight ON
  lcd.clear();          // Clear the display

  numberOfDevices = 1;
 
  Serial.begin(9600);
  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(NOTTE, OUTPUT);
  pinMode(PUMP, OUTPUT);
  pinMode(PUMP1, 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() {

 
  // 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);

  // Richiesta temperatura
sensors.requestTemperatures(); // Comando per misurare la temp.
  temp0 = sensors.getTempCByIndex(0);
  lcd.setCursor(0,2); // Colonna 0, Riga 0
  lcd.print("acqua:");
  lcd.setCursor (6, 2);
  lcd.print(temp0);
 
  temp1 = sensors.getTempCByIndex(1);
  lcd.setCursor (0,3); //Colonna 0, Riga 1
  lcd.print("plafo:");
  lcd.setCursor (6,3);
  lcd.print(temp1);
 
 
 
//PLAFONIERA =TEMP1 vetole
 
  if (temp1 > tempSoglia - 0.2 and - 0.6 ) {
    digitalWrite(VENTOLA, LOW);
  }
  if (temp1  < tempSoglia + 0.2 and + 0.6) {
    digitalWrite(VENTOLA, HIGH);
    }

// ventola tangenziale
 
   if (temp0 > alertacqua - 0.1 and - 0.6) {
    digitalWrite(TANG, LOW);
   }
   if (temp0 < alertacqua + 0.1 and + 0.6) {
  digitalWrite(TANG, HIGH);
   }
// riscaldatore

if (temp0> riscaldatore + 1.0 and  +4.0 ) {
  digitalWrite (RISC, LOW);
}

if (temp0< riscaldatore - 1.0 and  - 4.0 ){
 digitalWrite (RISC, HIGH);

}

 
  // Calcolo inizio alba in secondi
  albas = oraAlba * 3600 + minAlba * 60;

  // Calcolo inizio tramonto in secondi
  tramontos = oraTramonto * 3600 + minTramonto * 60;


  // Calcolo attuale in secondi
  nows = now.hour() * 3600 + now.minute() * 60 + now.second();


  // Notte
  if (nows < albas || nows > tramontos + durataTramontos) {
   
    digitalWrite(pinR, LOW);
    digitalWrite(pinG, LOW);
    digitalWrite(pinB, LOW);
    digitalWrite(pinUV, LOW);
    digitalWrite(pinW, LOW);
   
    digitalWrite(NOTTE, HIGH);
    digitalWrite(PUMP, LOW);
    digitalWrite(PUMP1, HIGH);

}

  // Alba
  if (nows > albas && nows + delayR < albas + durataAlbas) {
    analogWrite(pinR, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayR)));
  }
  if (nows > albas && nows + delayG < albas + durataAlbas) {
    analogWrite(pinG, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayG)));
  }
  if (nows > albas && nows + delayB < albas + durataAlbas) {
    analogWrite(pinB, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayB)));
  }
  if (nows > albas && nows + delayUV < albas + durataAlbas) {
    analogWrite(pinUV, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayUV)));
  }
  if (nows > albas && nows + delayW < albas + durataAlbas) {
    analogWrite(pinW, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayW)));
  }

  // Giorno
  if (nows > albas + durataAlbas && nows < tramontos) {
    digitalWrite(pinR, HIGH);
    digitalWrite(pinG, HIGH);
    digitalWrite(pinB, HIGH);
    digitalWrite(pinUV, HIGH);
    digitalWrite(pinW, HIGH);
    digitalWrite(PUMP,HIGH);
    digitalWrite (PUMP1,LOW);

}

 
   if ( temp1 > alertplafo + 0.2 and + 0.6 ) {
   digitalWrite(pinR, LOW);
   digitalWrite(pinG, LOW);
   digitalWrite(pinB, LOW);
   digitalWrite(pinUV, LOW);
   digitalWrite(pinW, LOW);
   

   
 
}
 
  // Tramonto
  if (nows > tramontos && nows + delayR < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayR)));
    analogWrite(pinR, v);
  }
  if (nows > tramontos && nows + delayG < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayG)));
    analogWrite(pinG, v);
  }
  if (nows > tramontos && nows + delayB < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayB)));
    analogWrite(pinB, v);
  }
  if (nows > tramontos && nows + delayUV < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayUV)));
    analogWrite(pinUV, v);
  }
  if (nows > tramontos && nows + delayW < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayW)));
    analogWrite(pinW, v);
  }

  }
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 24, 2015, 04:53 pm
Ma hai scaricato la libreria completa (RTClib.h, RTClib.cpp, keywords.txt, ecc.) e cancellato quella vecchia?

Io la uso da parecchio senza alcun problema.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 24, 2015, 05:04 pm
Si ho cancellato vecchia libreria e messa questa consigliata ma da errore come si vede non riconosce hour, month ecc
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 24, 2015, 06:04 pm
Per verificare che la libreria sia correttamente installata, prova uno degli sketch di esempio.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 24, 2015, 09:15 pm
fatto la libreria va ma se invece di rtc millis uso quello che hai detto tu non va nel senso va avnati nel tempo, anche se riflesho una sola volta appena stacco usb lui va avanti nel tempo
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 24, 2015, 11:20 pm
Nel setup inserisci questa righe:
Code: [Select]
  RTC.begin();                                     // initialize RTC

  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));      // sets RTC to the compilation date/time
  }
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 25, 2015, 12:15 am
domani provo e vi dico speriamo bene
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 25, 2015, 01:04 pm
buongiorno ho sistemato lo sketch cosi:
Code: [Select]
#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 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 = 300;
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;

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

float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 26.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 PUMP1 43
#define RISC 45

void setup()
{

 
  lcd.init();           // LCD Initialization
  lcd.backlight( );      // Backlight ON
  lcd.clear();          // Clear the display

  numberOfDevices = 1;
 
  Serial.begin(9600);
  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(PUMP1, OUTPUT);
 
  digitalWrite( rele1, LOW );
  digitalWrite( rele2, LOW );
  digitalWrite( rele3, HIGH );
  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.begin();

if (! RTC.isrunning()){
   
  // RTC.adjust(DateTime(__DATE__, __TIME__)); // settaggio ora automatico b)
   //RTC.begin(DateTime(__DATE__, __TIME__));
}
/////////////////////////////////////////////////////////////////////////////////// 

delay(3000);
}



void loop() {

  if (millis() > 500000) {
    digitalWrite(SKIM, LOW);
}
 
 
  // 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);

  // Richiesta temperatura
sensors.requestTemperatures(); // Comando per misurare la temp.
  temp0 = sensors.getTempCByIndex(0);
  lcd.setCursor(0,2); // Colonna 0, Riga 0
  lcd.print("acqua:");
  lcd.setCursor (6, 2);
  lcd.print(temp0);
 
  temp1 = sensors.getTempCByIndex(1);
  lcd.setCursor (0,3); //Colonna 0, Riga 1
  lcd.print("plafo:");
  lcd.setCursor (6,3);
  lcd.print(temp1);
 
 
 
//PLAFONIERA =TEMP1 vetole
 
  if (temp1 > tempSoglia - 0.2 and - 0.6 ) {
    digitalWrite(VENTOLA, LOW);
  }
  if (temp1  < tempSoglia + 0.2 and + 0.6) {
    digitalWrite(VENTOLA, HIGH);
    }

// ventola tangenziale
 
   if (temp0 > alertacqua - 0.1 and - 0.6) {
    digitalWrite(TANG, LOW);
   }
   if (temp0 < alertacqua + 0.1 and + 0.6) {
  digitalWrite(TANG, HIGH);
   }
// riscaldatore

if (temp0> riscaldatore + 1.0 and  +4.0 ) {
  digitalWrite (RISC, LOW);
}

if (temp0< riscaldatore - 1.0 and  - 4.0 ){
 digitalWrite (RISC, HIGH);

}

 
  // Calcolo inizio alba in secondi
  albas = oraAlba * 3600 + minAlba * 60;

  // Calcolo inizio tramonto in secondi
  tramontos = oraTramonto * 3600 + minTramonto * 60;


  // Calcolo attuale in secondi
  nows = now.hour() * 3600 + now.minute() * 60 + now.second();


  // Notte
  if (nows < albas || nows > tramontos + durataTramontos) {
   
    digitalWrite(pinR, LOW);
    digitalWrite(pinG, LOW);
    digitalWrite(pinB, LOW);
    digitalWrite(pinUV, LOW);
    digitalWrite(pinW, LOW);
   
   
    digitalWrite(PUMP, LOW);
    digitalWrite(PUMP1, HIGH);

}

  // Alba
  if (nows > albas && nows + delayR < albas + durataAlbas) {
    analogWrite(pinR, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayR)));
  }
  if (nows > albas && nows + delayG < albas + durataAlbas) {
    analogWrite(pinG, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayG)));
  }
  if (nows > albas && nows + delayB < albas + durataAlbas) {
    analogWrite(pinB, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayB)));
  }
  if (nows > albas && nows + delayUV < albas + durataAlbas) {
    analogWrite(pinUV, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayUV)));
  }
  if (nows > albas && nows + delayW < albas + durataAlbas) {
    analogWrite(pinW, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayW)));
  }

  // Giorno
  if (nows > albas + durataAlbas && nows < tramontos) {
    digitalWrite(pinR, HIGH);
    digitalWrite(pinG, HIGH);
    digitalWrite(pinB, HIGH);
    digitalWrite(pinUV, HIGH);
    digitalWrite(pinW, HIGH);
    digitalWrite(PUMP,HIGH);
    digitalWrite (PUMP1,LOW);

}

 
   if ( temp1 > alertplafo + 0.2 and + 0.6 ) {
   digitalWrite(pinR, LOW);
   digitalWrite(pinG, LOW);
   digitalWrite(pinB, LOW);
   digitalWrite(pinUV, LOW);
   digitalWrite(pinW, LOW);
   

   
 
}
 
  // Tramonto
  if (nows > tramontos && nows + delayR < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayR)));
    analogWrite(pinR, v);
  }
  if (nows > tramontos && nows + delayG < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayG)));
    analogWrite(pinG, v);
  }
  if (nows > tramontos && nows + delayB < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayB)));
    analogWrite(pinB, v);
  }
  if (nows > tramontos && nows + delayUV < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayUV)));
    analogWrite(pinUV, v);
  }
  if (nows > tramontos && nows + delayW < tramontos + durataTramontos) {
    int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayW)));
    analogWrite(pinW, v);
  }

  }








il commando lo prendi  tutto ma quando stacco usb va avanti nel tempo
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 25, 2015, 06:23 pm
Perché hai commentato l'istruzione RTC.adjust(DateTime(__DATE__, __TIME__)); ?

Quote
uando stacco usb va avanti nel tempo
Cosa significa questa frase? L'orologio "va avanti"? Se sì, di quanto?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 25, 2015, 09:32 pm
Anche senza commento non va cmq, se stacco USB l'orologio dice 6.20 del 2106
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 26, 2015, 09:50 am
Hai provato a fare la stessa cosa con uno degli sketch esempio?

Se il risultato è lo stesso, potrebbe esse un falso contatto della batteria sul suo porta batteria: mi è capitato ed ho risolto dopo alcuni reinserimenti della batteria nel suo alloggiamento!
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 26, 2015, 10:24 am
Si e con lo sketch esempii va tranquillo e con il moo che da problemi.  Il gnd e il VCC del rtc devono essere collegati direttamente su Arduino?, io ho preso i due fili gnd e vcc e li ho messi su una basetta e da li ho collegato gnd e vcc rtc, lcd, e sensori e rele. Come testo con il tester se c'è corrente su RTC ?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 26, 2015, 11:01 am
Se lo sketch di esempio funziona, il tuo RTC è a posto.

Il problema deve essere nel tuo sketch.

Forse il problema è nell'uso di sprintf().

Prova ad usare dei semplici print senza formattazione solo per vedere se ti da lo stesso tipo di errore. 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 26, 2015, 11:22 am
Del tipo? Ma come controllo se arriva alimentazione su RTC?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 26, 2015, 11:57 am
Lo RTC funziona anche senza alimentazione, controlla lo sketch dove visualizzi l'anno.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 26, 2015, 12:14 pm
Si ma come faccio a capire se li arriva alimentazione?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 27, 2015, 12:29 pm
Buongiorno a tutti ieri ho provato  a pulire i contatti dell rtc, poi ho caricato la libreria  DS1307 e time.h e nei due esempi mi dice rtc ok non so più che fare cambio rtc?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 27, 2015, 12:55 pm
qualcuno sa spiegarmi a cosa serve sqw? io non l'ho collegato ad arduino
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: nid69ita on Aug 27, 2015, 01:03 pm
qualcuno sa spiegarmi a cosa serve sqw? io non l'ho collegato ad arduino
Mi pare sia solo Square Wave, ovvero l'onda quadra del segnale di clock, di solito non si usa.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 27, 2015, 01:08 pm
grazie della spiegazione allora non è quello non so più cosa fare arduino mi dice che rtc funziona e invece non tiene l'ora e data

ho provato anche questo sketch preso da Afieri :
Code: [Select]
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
 
#include <Wire.h>
#include "RTClib.h"
 
RTC_DS1307 RTC;
 
void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
    RTC.sqw(1);     //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    //RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}
 
void loop () {
    DateTime now = RTC.now();
 
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
 
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
 
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
 
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
 
    Serial.println();
    delay(3000);
}


e con questo mi da errore questo:

Arduino:1.6.5 (Windows 8.1), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:29:0,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:26,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
                 from C:\Users\marco\Documents\Arduino\libraries\RTClib\RTClib.cpp:4:
C:\Users\marco\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"
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: SukkoPera on Aug 27, 2015, 02:34 pm
Prova a cambiare la 4a riga di C:\Users\marco\Documents\Arduino\libraries\RTClib\RTClib.cpp:

Code: [Select]
static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };

come segue:

Code: [Select]
static const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 27, 2015, 06:12 pm
Io sto usando la stessa libreria e mi compila perfettamente.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 27, 2015, 07:12 pm
i ci sto smadonando proverò a cambiare quella riga nella libreria domani vi dico sto perdendo le speranze :(
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 28, 2015, 12:02 am
sto provando mi da questo : Arduino:1.6.5 (Windows 8.1), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from sketch_aug27a.ino:5:0:
C:\Users\marco\Documents\Arduino\libraries\Time/Time.h:79:39: error: expected unqualified-id before '/' token
 #define dayOfWeek(_time_)  ((( _time_ / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday
                                       ^
C:\Users\marco\Documents\Arduino\libraries\RTClib/RTClib.h:17:13: note: in expansion of macro 'dayOfWeek'
     uint8_t dayOfWeek() const;
             ^
C:\Users\marco\Documents\Arduino\libraries\Time/Time.h:79:39: error: expected ')' before '/' token
 #define dayOfWeek(_time_)  ((( _time_ / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday
                                       ^
C:\Users\marco\Documents\Arduino\libraries\RTClib/RTClib.h:17:13: note: in expansion of macro 'dayOfWeek'
     uint8_t dayOfWeek() const;
             ^
C:\Users\marco\Documents\Arduino\libraries\Time/Time.h:79:39: error: expected ')' before '/' token
 #define dayOfWeek(_time_)  ((( _time_ / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday
                                       ^
C:\Users\marco\Documents\Arduino\libraries\RTClib/RTClib.h:17:13: note: in expansion of macro 'dayOfWeek'
     uint8_t dayOfWeek() const;
             ^
C:\Users\marco\Documents\Arduino\libraries\Time/Time.h:79:39: error: expected ')' before '/' token
 #define dayOfWeek(_time_)  ((( _time_ / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday
                                       ^
C:\Users\marco\Documents\Arduino\libraries\RTClib/RTClib.h:17:13: note: in expansion of macro 'dayOfWeek'
     uint8_t dayOfWeek() const;
             ^
sketch_aug27a:11: error: conflicting declaration 'RTC_DS1307 RTC'
In file included from sketch_aug27a.ino:9:0:
C:\Users\marco\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:33:18: error: 'RTC' has a previous declaration as 'DS1307RTC RTC'
 extern DS1307RTC RTC;
                  ^
sketch_aug27a.ino: In function 'void setup()':
sketch_aug27a:16: error: 'class DS1307RTC' has no member named 'begin'
sketch_aug27a:17: error: 'class DS1307RTC' has no member named 'sqw'
sketch_aug27a:18: error: 'class DS1307RTC' has no member named 'isrunning'
sketch_aug27a.ino: In function 'void loop()':
sketch_aug27a:26: error: 'class DS1307RTC' has no member named 'now'
conflicting declaration 'RTC_DS1307 RTC'

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

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 28, 2015, 10:03 am
Ho la sensazione che la libreria sia sbagliata.

Cancella completamente quella precedente e reinstalla da questo link:

https://github.com/adafruit/RTClib (https://github.com/adafruit/RTClib)
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 28, 2015, 10:12 am
buongiorno appena la scarico mi dice che gia esiste infatti mi da RTClib-master (1).zip
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 28, 2015, 10:37 am
Ecco appena stacco usb fa cosi in continuazione ora giusta e poi questo:
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 28, 2015, 11:49 am
Nella cartella download è già presente un file con o stesso nome (il precedente download), quindi è normale.

Per sicurezza, cancellalo e ripeti l'operazione.

Avevo capito che lo RTC non forniva mai l'ora esatta, ma da quanto dici pare la fornisca e dopo qualche istante appare quello strano orario.

Se è così, il problema è un disturbo elettrico.

Cosa hai attaccato alle uscite?

Se c'è una pompa a 12V, ad esempio, hai messo il diodo di ricircolo tra il collettore/drain del transistor/MOSFET ed il positivo di alimentazione?

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 28, 2015, 04:41 pm
ho questo :
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 28, 2015, 10:18 pm
Con quel groviglio di fili non mi stupisce che tu abbia problemi di disturbi.

Ma lo schema?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 29, 2015, 02:27 pm
Qualche idea per raggruppare tutto? Qualcosa fast per staccare  e attaccare, tipo una guaina termorestringente , che non ho capito come funziona
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 29, 2015, 03:16 pm
Ti posso solo dire che la linea I2C (SCL ed SDA) dovrebbe avere dei resistori di pullup da 4.7k o meno ed essere non troppo lunga (diciamo 30 cm).

Se non ci sono sulla scheda RTC, potrebbero insorgere dei problemi.

L'attivazione/disattivazione dei relè potrebbe essere la fonte del disturbo, come pure il tipo di carico applicato.

Ecco perché volevo uno schema.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 29, 2015, 03:27 pm
rtc va in ic2c?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 29, 2015, 03:40 pm
Sì.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 29, 2015, 03:49 pm
chi mispiega in parole povere cosa è ic2c? ho letto wikipedia ma non capisco se è solo quello che ho su lcd o si può fare anche senza 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 30, 2015, 06:49 pm
a vederlo sembra che ha gia delle resistenze
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 30, 2015, 11:35 pm
Sì, i resistori ci sono, ma sono tutti da 10k.

Sarebbe meglio che fossero da 4.7k, per lo meno quelli collegati alle linee SDA ed SCL.

Bisogna vedere che resistori ci sono sulle stesse linee del controller PCF857 del modulo LCD, per calcolare la resistenza parallelo equivalente.

In alternativa, senza alimentazione potresti misurare con il tester la resistenza equivalente: se tra 2.2k e 4.7k la linea è a posto.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Aug 31, 2015, 09:24 am
su linea sda è: 0,10  e su scl 2,4 sia per lcd che rtc
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Aug 31, 2015, 11:50 am
Sono 0.10 ohm e 2.4 ohm?

Non può essere: devi misurare tra la le due linee e GND.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 01, 2015, 10:28 am
Come tra le due linee e il gnd?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 01, 2015, 10:38 am
Scusami, volevo dire tra i 5V e le due linee, non con il GND.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 01, 2015, 12:15 pm
Quindi un puntale su gnd e uno SDA e poi cosi per scl?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 01, 2015, 04:33 pm
No, un puntale su +5V (senza alimentazione) e l'altro prima su SDA e poi su SCK
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 02, 2015, 01:40 pm
Fatto mettendolo a 20 k mi da 9.86  su entrambe le linee
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 02, 2015, 05:51 pm
Perfetto, allora aggiungi due resistori da 4.7k in parallelo (uno per linea), in modo da ottenere un R equivalente di circa la metà: miglioriamo un po' la stabilità del bus. 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 04, 2015, 08:36 pm
Buona sera ho provato a mettere tra il vcc e scl un resistore 4,7 e non cambia, ho provato a mettere anche tra il vc e sda un resistore 4,7 e non cambia
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 05, 2015, 06:43 pm
Allora il passo successivo è filtrare le uscite dai relè, probabile fonte dei disturbi.

Dammi le caratteristiche dei carichi.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 05, 2015, 07:10 pm
 https://www.google.it/search?q=relè+8+%40&oq=relè+8+%40&aqs=chrome..69i57.5741j0j4&sourceid=chrome-mobile&ie=UTF-8#imgrc=ANqw7-1WLk1yLM%3A
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 05, 2015, 08:08 pm
Non mi sono spiegato bene: ho bisogno di sapere cosa hai montato sulle uscite dei relè con relative caratteristiche elettriche.

Esempio: motore 24Vdc 1A, elettrovalvola 12Vdc 0.4A, ecc.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 05, 2015, 08:41 pm
Un alimentatore 12 v,  2 spine per le pompe di movimento,  una spina per ventola tangenziale e un altro alimentatore da 12,, la ventola tangenziale è  di 220 e le pompe consumano 5_6 w cada unA
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 05, 2015, 10:33 pm
La ventola tangenziale è  di 22w
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 06, 2015, 01:14 pm
Si devono ridurre i disturbi provenienti dalle 2 pompe a 230Vac e della ventola a 230Vac.

Ti consiglio di inserire in parallelo ai contatti dei relè dei diodi TVS soppressori di disturbo bidirezionali, ad esempio BZW04-342B.

In alternativa, uno snubber (un resistore in serie con un condensatore) con il condensatore da 220nF 450V ed il resistore 3.3k 1W per la ventola e 10k 1W per le pompe
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 06, 2015, 04:49 pm
Uno schema gentilmente così capisco le due possibilità?  Cmq  per collegare Arduino e relè ho. Usato un cavo schermato a 10 fili
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 07, 2015, 05:45 pm
Vedi allegato.

NB: non mi convincevano i conti fatti per il dimensionamento dello snubber e credo siano errati; ti conviene usare il diodo TVS. Usando il metodo empirico ("spannometrico") un resistore da 220 ohm ed un condensatore da 100nF.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 07, 2015, 06:38 pm
Ho visto ma non capisco dove metterli nei miei relè
,  mi serve uno schema se. Plice
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 07, 2015, 06:58 pm
Conviene mettere il diodo, lo snubber il VDR, ecc. sempre in parallelo al carico che genera il disturbo.

Lo schema che ti ho fornito usa questo sistema.

Quindi devi mettere l'antidisturbo in parallelo alle pompe e le elettrovalvole.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 08, 2015, 11:38 am
Questi diodi dove li inserisco nei relè in normalmente aperto o normalmente chiuso? O sulle porte di Arduino?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 08, 2015, 02:46 pm
Ecco uno schema
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 08, 2015, 03:24 pm
Load 1 è  il frutto della presa?  Il diodo va Tra l è n?  Io ho questi collegamenti ora,  ho aggiunto alimentatore 5v per separare arduino
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 08, 2015, 05:40 pm
Load significa carico e corrisponde al frutto della pompa o della ventola.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 08, 2015, 06:55 pm
Si lo avevo intuito, quindi se ho capito bene con relè e linea e neutro che vanno al frutto metto il tuo?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 09, 2015, 11:16 am
Buongiorno io ho i collegamenti cosi dove li metto i tvs? :
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: cyberhs on Sep 09, 2015, 11:32 am
Devi mettere il TVS in parallelo ai morsetti di ciascuna presa.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 22, 2015, 07:08 pm
Buona sera non trovo i tvs in nessun negozio di elletronica, se uso ntp potrebbe anare bene per sapere data e ora?  e che non si resetti ogni volta che spengo arduino
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 24, 2015, 10:08 pm
nessuno mi sa aiutare?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: SukkoPera on Sep 24, 2015, 10:18 pm
Mah, NTP è IL protocollo per distribuire l'ora tramite Internet, ma se fa al caso tuo o meno lo devi sapere tu. L'RTC ti serve solo se devi mantenere l'ora anche ad Arduino spento, se non hai questa necessità una query NTP ogni tanto può andare. Devi solo trovarne un'implementazione stabile (al momento mi sfugge se sia già disponibile tra gli esempi).
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 24, 2015, 11:10 pm
a me interessa che ntp mi dia data e ora corrente ogni volta che si spegne e riaccende arduino
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: SukkoPera on Sep 24, 2015, 11:11 pm
E allora va bene!
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 24, 2015, 11:26 pm
ok ma quale sketch utilizzo? vorrei vederlo anche su lcd che ho la data e ora che arriva dal server
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: SukkoPera on Sep 24, 2015, 11:55 pm
Parti da questo: https://www.arduino.cc/en/Tutorial/UdpNtpClient
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Sep 25, 2015, 07:18 am
Buongiorno l'ho gia provato ma non capisco cosa mettere su print lcsd per vederer data e ora su display
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Sep 29, 2015, 12:45 pm
Lo sketch che hai incluso ha questa parte
Code: [Select]
///////////////////////////// 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__));
///////////////////////////////////////////////////////////////////////////////////

che funziona più o meno così: in fase di compilazione al posto di __DATE__ e __TIME__ verranno messe data e orario del momento in cui lo sketch  viene compilato. Questo setta l'RTC a quell'orario che però è fisso.
Dopodiché nello sketch va eliminata la riga RTC.adjust altrimenti, ogni volta che lo sketch riparte, lo regola sempre sulla stessa data e ora.
Eliminata la riga ricarichi lo sketch senza mai resettare l'Arduino o togliere l'alimentazione.
Si tratta di una maniera grezza di regolare l'ora dell'RTC, sarebbe molto meglio includere un comando via seriale.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 01, 2015, 11:47 pm
ma è cosi che faccio sempre, ma poi esce quel nummero strano che si vede su lcd
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 02, 2015, 02:37 am
tipo questo  può andar bene?: http://www.lucadentella.it/2013/11/27/rtcsetup/
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Oct 02, 2015, 08:17 am
Sicuramente funziona anche se mi sembra un po' esagerato.
Lo puoi usare per settare l'ora e poi caricare un altro sketch. Puoi anche copiare la parte del codice che setta l'ora e aggiungerla al tuo codice.
Se però ti compare poi sempre la stessa data ci possono essere problemi con la batteria di backup. Alcune board RTC senza la batteria di backup (a me è capitato con un DS1307) non permettono la regolazione dell'ora.
Anche se lo hai comprato da poco può essere benissimo che il tizio che te l'ha venduto l'aveva in magazzino da molto tempo.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 02, 2015, 01:58 pm
Provato mi da stesso problema
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Oct 02, 2015, 02:41 pm
Hai controllato lo stato di carica della batteria a bottone? Perché i sintomi sono quelli. Oppure hai un modulo difettoso.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 02, 2015, 03:22 pm
La batteria ha 3.5 v
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 02, 2015, 07:23 pm
Si e 3.5*v
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Oct 05, 2015, 10:05 am
Se la batteria è carica, i collegamenti sono quelli corretti, la libreria funziona correttamente (che succede se il modulo non è affatto collegato?) mi sa che forse è il modulo ad avere problemi.

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: icio on Oct 05, 2015, 04:08 pm
La batteria è anche fin troppo alta , è da 3V non 3.7V
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 05, 2015, 09:25 pm
Se non e collegato non va ol ciclo di lucr
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: icio on Oct 06, 2015, 01:39 pm
Se non e collegato non va ol ciclo di lucr
?????
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 06, 2015, 04:26 pm
Si ho collegato Arduino a una plafoniera a led,  senza RTC non va alba tramonto,  se provassi a usare l'indirizzo del RTC come lo trovo?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 06, 2015, 04:27 pm
Tipo provare questo sketch:http://www.logicaprogrammabile.it/usare-modulo-rtc-ds1307-arduino/
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Oct 06, 2015, 05:41 pm
Si, quello sketch dovrebbe funzionare, mi pare di averlo usato ma tempo fa.
Fra l'altro fa uso della sola libreria Wire.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 10, 2015, 04:49 pm
Buon pomeriggio non funziona ho trovato questo sketch:

http://www.brescianet.com/appunti/Elettronica/Arduino/corso/Esempio_RTC.htm

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
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 10, 2015, 04:51 pm
questo è il mio attuale : 
Code: [Select]


#define DS1307_ADDRESS 0x68
#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>

//RTC_Millis RTC;

RTC_DS1307 RTC;

byte zero = 0x00;
struct tDataOra
{
 byte second;   //0-59
 byte minute;   //0-59
 byte hour;     //0-23
 byte weekDay;  //1-7
 byte monthDay; //1-31
 byte month;    //1-12
 byte year;     //0-99
};

// Converte dalla notazione BCD alla notazione in base 10
byte bcdToDec(byte val)  
{
 // val % 16 => corrisponde ai 4 bit a destra di un byte
 // (val - val % 16)/ 16 => corrisponde ai 4 bit a sinistra di un byte
 // ovvero a shiftare verso destra di 4 bit quindi
 // (val-val%16)/16 equivale a val >> 4
 return ( (val-val%16)/16*10 + val%16 );
}

boolean getDateTime(void *V)
{
 tDataOra *D=(tDataOra *)V;
 // inizializzo la trasmissione partendo
 // dall'indirizzo 0x00
 Wire.beginTransmission(DS1307_ADDRESS);
 Wire.write(zero);
 Wire.endTransmission();

 // requestFrom e' utilizzato dal master per richiedere
 // n byte alle device slave. In questo caso ne richiede
 // 7 bytes alla device con l'indirizzo indicato
 // il DS1307 utilizza 56 bit (7byte) per registrare la data/ora
 Wire.requestFrom(DS1307_ADDRESS, 7);
 if (Wire.available())
 {
     D->second = bcdToDec(Wire.read());
     D->minute = bcdToDec(Wire.read());
     D->hour = bcdToDec(Wire.read() & 0b111111); // modo 24 ore
                                                 // considero i primi 6 bit
     D->weekDay = Wire.read(); // non mi serve convertire (Range da 1 a 7 => 3 bit)
     D->monthDay = bcdToDec(Wire.read());
     D->month = bcdToDec(Wire.read());
     D->year = bcdToDec(Wire.read());
     return true;
 }
 return false;
}

void printShortDateTime(void *V)
{
 char buffer[25]={'\0'};
 tDataOra *D=(tDataOra *)V;
 sprintf(buffer, "%02d/%02d/20%02d %02d:%02d:%02d",
                 D->monthDay,D->month,D->year,
                 D->hour, D->minute, D->second);
 Serial.println(buffer);
}

void printLongDateTime(void *V)
{
  const char* days[] =  { "Domenica", "Lunedi'", "Martedi'", "Mercoledi'",
                          "Giovedi'", "Venerdi'", "Sabato" };
  const char* months[] = { "Gennaio", "Febbraio", "Marzo", "Aprile",
                           "Maggio", "Giugno", "Luglio", "Agosto",
                           "Settembre", "Ottobre", "Novembre", "Dicembre"};
 char buffer[40]={'\0'};
 tDataOra *D=(tDataOra *)V;

 sprintf(buffer, "%s, %u %s 20%2u %02u:%02u:%02u",
                 days[D->weekDay-1], D->monthDay, months[D->month-1],D->year,
                 D->hour, D->minute, D->second);
 Serial.println(buffer);
}


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;
float rele4 = 41;
int rele5 = 43;

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

float riscaldatore = 22.0; // allerta temperatura acqua bassa
float alertacqua = 26.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 NOTTE 39
#define PUMP 41
#define PUMP1 43
#define RISC 45

void setup()
{

 
 lcd.init();           // LCD Initialization
 lcd.backlight( );      // Backlight ON
 lcd.clear();          // Clear the display

 numberOfDevices = 1;
 
 Serial.begin(9600);
 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(NOTTE, OUTPUT);
 pinMode(PUMP, OUTPUT);
 pinMode(PUMP1, 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);
}

Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 10, 2015, 04:53 pm
  void loop() {
Code: [Select]


 {
 tDataOra *D = new tDataOra();
 if (getDateTime(D))
 {
     printLongDateTime(D);
     printShortDateTime(D);
 }
 else
    Serial.println("Errore di lettura Data/ora");
 delay(1000);
}
 
 
 
 
 
 // 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);

 // Richiesta temperatura
sensors.requestTemperatures(); // Comando per misurare la temp.
 temp0 = sensors.getTempCByIndex(0);
 lcd.setCursor(0,2); // Colonna 0, Riga 0
 lcd.print("acqua:");
 lcd.setCursor (6, 2);
 lcd.print(temp0);
 
 temp1 = sensors.getTempCByIndex(1);
 lcd.setCursor (0,3); //Colonna 0, Riga 1
 lcd.print("plafo:");
 lcd.setCursor (6,3);
 lcd.print(temp1);
 
 
 
//PLAFONIERA =TEMP1 vetole
 
 if (temp1 > tempSoglia - 0.2 and - 0.6 ) {
   digitalWrite(VENTOLA, LOW);
 }
 if (temp1  < tempSoglia + 0.2 and + 0.6) {
   digitalWrite(VENTOLA, HIGH);
   }

// ventola tangenziale
 
  if (temp0 > alertacqua - 0.1 and - 0.6) {
   digitalWrite(TANG, LOW);
  }
  if (temp0 < alertacqua + 0.1 and + 0.6) {
 digitalWrite(TANG, HIGH);
  }
// riscaldatore

if (temp0> riscaldatore + 1.0 and  +4.0 ) {
 digitalWrite (RISC, LOW);
}

if (temp0< riscaldatore - 1.0 and  - 4.0 ){
digitalWrite (RISC, HIGH);

}


 // Calcolo inizio alba in secondi
 albas = oraAlba * 3600 + minAlba * 60;

 // Calcolo inizio tramonto in secondi
 tramontos = oraTramonto * 3600 + minTramonto * 60;


 // Calcolo attuale in secondi
 nows = now.hour() * 3600 + now.minute() * 60 + now.second();


 // Notte
 if (nows < albas || nows > tramontos + durataTramontos) {
   
   digitalWrite(pinR, LOW);
   digitalWrite(pinG, LOW);
   digitalWrite(pinB, LOW);
   digitalWrite(pinUV, LOW);
   digitalWrite(pinW, LOW);
   
   digitalWrite(NOTTE, HIGH);
   digitalWrite(PUMP, LOW);
   digitalWrite(PUMP1, HIGH);

}

 // Alba
 if (nows > albas && nows + delayR < albas + durataAlbas) {
   analogWrite(pinR, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayR)));
 }
 if (nows > albas && nows + delayG < albas + durataAlbas) {
   analogWrite(pinG, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayG)));
 }
 if (nows > albas && nows + delayB < albas + durataAlbas) {
   analogWrite(pinB, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayB)));
 }
 if (nows > albas && nows + delayUV < albas + durataAlbas) {
   analogWrite(pinUV, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayUV)));
 }
 if (nows > albas && nows + delayW < albas + durataAlbas) {
   analogWrite(pinW, 65 * (float)(((albas + durataAlbas) - nows) / (durataAlbas - delayW)));
 }

 // Giorno
 
 if ( temp1 > alertplafo + 0.2 && + 0.6 )
 {  
   digitalWrite(pinR, HIGH);
   digitalWrite(pinG, HIGH);
   digitalWrite(pinB, HIGH);
   digitalWrite(pinUV, HIGH);
   digitalWrite(pinW, HIGH);
   digitalWrite(PUMP,HIGH);
   digitalWrite (PUMP1,LOW);

}


  else if (nows > albas + durataAlbas && nows < tramontos)
{
  digitalWrite(pinR, LOW);
  digitalWrite(pinG, LOW);
  digitalWrite(pinB, LOW);
  digitalWrite(pinUV, LOW);
  digitalWrite(pinW, LOW);
  digitalWrite(PUMP,HIGH);
  digitalWrite (NOTTE,LOW);
}
   
 

 
 // Tramonto
 if (nows > tramontos && nows + delayR < tramontos + durataTramontos) {
   int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayR)));
   analogWrite(pinR, v);
 }
 if (nows > tramontos && nows + delayG < tramontos + durataTramontos) {
   int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayG)));
   analogWrite(pinG, v);
 }
 if (nows > tramontos && nows + delayB < tramontos + durataTramontos) {
   int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayB)));
   analogWrite(pinB, v);
 }
 if (nows > tramontos && nows + delayUV < tramontos + durataTramontos) {
   int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayUV)));
   analogWrite(pinUV, v);
 }
 if (nows > tramontos && nows + delayW < tramontos + durataTramontos) {
   int v = 65 - (65 * (float)(((tramontos + durataTramontos) - nows) / (durataTramontos - delayW)));
   analogWrite(pinW, v);
 }

 }


ma mi da qualche problema cosa posso fare?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: UweFederer on Oct 10, 2015, 06:38 pm
Perché non usi i CODE TAG (icona </>) per racciudere lo skech e fare cosí la discussione piú leggibile?
lo sai fare perché lo hai giá fatto. Per favore modifica gli ultimi post.
Grazie ciao Uwe
 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 10, 2015, 07:52 pm
ecco scusatemi non mi  ero accorto, quindi come posso fare a ovviare al problema?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 11, 2015, 10:51 am
Buongiorno nessuno sa aiutarmi perfavore grazie in anticipo
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 12, 2015, 08:57 am
Nessuno sa aiutarmi?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: zoomx on Oct 12, 2015, 09:06 am
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.
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 13, 2015, 07:24 am
ma come potrei riadattarlo al mio sketch ? 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 15, 2015, 05:20 pm
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
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 17, 2015, 07:43 pm
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?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 18, 2015, 11:33 pm
Buona sera oggi ho provato a far andare rtc staccando i rele e da stesso errore lo cambio e vi aggiorno
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: lo_sty on Oct 21, 2015, 11:02 pm
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
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 22, 2015, 04:33 pm
E come controllo i corti sul quarzo?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: lo_sty on Oct 22, 2015, 09:55 pm
Controlla se la frequenza è stabile e combacia con il valore del quarzo con un frequenzimetro
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 23, 2015, 05:57 pm
Oggi è  arrivato il ds3231  la procedura è  la stessa del ds1307?
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: lo_sty on Oct 23, 2015, 06:25 pm
http://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-ds3231-real-time-clock-modules-with-arduino/ (http://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-ds3231-real-time-clock-modules-with-arduino/)
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 25, 2015, 10:17 am
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);

  


 
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: marco3020 on Oct 25, 2015, 12:24 pm
problema risolto cosi: mettendo data time= RTC.get();

ora funziona tutto, grazie mille
Title: Re: problema a far rimanere data e ora corretta su rtc
Post by: lo_sty on Oct 25, 2015, 10:31 pm
Hai incluso 2 volte la libreria Wire .
Se hai risolto modifica il titolo del topic mettendo [ RISOLTO ] davnti