Problema arduino mega 2560 doppo aggiornamento pcf e time.h e ds32rtc

Buongiorno a tutti,
ieri sera ho aggiornato le librerie seguenti: ds32rtc time.h pcf hd di testato e dallas temperature e dbdb1820, ora non funziona più nulla ma se eseguo sketch non mi da nessun errore come posso risolvere?
c'e un modo di avere un verbose più alto possibile per capire.
Se guardo il monitor seriale dopo aver caricato lo sketch esempio di dallas non mi dice manco se trova qualche sensore ( e sono 3)
se eseguo quello per one wire idem.

Buongiorno,

:warning: prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... so che sei un vecchio utente della sezione Italiana del forum :slight_smile: , ma ... purtroppo non riesco a trovare il tuo post di presentazione :confused:, per cui, cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

P.P.S.: Evitate di utilizzare la traduzione automatica fatta dal browser ... vi impedisce di capire la lingua della sezione dove andate a scrivere ...

Ho letto la tua presentazione ...
... direi che, data la tua preparazione, la cosa più semplice è staccare tutto e ricominciare attaccando UNA sola cosa per volta e verificando che funzioni con gli esempi a corredo della relativa libreria; fatto questo puoi cominciare ad attaccare un paio di cose assieme e fare la stessa prova e ... così via sino a quando non trovi la causa che blocca il tutto.

Guglielmo

dimenticavo so usare il tester quindi so vedere se c'e qualcosa in corto e non sembra,
non vorrei staccare sempre tutto vorrei capire se esiste un debug più verbose, in quanto io modifiche lato hardware non en ho fatte ho solo aggiornato librerie

Purtroppo NON esiste il concetto di "debug" con gli Arduino AVR (UNO, MEGA, Leonardo, ecc.) ... o uno il "debug" se lo fa da solo (inserendo delle Serial.print() nel programma sparse in vari punti per sapere quello che accade) o, si possono attivare un paio di opzioni a livello IDE che danno più dettagli sia in fase di copilazione che di caricamento ...

... si va nelle preferenze dell'IDE e si attiva il segno di spunta dove dice maggiori dettagli di compilazione e di caricamento ... ma se non ci sono errori ed è solo quelache altra questione che è cambiata con il cambiare delle versioni del software ... dubito che li vedi molto.

Guglielmo

ciao,
infatti manco iol serial.println mi vede sul mio sketch neache su onwire,dallas

Ho idea che, se vuoi uscirne e capire il motivo dei problemi ... devi seguire ciò che ti ho suggerito al post #3 ... :roll_eyes:

Guglielmo

ok cancello le librerie e le rimetto, vi aggiorno

Mi raccomando, fai TUTTO dal "Gestore Librerie" (Library Manager) del IDE che trova le versioni più aggiornate e le varie dipendnze ...

... e prova ogni singola cosa separatamente che ... è inutile provare tutto assieme se non si sa cosa da fastidio a cosa ... :roll_eyes:

Guglielmo

type or paste code here
//sketch teche
//gio, geca,giusi
//#include <dht11.h>
#include "DHT.h"
#include <DallasTemperature.h>
#include <DS3232RTC.h>//http://github.com/JChristensen/DS3232RTC
#include <OneWire.h>
#include <PCF8574_HD44780_I2C.h>
#include <Time.h>  //http://www.arduino.cc/playground/Code/Time
#include <RTClib.h>
#include <Wire.h>
#include <SPI.h>
//#include <avr/wdt.h>
RTC_DS3231 rtc;
//dht11 DHT;
#define DHT1PIN 8 // quale pin siamo collegati a 
#define DHT2PIN 7
#define DHT3PIN 6 


#define DHT1TYPE DHT11 // DHT 11 
#define DHT2TYPE DHT11 // DHT 11 
#define DHT3TYPE DHT11 // DHT 11 
//sensore temperatura
OneWire oneWire (9);
DallasTemperature temp(&oneWire);
DeviceAddress tmp_address;
float tc0 = 0.0;
float tc1 = 0.0;
float tc2 = 0.0;
int nsonde = 0;

