Ciao a tutti, ho un problema con questi componenti:
lcd ST920
bmp180
Entrambi utilizzano il pin analogico A4. lo sketch mi funziona bene, in quanto dalla seriale vedo tutti i valori del sensore.
Ma il monitor rimane vuoto.
Se per prova non inizializzo il sensore il display funziona.
E' possibile in qualche modo cambiare il pin di ingresso? per esempio per l'lcd utilizzare l'1-2-3 al posto del 2-3-4?
Grazie.
il BMP180 funziona in I2C, quindi tassativamente A4 e A5 (sda e scl)
l'LCD con ST920, con che libreria lo usi ?
e metti anche lo sketch, che si fa' prima
Grazie per la risposta!
L'avevo intuito perchè in tutti i tutorial ci si appoggiava a qui pin, quindi l'unica è cambiare i pin dell'LCD, sempre che sia possibile...
Questo il codice:
#include <SFE_BMP180.h>
#include <Wire.h>
#include "U8glib.h"
// Crea un'istanza della classe SFE_BMP180
SFE_BMP180 pressure;
// Identifico lo schermo
U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: en=18,rw=16,di=17
void setup()
{
Serial.begin(9600);
// Inizializza e calibra il sensore
if (pressure.begin())
Serial.println("BMP180 operativo.");
else
{
Serial.println("BMP180 non collegato correttamente.\n\n");
while(1); // Loop perpetuo
}
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
// --------------------------------------------------------------------
// Routine di lettura del sensore BMP180
// All'interno va cablato il valore dell'altitudine (A) della lettura.
//
// Parametri in uscita:
// altit = altezza in metri della stazione di lettura
// temp = temperatura letta dal sensore in gradi centigradi
// press = pressione atmosferica assoluta in milliBar
// press0 = pressione equivalente sul livello del mare in milliBar
// --------------------------------------------------------------------
void leggi_BMP180(float* temp, float* press) {
char status;
double T,P;
// Prima è necessaria una lettura della temperatura.
// Ritorna il tempo di attesa per la lettura della pressione.
status = pressure.startTemperature();
// Attende il completamento della lettura
delay(status);
// Ritorna la lettura di temperatura.
status = pressure.getTemperature(T);
// Legge la pressione:
// Va inserito il parametro di oversampling ( da 0 a 3)
// Più è alto migliore è la precisione, maggiore è il tempo di attesa
status = pressure.startPressure(3);
// Attende il completamento della misura.
delay(status);
// Legge la pressione atmosferica. La funzione oltre a ritornare
// la pressione letta ritorna di nuovo il valore di temperatura.
status = pressure.getPressure(P,T);
*temp = T;
*press = P;
}
void loop()
{
float temperatura, pressione;
leggi_BMP180(&temperatura, &pressione);
// Stampa per il debug
Serial.print("Pressione atmosferica in mBar ......... = ");
Serial.println(pressione);
Serial.print("Temperatura in gradi centigradi ....... = ");
Serial.println(temperatura);
Serial.print("\n\n");
u8g.firstPage();
do {
u8g.setFont(u8g_font_courB10);
u8g.drawStr( 0, 12 , "TABIA' EUGENIO");
u8g.setFont(u8g_font_courB08);
u8g.drawStr( 0, 24 , "TEMPERATURA");
u8g.setPrintPos (80, 24); // imposta x, y posizione per la funzione di stampa
u8g.print (temperatura); // Stampa la temperatura
u8g.drawStr( 0, 36 , "PRESSIONE");
u8g.setPrintPos (80, 36); // imposta x, y posizione per la funzione di stampa
u8g.print (pressione); // Stampa la temperatura
} while( u8g.nextPage() );
delay(10000); //tempo tra una lettura e l'altra
}
Questo codice funziona perchè il monitor seriale mi visualizza tutti i dati corretti, ma sull'lcd non si visualizza niente...
Sapete come risolvere il problema?
Grazie 1000.
stai usando un collegamento con SPI software ( sara' lenta )
SW SPI
U8GLIB_ST7920_128X64_1X(sck, mosi, cs [, reset])
U8GLIB_ST920_128X64_1X u8g(18,16,17);
Trova quindi un pin libero e collegaci il filo che attualmente va al pin 18, cambiando l'assegnazione
Non sarebbe meglio usare lo SPI hardware sui pin 11, 12, 13? Sono già impegnati?
Trova quindi un pin libero e collegaci il filo che attualmente va al pin 18, cambiando l'assegnazione
Non sarebbe meglio usare lo SPI hardware sui pin 11, 12, 13? Sono già impegnati?
I pin 11,12 e 13 ora sono utilizzati da alcuni led ma li posso spostare/gestire meglio. (non erano menzionati sul codice perchè fanno parte di un secondo progetto.)
Stasera provo.
Ho visto un po' di guide per far funzionare questo lcd, e tutte inserivano i pin negli alloggiamenti analogici. sinceramente non ho mai provato a metterli su quelli digitali.
Stasera comunque provo!
p.s. Ne approfitto e scrivo qui:
Il mio scopo è visualizzare i dati dei vari sensori sul display con una frequenza finale diciamo di 15 secondi, mentre inviarli ad una tabella mysql tramite php con una frequenza di 1 ora.
L'unico sistema è quello di "sdoppiare" i delay" utilizzando la funzione "millis" oppure si potrebbe fare con un if dove gli passo un limite di tempo?
Grazie 1000 ancora... pian piano riesco a creare qualcosina...
Display che usano pin analogici credo non se ne siano mai visti :).
Display che usano pin analogici credo non se ne siano mai visti :).
Ma su arduino quei pin non sono analogici? c'è scritto "analog in". e anche nei tutorial che ho letto parlavano di pin analogici A2,A3 ed A4.
Non riesco a capire...
Sono ingressi analogici, ma possono anche funzionare come ingressi/uscite digitali, e nel caso del display sicuramente vengono usati in quest'ultimo modo.
Ah, ok... ho iniziato arduino circa dicembre e finchè si parlava di accendere un led tutto ok...
Moh iniziamo sul serio con sensori, schield, lcd... praticamente in questa ultima settimana di intenso studio non c'è stata una frase di qualsiasi tutorial da cui non abbia imparato qualcosa...
Però man mano che si impara le soddisfazioni crescono!