ciao posto sketch :
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>
#include <Wire.h>
#include <SFE_BMP180.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);
// classe SFE_BMP180
SFE_BMP180 pressure;
int i=0;
int inv=0;
boolean stan=0;
float pressione ;
float altitudine;
float pressioneSLDM;
void setup()
{
Serial.begin(9600);
display.begin();
display.setContrast(40);
display.clearDisplay();
// 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
}
}
void leggi_BMP180(float* altit, float* temp, float* press, float* press0)
{
char status;
double A,T,P,p0;
// Altitudine della stazione di misura in metri. Può essere ricavata da un GPS
A = 378.0;
// 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);
// Ricava la pressione atmosferica SUL LIVELLO del mare.
// Questa è confrontabile con quella emessa dai bollettini meteo.
p0 = pressure.sealevel(P,A);
*altit = A;
*temp = T;
*press = P;
*press0 = p0;
}
void loop()
{
float altitudine,temperatura, pressione, pressioneSLDM;
leggi_BMP180(&altitudine, &temperatura, &pressione, &pressioneSLDM);
void setTextSize(uint8_t size);
//Stampa per il debug
Serial.print("Altezza in mt. della stazione di misura = ");
Serial.println(altitudine);
Serial.print("Pressione atmosferica in mBar ......... = ");
Serial.println(pressione);
Serial.print("Pressione atmosferica in mBar SLDM .... = ");
Serial.println(pressioneSLDM);
Serial.print("Temperatura in gradi centigradi ....... = ");
Serial.println(temperatura);
Serial.print("\n\n");
//sweep loops
for(i=0;i<=84;i=i+2){
if(i>0){
display.clearDisplay();
// display.drawLine(i-2,0,42,47,WHITE);
// display.drawLine(i,0,42,47,BLACK);
//grid();
meteo();
} else {
display.clearDisplay();
//display.drawLine(i,0,42,47,BLACK);
//grid();
meteo();
}
display.display();
delay(50);
}
for(i=84;i>=0;i=i-2){
if(i>=84){
display.clearDisplay();
//display.drawLine(i,0,42,47,BLACK);
//grid();
meteo();
display.display();
delay(50);
} else {
display.clearDisplay();
//display.drawLine(i+2,0,42,47,WHITE);
//display.drawLine(i,0,42,47,BLACK);
//grid();
meteo();
display.display();
delay(50);
}
}
}
void meteo(){
//grid();
display.setCursor(0,0);
display.println("Stazione meteo");
display.setCursor(0,13);
display.println("Press.assoluta");
display.setCursor(0,20);
display.println("mbar :___");
display.setCursor(54,20);
display.println(pressione);
display.setCursor(0,33);
display.println("Press.relativa");
display.setCursor(0,40);
display.println("mbar: ");
display.setCursor(40,40);
display.println(pressioneSLDM);
display.setCursor(0,40);
/*display.println("altitudine ");
display.setCursor(0,35);
display.println("m :___");
display.setCursor(54,40);
display.println(altitudine);*/
delay(10000); // Pausa di 10 secondi.
}