Go Down

Topic: [RISOLTO]Scrivere valore di temperatura su shield "display Nokia 6100" (Read 1 time) previous topic - next topic

matrix77

Salve a tutti e buon anno!



Oggi sono qui perchè ho incontrato un piccolo problema, utilizzando lo shield "display Nokia 6100" ed in sostanza, non riesco a trovare il modo di visualizzare la temperatura, su questo display.
Posto le poche righe di codice create:
Code: [Select]
//Programma di test display 6100

#include <ColorLCDShield.h>

LCDShield lcd;  
int potPin = 0;                            
float temperature = 0;                      
int redLED=07;   //Pin10 = Green LED
int yellowLED=12;
int greenLED=13;
long val=0;

void setup()
{
 lcd.init(PHILLIPS);  //Driver display
 lcd.contrast(40);  // contrasto
 lcd.clear(WHITE);  // fondo schermo
 pinMode(redLED, OUTPUT);                  //LED controllo soglia...
 pinMode(greenLED, OUTPUT);    //LED controllo soglia...
 pinMode(yellowLED, OUTPUT);   //LED controllo soglia...
 Serial.begin(9600);  
 Serial.println("Test Sonda    ");       //Test scrittura su seriale
 lcd.setStr("TEMPERATURA", 2, 20, SLATE, WHITE);
 lcd.setStr("MISURATA", 20, 30, SLATE, WHITE);
 lcd.setStr(long)temperature, 40, 30, SLATE, WHITE); //questa riga l'ho creata con lo scopo di scrivere sul display, ma a quanto pare non funziona
}

void loop()
{
 val = analogRead(potPin);                 //Leggo la temperatura da analogica
 temperature = (5*val*100/1024);           //Converto la tensione in temperatura
 Serial.println ((long)temperature);       //Stampo la temperatura senza virgole
 
 if (temperature >= 150) {
   digitalWrite (redLED, HIGH);
   lcd.setStr("yes", 90, 30, SLATE, WHITE);
}
else
{
 digitalWrite (redLED, LOW);
   lcd.setStr("NO", 90, 30, SLATE, WHITE);
}
}




Ho creato questo piccolo programma con lo scopo di fare pratica con questo shield, ma il mio problema è nell' utilizzo della funzione "lcd.setStr" che riesco ad utilizzare solo, con caratteri alfanumerici.
Ho provato a leggere le istruzioni della funzione nel file allegato alla libreria, ma non riesco a riportare nel display, la temperatura rilevata.
In rete non ho trovato nessun esempio, a parte l'ormai consolidato display con libreria "Lcdcrystal".
Per chi volesse provare a compilare il codice, ricordo che funziona solo con IDE 1.0.

Ciao

lesto

a parte che

Code: [Select]
lcd.setStr(long)temperature, 40, 30, SLATE, WHITE);
è errata a priori

ma il punto è che la funzione si aspetta di ricevere un array di char, ovvero una stringa, quindi devi convertire il numero in stringa. Puoi farlo a mano, ci sono vari esempi nel forum, la sprintf:

Code: [Select]
char str[20]  = "";
float f = 4.5;
sprintf(str, "%f", f);


ma sappi che potrebbe occupare un po' di spazio in più che farselo a mano, per via del fatto che gestisce molti tipi di formato, precisione, e permette persino di usare altre stringhe
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Michele Menniti

Lesto, per errata a priori ti riferisci solo alla mancanza di una "(" ?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lesto

#3
Jan 05, 2013, 02:09 am Last Edit: Jan 05, 2013, 02:10 am by lesto Reason: 1
:)

edit: poi se il metodo non è sovraccarico per accettare anche i long, allora stai dando un long che viene ricastato ad int e usato come indirizzo dell'array di char, e quindi stampi un area di memoria più o meno a caso.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

matrix77

Ciao Lesto e ti ringrazio per la risposta, in effetti avevo dimenticato una parentesi in quella riga di programma, ma alla base c' era un bell' errore di concetto.

Adesso torno a studiare un po', grazie soprattutto al tuo aiuto.

Ciao

Go Up