//oraro accensioni luci
//String oraAccensione = "08.00";
//String oraspenimento = "18.00";


const long interval = 1000;
unsigned long previousMillis = 0;

//RTC_Millis RTC;
PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

//rtc
char buffer1[20];
char buffer2[10];

bool StatoRele1 = HIGH;
bool StatoRele2 = HIGH;
bool StatoRele3 = HIGH;

bool StatoRele4 = HIGH;
bool StatoRele5 = HIGH;
bool StatoRele6 = HIGH;


//ALLARMI
/*const float Allarmegeca = 34.0;
  const float Allarmegeca_temp_bassa = 30.0;
  const float Allarmegiusi = 34.0;
  const float Allarmegiusi_temp_bassa = 30.0;
  const float Allarmegio = 34.0;
  const float Allarmegio_temp_bassa = 30.0;*/


//RELE
int rele1 = 29;// luce
float rele2 = 30;//geca
float rele3 = 31; //gio
float rele4 = 32; //giusi 
float  rele5 = 33;
float  rele6 = 34;

int button = 2;

const int pin11 =11;



//verifico stato led 
int statoled=LOW;

//verifico stato bottone 
int val= 0;
bool output_active = false;

int prev_state = HIGH;

DHT dht1(DHT1PIN, DHT1TYPE );
DHT dht2(DHT2PIN, DHT2TYPE );
DHT dht3(DHT3PIN, DHT3TYPE );

void setup()
{

  //RELE
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  
  
  //Bottone 

  pinMode(button, INPUT_PULLUP);

  //RELE TUTTI HIGH
  digitalWrite(rele1, HIGH);
  digitalWrite(rele2, HIGH);
  digitalWrite(rele3, HIGH);
  digitalWrite(rele4, HIGH);
  digitalWrite(rele5, HIGH);
  digitalWrite(rele6, HIGH);


  Serial.begin(9600);
  temp.begin();
  nsonde = temp.getDeviceCount();
  lcd.init();
  lcd.backlight();
  lcd.clear();
  dht1.begin( );
  dht2.begin( );
  dht3.begin( );

//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  //setSyncProvider(RTC.get);   // the function to get the time from the RTC

  pinMode(rele4, OUTPUT);
  pinMode(rele5, OUTPUT);
  pinMode(rele6, OUTPUT);
  pinMode(pin11, OUTPUT);


  /*plafo.setChannel(uv,18,0,7,39,0,HIGH,34);//Dalle 19.30 alle 2.30, accensione immediata, pin 30 (digitale)
    plafo.setChannel(white,18,0,7,30,0,HIGH,36);//Dalle 4.10 alle 7.00
    attivo il watchdog e lo imposto
    per una soglia di tempo di 2 Secondi
    wdt_enable(WDTO_2S);
  */

}

