errore compilazione wire

Salve

ho installato l'ultima versione dell'ide ma mi da errore di compilazione Arduino/genuino uno
Puo essere la libreria wire visto che li si ferma?

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include <OneWire.h>                   
#include <DallasTemperature.h>  

float massima = -50;   // dichiaro la variabile "massima"
float minima = 65;     //dichiaro la variabile "minima" 
float massimaInt = -50;   // dichiaro la variabile "massima interna"
float minimaInt = 65;     //dichiaro la variabile "minima interna" 

LiquidCrystal lcd(0);

int P1=A0;

#define ONE_WIRE_BUS 7 //assegno pin dati sensori
#define LED 13            // LED collegato al pin 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress sensExt = { 0x28, 0xC4, 0x07, 0xA6, 0x04, 0x00, 0x00, 0x32 };
DeviceAddress sensInt = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };

void setup()
{
  pinMode(LED, OUTPUT);     // imposta il pin spia output 
// inizio la libreria
sensors.begin();
// settaggio a 10 bit della risoluzione dei sensori
sensors.setResolution(sensExt, 10);
sensors.setResolution(sensInt, 10);
  
 lcd.begin(20, 4);
  lcd.setCursor(2,0);             ///////////////////////////////////////////
  lcd.print("GUTTY");             ////////pseudoSPLASH               ////////
  lcd.setCursor(2,1);             ////////      SCREEN BY GUIDO      ////////     
  lcd.print("Termometro");   ///////////////////////////////////////////  
  lcd.setCursor(2,2);             ////////      SCREEN BY GUIDO      ////////     
  lcd.print("con Arduino"); 
  
  delay(2000);
  lcd.clear();
  // Inizializzazione dei pulsanti
  pinMode(P1,INPUT);
  }
  void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Errore");
} else {
lcd.print(tempC);
lcd.print(" C");

if (tempC > massima) massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
 if (tempC < minima) minima = tempC; 
  if (tempC > massimaInt) massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
   if (tempC < minimaInt) minimaInt = tempC;  
  
  
  if (tempC > 25)  digitalWrite(LED, HIGH);  // accende spia se alta temp
   if (tempC > 12)  digitalWrite(LED, HIGH);  // accende spia se bassa temp
}
}
void loop() { 


sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("TEMP.Esterna: ");
lcd.setCursor(0,1);
printTemperature(sensExt);
lcd.setCursor(0,2);
lcd.print("TEMP.Interna: ");
lcd.setCursor(0,3);
printTemperature(sensInt);

   if(digitalRead(P1))
  {
    lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("esterna");
     lcd.setCursor(10,0);
     lcd.print("interna");

     lcd.setCursor(0,2);
     lcd.print("max ");
     lcd.print(massima);                    //stampo "massima"

     lcd.setCursor(0,3);
     lcd.print("min ");
     lcd.print(minima);                     //stampo "massima" 
      
     lcd.setCursor(10,2);
     lcd.print("max ");
     lcd.print(massimaInt);                    //stampo "massima"

     lcd.setCursor(10,3);
     lcd.print("min ");
     lcd.print(minimaInt);                    //stampo "massima" 


     
    delay (12000);
    lcd.clear();
   }
  }

al di là del fatto che debba modificare l'ultima parte di codice perchè non mi restituisce 2 minime e due massime distinte non riesco nemmeno a compilarlo mentre sulla versione "antica" girava

scusate... il codice dovrebbe leggere 2 temperature da due sensori ed in altra schermata accessibile tramite pulsante darmi le rispettive massime e minime

A parte che non mi sembra che tu abbia recepito molto quanto detto nell'altro thread, che errore ti dà?

ma che libreria LiquidCrystal usi, per accettare un comando del genere

LiquidCrystal lcd(0);

adesso non riesco a provarlo, quindi non vedo che errore da il compilatore.

a livello di logica, non distingue le 2 coppie di temperature perché nella funzione "printTemperature();" confronti sia la temp esterna che interna, quindi quando chiami la seconda volta la funzione col parametro "sensInt" resetti anche la lettura del parametro "sensExt".
poi anche nel led c'è qualcosa che non va, usi il ">" sia per la temp alta che bassa.

