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
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.
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
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 . 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...
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.
#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)
@nandocapo: essendo il tuo primo post, ti chiederei cortesemente di presentartiQUI (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.