void loop()
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {



    // prendo ora attuale
    //DateTime now = rtc.get();
    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(9, 0);
    lcd.print( buffer2 );

    //String oraAttuale=(String)now.hour()+":"+(String)now.minute();
    //plafo.perform(now.hour(), now.minute(), now.second());

     //Serial.println(buffer1);
     //Serial.println(buffer2);

    //Serial.println(temp0);
    //Serial.println(temp1);

    // definisco le variabili per richiamare temp e umidita dht11

    int h1 = dht1.readHumidity( );
    int t1 = dht1.readTemperature( );
    int h2 = dht2.readHumidity( );
    int t2 = dht2.readTemperature( );
    int h3 = dht3.readHumidity( );
    int t3 = dht3.readTemperature( );

//Serial.println (h1);
//Serial.println (t1);

    //accensione luce
    Serial.println (val);
    if (!output_active){ // bypass se il bottone è premuto 
    
    if (now.hour() >= 8  && now.hour() < 16)  //range accensione tra le 8 e le 16  
    {
    digitalWrite(rele1, LOW);
    }
    else
    {  
   //else if (now.hour() > 16)
   digitalWrite(rele1, HIGH);
 }
    }
    //accensione luce con pulsante 
val= digitalRead(button);
if (prev_state!= val){ 
 
 if(val ==LOW && output_active) {
 output_active = false;
  } 
  else 
  {
    
if (val == LOW ) 
{    
  output_active = true;
  
  }
 } 
  digitalWrite(rele1, output_active ? LOW: HIGH );
  prev_state = val;
}

/*

  /*accensioen tapettino geca
      if (now.hour() > 7) {
      digitalWrite(rele1, HIGH);
      }
      if (now.hour() > 23) {
      digitalWrite(rele1, LOW);
      }
      //richiesta temperatura

      //accensioen tapettino gio
      if (now.hour() > 7) {
      digitalWrite(rele2, HIGH);
      }
      if (now.hour() > 23) {
      digitalWrite(rele2, LOW);
      }
    */
    //richiesta temperatura


    //GIO
    temp.requestTemperatures(); // Comando per misurare la temp.
    tc0 = temp.getTempCByIndex(0);
    lcd.setCursor(0, 1); //colonna 0 riga 0
    lcd.print("GIO");
    lcd.setCursor (4, 1);
    lcd.print(tc0);
    //Serial.println(temp1);
    lcd.setCursor (10, 1);
    lcd.print("um:");
    lcd.setCursor (13, 1);
    lcd.print(h3);
    lcd.setCursor (16, 1);
    lcd.print("T:");
    lcd.setCursor (18, 1);
    lcd.print(t3);
    //Serial.println(tc0);
    //richiesta temperatura
    //GIU
    temp.requestTemperatures(); // Comando per misurare la temp.
    tc1 = temp.getTempCByIndex(2);
    lcd.setCursor(0, 2);
    lcd.print("GIU");
    lcd.setCursor(4, 2); //colonna 0 riga 0
    lcd.print(tc1);
    Serial.println(tc1);
    lcd.setCursor (10, 2);
    lcd.print("um:");
    lcd.setCursor (13, 2);
    lcd.print(h2);
    lcd.setCursor (16, 2);
    lcd.print("T:");
    lcd.setCursor (18, 2);
    lcd.print(t2);
    //Serial.println(tc1);
    
    //richiesta temperatura
    //GECA

    temp.requestTemperatures(); // Comando per misurare la temp.
    tc2 = temp.getTempCByIndex(1);
    lcd.setCursor(0, 3);
    lcd.print("GEC");
    //Serial.println (h1);
    //lcd.setCursor(4,3);
    lcd.setCursor(4, 3); //colonna 0 riga 0
    lcd.print(tc2);
    //lcd.print("");
    lcd.setCursor (10, 3);
    lcd.print("um:");
    lcd.setCursor(13, 3);
    lcd.print(h1);
    lcd.setCursor (16, 3);
    lcd.print("T:");
    lcd.setCursor (18, 3);
    lcd.print(t1);
    //Serial.println(tc2);

    //ALLARMi

 //riscaldatore gio
    if (temp.getTempCByIndex(0) > (float)32) {
      if (StatoRele3 == LOW) {
        digitalWrite(rele3, HIGH);
        //Serial.println("il rele 2 è spento");
        lcd.setCursor(3, 1);
        lcd.print(" ");
        StatoRele3 = HIGH;
      }
    }

    if (temp.getTempCByIndex(0) < (float)30) {
      if (StatoRele3 == HIGH) {
        digitalWrite(rele3, LOW);
        //Serial.println("il rele 2 è acceso");
        lcd.setCursor(3, 1);
        lcd.print("^");
        StatoRele3 = LOW;
      }
    }



 //riscaldatore giusi

    if (temp.getTempCByIndex(2) > (float)32) {
      if (StatoRele4 == LOW) {
        digitalWrite(rele4, HIGH);
        //Serial.println("il rele 3 è spento");
        lcd.setCursor(3, 2);
        lcd.print(" ");
        StatoRele4 = HIGH;
      }
    }

    if (temp.getTempCByIndex(2) < (float)30) {
      if (StatoRele4== HIGH) {
        digitalWrite(rele4, LOW);
        //Serial.println("il rele 3 è acceso");
        lcd.setCursor(3, 2);
        lcd.print("^");
        StatoRele4= LOW;
      }
    }
    //riscaldatore GECA
    if (temp.getTempCByIndex(1) > (float)32) {
      if (StatoRele5 == LOW) {
        digitalWrite(rele5, HIGH);
        //Serial.println("il rele1 è spento");
        //lcd.setCursor(3, 1); //colonna 0 riga 0
        lcd.print(" ");
        StatoRele5 = HIGH ;
      }
    }
    if (temp.getTempCByIndex(1) < (float) 30) {
      if (StatoRele5 == HIGH) {
        digitalWrite(rele5, LOW);
        //Serial.println("il rele1 è acceso");
        lcd.setCursor(3, 3);
        lcd.print("^");
        StatoRele5 = LOW;
      }
    }
    /*  elseif (t1) > 30 {
      digitalWrite(rele1, HIGH);{
      }
      }
    */
   

   
    previousMillis = currentMillis;

    //spina sempre accesa
    digitalWrite(rele5, LOW);
    digitalWrite(rele6, LOW);
    //digitalWrite (rele1, LOW);
    //digitalWrite (rele6, LOW);
    //delay (5000);
    //digitalWrite (rele6, HIGH);

//digitalWrite(rele1, HIGH);
digitalWrite(rele2, LOW);
    /* digitalWrite(rele1, LOW);
        delay (500) ;
        digitalWrite(rele2, LOW);
        delay (600) ;
      digitalWrite(rele3, LOW);

        delay (700) ;

       digitalWrite(rele4, LOW);
       delay (800) ;
        digitalWrite(rele5, LOW);
      delay (1000) ;
      digitalWrite(rele6, LOW)

    */
     //digitalWrite(rele4, LOW);
     //delay (500) ; 
     //digitalWrite(rele4, HIGH);
    //eseguo qualcosa...
    // delay(3000); //3 secondi

    //resetto il watchdog
    //wdt_reset();

    /* b1 = digitalRead(2);

if (b1 == LOW){
   
     stato_rele4== LOW;
      digitalWrite (pin11, HIGH) ;
    }   else {

  stato_led== HIGH;
  digitalWrite( pin11, LOW);
    */
}
}

