Sketch semplice termostato non funziona...

Ho realizzato uno sketch per realizzare un semplice termostato, mettendo insieme alcune librerie e facendo delle modifiche. Ma sono talmente digiuno di programmazione che ho diverse difficoltà…Sicuramente ho sbagliato nella parte che legge la temperatura e controlla se questa ha raggiunto il valore impostato. Ho utilizzato due librerie pubbliche e una parte di codice trovato sulla rete ( non mi ricordo dove ) Una domanda : lo posso utilizzare e modificare a mio piacimento ?
Nel programma si fa’ riferimento a dei “comandi” che sicuramente sono presenti nelle librerie caricate. Ma come faccio a conoscerli per utilizzarli ? Ad esempio una parte di codice dello sketch che utilizza il max6675 è questa :

int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

int vccPin = 3;
int gndPin = 2;

thermocouple.readCelsius()

Come faccio a conoscere i comandi che posso utilizzare in base alla libreria caricata ?
Scusate le domande da nubbio che per molti avranno risposte ovvie ma, come avrete capito, sono veramente digiuno di programmazione…
Grazie per la vostra pazienza, questo è il codice che ho scritto e che non funziona…viene letta regolarmente la temperatura ma lo stato del pin 7 rimane alto, sia sotto la soglia impostata ( 50 gradi ) che quando questa viene superata…


// prova termostato
// ver. 1.0 22-07-2011

#include <max6675.h>
#include <LiquidCrystal.h>

#define RESISTENZA 7 //Resistenza su D7

#define TMIN 50 //soglia intervento termostato
#define ISTERESI 2 //isteresi

#define ON 1
#define OFF 0

int Temperatura; //contiene la temperatura letta dal sensore

int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;

LiquidCrystal lcd(13, 8, 9, 10, 11, 12);

// make a cute degree symbol
uint8_t degree[8] = {140,146,146,140,128,128,128,128};

void setup() {
Serial.begin(9600);
// use Arduino pins
pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
pinMode(RESISTENZA, OUTPUT); //D7 è la linea di uscita

lcd.begin(16, 2);
lcd.createChar(0, degree);

// wait for MAX chip to stabilize
delay(500);
}

void loop() {

lcd.clear(); //inizializza il display
lcd.setCursor(0, 0); //posiziona il cursore sulla linea 0 riga 0
lcd.print(“MAX6675 test”); //scrive MAX6675 test sul display

thermocouple.readCelsius(); //Invia comando lettura temperatura
Temperatura=BYTE;

if (Temperatura < TMIN) //temperatura bassa attivare resistenza
digitalWrite(RESISTENZA, ON); //attiva il PIN 7
if (Temperatura >= TMIN+ISTERESI) //temperatura alta disattivare resistenza
digitalWrite(RESISTENZA, OFF); //disattiva il PIN7

lcd.setCursor(0,1); //posiziona il cursore sulla linea 1 riga 0
lcd.print(thermocouple.readCelsius());
lcd.print(0, BYTE);
lcd.print("C ");

delay(1000);
}

1) per capire se puoi usare oppure no del codice, devi vedere con che licenza è rilasciato. Generalmente si usa la GPL, ma ora sta prendendo piede la Creative-Commons. Ogni licenza permette e non permette alcune cose.

2) Secondo me la parte di codice incriminata è questa:

thermocouple.readCelsius(); //Invia comando lettura temperatura
Temperatura=BYTE;

Non conosco la libreria usata ma non capisco cosa tu stia cercando di fare. Nel senso che ho capito che vuoi leggere la temperatura ma cosa fa .readCelsius? Legge la temperatura, e poi? La restituisce come valore oppure la memorizza da qualche parte? Nel primo caso sarebbe logico fare: Temperatura?thermocouple.readCelsius(); Nel secondo sarebbe da usare la variabile usata ma non credo si tratti di BYTE dato che questa mi pare una parola riservata dell'IDE.

Grazie Leo per la tua risposta. Anche io credo che il problema sia in quella parte di codice ( che non ha caso è quello che ho cercato di modificare... ) Il valore letto dovrebbe essere memorizzato nella variabile Temperatura per poi eseguire il controllo se il valore è più alto o più basso di quello impostato.

Rimane sempre il problema di conoscere quali istruzioni si possano utilizzare in base alla libreria caricata.....

Prova con

Temperatura=byte(thermocouple.readCelsius());

sempre che quella funzione fornisca un byte in output.

Cmq non è difficile sapere cosa offre una libreria. Apri con un buon editor di codice il file header che richiami all'inizio del tuo sketch: lì, o nei file inclusi, trovi tutte le funzioni e le variabili che usa la libreria, con i tipi di dati usati e restituiti. Spulcia anche i relativi file .c o .cpp che mostrano "cosa" una funzione fa.

Grazie Leo !!! Con la modifica che mi hai suggerito funziona perfettamente !!!