la libreria non ricordo dove l'ho scaricata tanto tempo fa e quindi ora l'ho sostituita con Adafruit liquidcristal per display i2c.

Sukko ho provato a modificare come mi hai indicato ma temo di non aver capito

#include <DallasTemperature.h>
#include <RTClib.h>
#include <OneWire.h>
#include "Wire.h"
#include "Adafruit_LiquidCrystal.h"


float massima = -50;   // dichiaro la variabile "massima"
float minima = 65;     //dichiaro la variabile "minima" 
float massimaInt = -50;   // dichiaro la variabile "massima interna"
float minimaInt = 65;     //dichiaro la variabile "minima interna" 

Adafruit_LiquidCrystal lcd(0);

int P1=A0;

#define ONE_WIRE_BUS 7 //assegno pin dati sensori
#define LED 13            // LED collegato al pin 13

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress sensExt = { 0x28, 0xC4, 0x07, 0xA6, 0x04, 0x00, 0x00, 0x32 };
DeviceAddress sensInt = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };

void setup() {


  pinMode(LED, OUTPUT);     // imposta il pin spia output 
// inizio la libreria
sensors.begin();
// settaggio a 10 bit della risoluzione dei sensori
sensors.setResolution(sensExt, 10);
sensors.setResolution(sensInt, 10);
  
 lcd.begin(20, 4);
  lcd.setCursor(2,0);             ///////////////////////////////////////////
  lcd.print("GUTTY");             ////////pseudoSPLASH               ////////
  lcd.setCursor(2,1);             ////////      SCREEN BY GUIDO      ////////     
  lcd.print("Termometro");   ///////////////////////////////////////////  
  lcd.setCursor(2,2);             ////////      SCREEN BY GUIDO      ////////     
  lcd.print("con Arduino"); 
  
  delay(2000);
  lcd.clear();
  
// Inizializzazione dei pulsanti
  pinMode(P1,INPUT);
  }
  void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Errore");
} else {
lcd.print(tempC);
lcd.print(" C");

if (tempC > massima) massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
 if (tempC < minima) minima = tempC; 
  if (tempC > massimaInt) massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
   if (tempC < minimaInt) minimaInt = tempC;  
  
  
  if (tempC > 25)  digitalWrite(LED, HIGH);  // accende spia se alta temp
   if (tempC > 12)  digitalWrite(LED, HIGH);  // accende spia se bassa temp
}
}
void loop() { 


sensors.requestTemperatures();

  
 if(digitalRead(P1))
  {
   
// ESTERNO
lcd.setCursor(0,0);
lcd.print("TEMP.Esterna: ");
lcd.setCursor(0,1);
tempC = sensors.getTempC(sensExt);
if (tempC == -127.00) {
  lcd.print("Errore");
} else {
  lcd.print(tempC);
  lcd.print(" C");

  if (tempC > massima)
    massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
  if (tempC < minima)
    minima = tempC;
}

// INTERNO
lcd.setCursor(0,2);
lcd.print("TEMP.Interna: ");
lcd.setCursor(0,3);
tempC = sensors.getTempC(sensInt);
if (tempC == -127.00) {
  lcd.print("Errore");
} else {
  lcd.print(tempC);
  lcd.print(" C");

  if (tempC > massimaInt)
    massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
  if (tempC < minimaInt)
    minimaInt = tempC;
}
   }
  }

l'errore che mi da è alla riga

tempC = sensors.getTempC(sensExt);
temp c was not declared in this scope

led sistemato.... grazie fratt

#include <DallasTemperature.h>
#include <RTClib.h>
#include <OneWire.h>
#include "Wire.h"
#include "Adafruit_LiquidCrystal.h"

float massima = -50;   // dichiaro la variabile "massima"
float minima = 65;     //dichiaro la variabile "minima"
float massimaInt = -50;   // dichiaro la variabile "massima interna"
float minimaInt = 65;     //dichiaro la variabile "minima interna"

Adafruit_LiquidCrystal lcd(0);

const int P1 = A0;
float tempC;