Praticamente prima sprint buffer 1 e 2 mi davano data e ora ora ho una data strana 25/25/2051,
Per ora almeno funzionano 2 sonde

aggiornamento ho cancellato la libreria che avevo e ho messo quella da limanager come suggerito la ds3232rtc versione 2.0.0 ma ho lo stesso problema, coem faccioa capire le variabili dove sono cambiate?, ho provato a leggere al libreria ma non capisco

Io ti avevo detto di staccare TUTTO e provare un oggetto per volta usando gli esempi a corredo delle librerie ... lo hai fatto?

Guglielmo

ciao ho staccato tutto e ho fatto solo questo sketch per vedere cosa dice rtc.

type or paste code here#include <DS3232RTC.h>      // https://github.com/JChristensen/DS3232RTC
#include <Streaming.h>      // https://github.com/janelia-arduino/Streaming

DS3232RTC myRTC;

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

void setup() 
{
  

}


void loop() {
  // prendo ora attuale
    //DateTime now = rtc.get();
    //DateTime now = rtc.now();
    //setSyncProvider(myRTC.get);
    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(9, 0);
    //lcd.print( buffer2 );

    Serial.println(buffer1);
     Serial.println(buffer2);

}

questo è lerrore che ottengoArduino:1.8.13 (Windows 10), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\marco\Documents\Arduino\sketch_may05a\sketch_may05a.ino: In function 'void loop()':

sketch_may05a:23:44: error: request for member 'hour' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

                                            ^~~~

sketch_may05a:23:56: error: request for member 'minute' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

                                                        ^~~~~~

sketch_may05a:23:70: error: request for member 'second' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

                                                                      ^~~~~~

sketch_may05a:26:42: error: request for member 'day' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                          ^~~

sketch_may05a:26:53: error: request for member 'month' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                                     ^~~~~

sketch_may05a:26:66: error: request for member 'year' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

     sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                                                  ^~~~

Più di una libreria trovata per "TimeLib.h"

Usata: C:\Users\marco\Documents\Arduino\libraries\Time

Non usata: C:\Users\marco\Documents\Arduino\libraries\Time-master

exit status 1

request for member 'hour' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'



Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"
 :


Se commenti questo, non esiste nessuna variabile/oggetto di nome now, quindi ovvio che il compilatore ti dice che NON puoi usare il comando now.hour()
Commentalo così:
DateTime now ; //= rtc.get();

ciao ecco cosa dice

Arduino:1.8.13 (Windows 10), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\marco\Documents\Arduino\sketch_may05a\sketch_may05a.ino: In function 'void loop()':

sketch_may05a:20:5: error: 'DateTime' was not declared in this scope

 DateTime now =// rtc.get();

 ^~~~~~~~

C:\Users\marco\Documents\Arduino\sketch_may05a\sketch_may05a.ino:20:5: note: suggested alternative: 'makeTime'

 DateTime now =// rtc.get();

 ^~~~~~~~

 makeTime

sketch_may05a:26:42: error: request for member 'day' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

 sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                      ^~~

sketch_may05a:26:53: error: request for member 'month' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

 sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                                 ^~~~~

sketch_may05a:26:66: error: request for member 'year' in 'now', which is of non-class type 'time_t() {aka long unsigned int()}'

 sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

                                                              ^~~~

Più di una libreria trovata per "TimeLib.h"

Usata: C:\Users\marco\Documents\Arduino\libraries\Time

Non usata: C:\Users\marco\Documents\Arduino\libraries\Time-master

exit status 1

'DateTime' was not declared in this scope

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Impara a leggere quegli errori da solo. Ti dice chiaramente che c'e' un errore in quella riga.
Ti sembra uguale a quella che ti ho scritto io ? Tutto quello che sta dopo // è un commento e per il compilatore NON esiste, quindi... non esiste quel ; e quindi ...

Comunque, rivedendo il codice, ma perché hai commentato la riga ?
//DateTime now = rtc.get();
senza quella come leggi l'ora dal RTC ?

Tu l'oggetto legato al DS3232 lo hai chiamato myRTC
quindi DateTime now = myRTC.get(); oppure myRTC.now(); (non conosco la libreria)

ciao,
partiamo dalla base per far funzionare il ds3232rtc versione 2.0.0.1 di che librerie ho bisogno?

io devo vedere data e ora, e a una certa ora deve accendersi la luce questo devo fare,

(perche cambiano le librerie, cambiando le variabili per farci impazzire?)

Le librerie sono scritte da persone come me e te, hobbisti. Mica sono librerie scritte da una azienda professionale ^-^

Comunque qui il tipo ha scritto come si usa:

devi inizializzarla nel setup con begin e usare get per leggere il rtc

ho risolto,
e do la soluzione

aggiungere queste librerie all'inizio :

type or paste code here <#include <DS3232RTC.h>//http://github.com/JChristensen/DS3232RTC
#include <Time.h>  //http://www.arduino.cc/playground/Code/Time
#include <RTClib.h>

DS3232RTC myRTC;

e questo va nel loop 

// prendo ora attuale
    DateTime now = myRTC.get();
    //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());

non aggiorno mai più le librerie