#define ONE_WIRE_BUS 7 //assegno pin dati sensori
#define LED 13            // LED collegato al pin 13

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress sensExt = { 0x28, 0xC4, 0x07, 0xA6, 0x04, 0x00, 0x00, 0x32 };
DeviceAddress sensInt = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };

void setup() {
  pinMode(LED, OUTPUT);     // imposta il pin spia output
  // inizio la libreria
  sensors.begin();
  // settaggio a 10 bit della risoluzione dei sensori
  sensors.setResolution(sensExt, 10);
  sensors.setResolution(sensInt, 10);

  lcd.begin(20, 4);
  lcd.setCursor(2, 0);            ///////////////////////////////////////////
  lcd.print("GUTTY");             ////////pseudoSPLASH               ////////
  lcd.setCursor(2, 1);            ////////      SCREEN BY GUIDO      ////////
  lcd.print("Termometro");   ///////////////////////////////////////////
  lcd.setCursor(2, 2);            ////////      SCREEN BY GUIDO      ////////
  lcd.print("con Arduino");

  delay(2000);
  lcd.clear();

  // Inizializzazione dei pulsanti
  pinMode(P1, INPUT);
}


void loop() {
  sensors.requestTemperatures();

  if (digitalRead(P1)) {
    // ESTERNO
    lcd.setCursor(0, 0);
    lcd.print("TEMP.Esterna: ");
    lcd.setCursor(0, 1);
    tempC = sensors.getTempC(sensExt);
    if (tempC == -127.00) {
      lcd.print("Errore");
    } else {
      lcd.print(tempC);
      lcd.print(" C");

      if (tempC > massima)
        massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
      if (tempC < minima)
        minima = tempC;
    }

    // INTERNO
    lcd.setCursor(0, 2);
    lcd.print("TEMP.Interna: ");
    lcd.setCursor(0, 3);
    tempC = sensors.getTempC(sensInt);
    if (tempC == -127.00) {
      lcd.print("Errore");
    } else {
      lcd.print(tempC);
      lcd.print(" C");

      if (tempC > massimaInt)
        massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
      if (tempC < minimaInt)
        minimaInt = tempC;
    }
  }
}

void printTemperature(DeviceAddress deviceAddress)
{
  tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    lcd.print("Errore");
  } else {
    lcd.print(tempC);
    lcd.print(" C");

    if (tempC > massima) massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
    if (tempC < minima) minima = tempC;
    if (tempC > massimaInt) massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
    if (tempC < minimaInt) minimaInt = tempC;
    if (tempC > 25)  digitalWrite(LED, HIGH);  // accende spia se alta temp
    if (tempC < 12)  digitalWrite(LED, HIGH);  // accende spia se bassa temp
  }
}

Paolo in questo modo stampa a display una lettura ogni volta che premo bottone, l'intento è che mi stampi 2 temperature (esterna ed interna) tenendole aggiornate e premendo bottone io possa conoscere le rispettive massime e minime

Non ho controllato la logica del codice, ho fatto solo in modo che compilasse senza errori.

tornando al codice originale, l'errore te lo da perché dichiari la variabile "tempC" all'interno della funzione "printTemperature()" e poi la usi anche nel loop().

nella seconda versione del codice la parte relativa al led sembra ancora sbagliata... usi 2 volte il >

per il discorso della doppia temperatura... il codice andrebbe un po' rivisto nel complesso.

Abbiamo già cercato di farlo in un altro thread, ma i nostri consigli non sono stati molto recepiti :confused:. Nell'ultimo sketch postato ha integrato del codice che gli ho passato io, ma non ha tolto quello in printTemperature() che sostituisce.

effettivamente non ci ho capito molto ma il mio livello di preparazione è scarso proprio... :blush:
Domani ho accesso al mio pc e vedo di studiarci su, certo che senza delle basi di programmazione serie è piu complicato. Dovrei prendermi una guida in italiano per studiare un po perchè andare per tentativi o imbeccate altrui non è molto edificante. :confused:

Ho risolto in questo modo:

#include <DallasTemperature.h>
////#include <RTClib.h>
#include <OneWire.h>
////#include "Wire.h"
#include "Adafruit_LiquidCrystal.h"

float massima = -50;   // dichiaro la variabile "massima"
float minima = 65;     //dichiaro la variabile "minima"
float massimaInt = -50;   // dichiaro la variabile "massima interna"
float minimaInt = 65;     //dichiaro la variabile "minima interna"

Adafruit_LiquidCrystal lcd(0);

/////const int P1 = A0;   //definisco pulsante minime e massime

float tempC;

#define ONE_WIRE_BUS 7 //assegno pin dati sensori
#define LED 13            // LED collegato al pin 13

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress sensExt = { 0x28, 0xC4, 0x07, 0xA6, 0x04, 0x00, 0x00, 0x32 };
DeviceAddress sensInt = { 0x28, 0x29, 0x6A, 0x84, 0x04, 0x00, 0x00, 0xDB };

void setup() {
  pinMode(LED, OUTPUT);     // imposta il pin spia output
  // inizio la libreria
  sensors.begin();
  // settaggio a 10 bit della risoluzione dei sensori
  sensors.setResolution(sensExt, 10);
  sensors.setResolution(sensInt, 10);

  lcd.begin(20, 4);
  lcd.setCursor(3, 0);            ///////////////////////////////////////////
  lcd.print("Termometro");        ////////pseudoSPLASH               ////////
  lcd.setCursor(3, 1);            ////////      SCREEN BY GUIDO      ////////
  lcd.print("con Arduino");       ///////////////////////////////////////////
  lcd.setCursor(3, 2);            
  lcd.print("by GUTTY");

  delay(2000);
  lcd.clear();

 ////// Inizializzazione dei pulsanti
 ////// pinMode(P1, INPUT);
  
}
void loop() {
  sensors.requestTemperatures();
    
    // ESTERNO
    lcd.setCursor(0, 0);
    lcd.print("TEMP.EST: ");
    lcd.setCursor(11,0);
    tempC = sensors.getTempC(sensExt);
    if (tempC == -127.00) {
      lcd.print("Errore");
    } else {
      lcd.print(tempC);
      lcd.print(" C");

      if (tempC > massima)
        massima = tempC;    //imposto condizione che restituisce valore "massima e minima"
      if (tempC < minima)
        minima = tempC;

        
        if (massima > 25)  digitalWrite(LED, HIGH);  // accende spia se alta temp
        if (massima < 12) digitalWrite(LED, HIGH);  // accende spia se bassa temp
 
    }

    // INTERNO
    lcd.setCursor(0, 2);
    lcd.print("TEMP.INT: ");
    lcd.setCursor(11, 2);
    tempC = sensors.getTempC(sensInt);
    if (tempC == -127.00) {
      lcd.print("Errore");
    } else {
      lcd.print(tempC);
      lcd.print(" C");

      if (tempC > massimaInt)
        massimaInt = tempC;    //imposto condizione che restituisce valore "massima e minima interna"
      if (tempC < minimaInt)
        minimaInt = tempC;

        lcd.setCursor(0,3);
        lcd.print("max:");
        lcd.print(massimaInt);      //stampo massima interna
        lcd.setCursor(11,3);
        lcd.print("min:");
        lcd.print(minimaInt);       //stampo minima interna
        
        lcd.setCursor(0,1);
        lcd.print("max:");
        lcd.print(massima);         //stampo massima esterna
        lcd.setCursor(11,1); 
        lcd.print("min:");           //stampo minima esterna
        lcd.print(minima);
             
          }
    }

Ho scelto di stampare tutto senza pulsanti per non crearmi ulteriori problemi, il codice è da migliorare sicuramente però funziona.
In futuro vorrei inserire data e ora e quindi pulsanti... per adesso è gia tanto così per le mie conoscenze.
Grazie a tutti per i preziosi consigli!!

io non ho ben chiaro come gestire wire.h in un sito ho trovato un programma per leggere gy 521 ma non ho capito in che modo write (adress) è usato come puntatore ecco alcune righe del programma:Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

sapreste darmi maggiori informazioni?

@nandocapo: essendo il tuo primo post, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo