home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


Ho-avete risolto.
     
Autore Messaggio opzioni
FrancoGual



[pagine pubblicate]

postato il:
14.02.2023, alle ore 22:15
Ho-avete risolto. 


 //Termometro, barometro, igrometro by Franco

#include <BME280I2C.h>
#include <Wire.h>
#include "U8glib.h"

#define SERIAL_BAUD 74880

BME280I2C bme;    // Default : forced mode, standby time = 1000 ms
                  // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);
   char pres_string[6];
   char temp_string[6]; //empty char array to hold the converted temp float 
   char hum_string[6];  //empty char array to hold the converted humidity float 
   float hum;
   float pres;
   float temp;
//---------------------------------------------------------------------------------
void setup()
{{  


  // Select font =================================================================
   
  
  u8g.setFont(u8g_font_8x13); 

  u8g.setColorIndex(1);                   // Instructs the display to draw with a pixel on. 
}

                  
  Serial.begin(SERIAL_BAUD);

  while(!Serial) {} // Wait

  Wire.begin();

  while(!bme.begin())
  {
    Serial.println("Could not find BME280 sensor!");
    delay(1000);
  }

  switch(bme.chipModel())
  {
     case BME280::ChipModel_BME280:
       Serial.println("Found BME280 sensor! Success.");
       break;
     case BME280::ChipModel_BMP280:
       Serial.println("Found BMP280 sensor! No Humidity available.");
       break;
     default:
       Serial.println("Found UNKNOWN sensor! Error!");
  }
}

//------------------------------------------------------------------
void loop()
{
   printBME280Data(&Serial);
   

  
  u8g.firstPage();
  do {   
    draw();
  } while( u8g.nextPage() );
 
}
void printBME280Data
(
   Stream* client
)
{
   float temp(NAN), hum(NAN), pres(NAN);
   
   BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
   BME280::PresUnit presUnit(BME280::PresUnit_Pa);

   bme.read(pres, temp, hum, tempUnit, presUnit);
  
   unsigned char tempC = temp+0.01; 
   unsigned char hum_float = hum+0.01;
   unsigned char pres_float = pres/100;
   
   
}  
void draw(){
   float temp(NAN), hum(NAN), pres(NAN);
   
   BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
   BME280::PresUnit presUnit(BME280::PresUnit_Pa);

   bme.read(pres, temp, hum, tempUnit, presUnit);
  
 

    u8g.drawFrame(0,0,128,21);            // upper frame
    u8g.drawFrame(0,21,128,21);           // middle frame
    u8g.drawFrame(0,42,128,21);           // lower frame
 
  
 // convert floats into char u8g strings    
  u8g.drawStr( 5, 13, "Temp");       // do this for temperature
  dtostrf(temp, 3, 2, temp_string);
  u8g.drawStr(45,13, temp_string);
  u8g.drawStr(105,13, "*C"); 

  u8g.drawStr(5,35, "Um/r");             // do this for humidity
  dtostrf(hum, 3, 2, hum_string);
  u8g.drawStr(45,35, hum_string);
  u8g.drawStr(110,35, "%"); 
  
  u8g.drawStr(5,56, "Pres");             // do this for pressure
  dtostrf(pres/100, 4, 2, pres_string);
  u8g.drawStr(45,56, pres_string);
  u8g.drawStr(110,56, "mB");
  delay(10000);            
}  

Mi sono intestardito e alla fine ho risolto, grazie alle vostre segnalazioni,consigli, critiche e tutto il resto.
Con il codice allegato funziona e visualizzo tutti i dati, decimali compresi.
Magari ci faccio un articoletto, visto che tutti le ministazioni meteo che usano il BME280 visualizzano su display a caratteri basato su 44780.
Non che col grafico sia tanto diverso, ma almeno qualcosa di carino si fa.
Grazie ancora a tutti.



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
primok




una ogni 100 livelli
una ogni 10 livelli


postato il:
15.02.2023, alle ore 08:47
Mi sono intestardito e alla fine ho risolto, grazie alle vostre segnalazioni,consigli, critiche e tutto il resto.
Con il codice allegato funziona e visualizzo tutti i dati, decimali compresi.
Magari ci faccio un articoletto, visto che tutti le ministazioni meteo che usano il BME280 visualizzano su display a caratteri basato su 44780.
Non che col grafico sia tanto diverso, ma almeno qualcosa di carino si fa.
Grazie ancora a tutti.


A me sembra un copia incolla del sorgente che avevo postato io, allora non mi spiego perchè dicevi che non andasse. In tutti i modi le variabili globali

float hum;
float pres;
float temp;

sono superfle dato che sono ridichiarate all'interno delle funzioni draw() e printBME280Data.

Primok





Più piccola è la mente più grande è la presunzione.
FrancoGual



[pagine pubblicate]

postato il:
15.02.2023, alle ore 10:23
Ho capito una cosa, che se il compilatore va a buon fine non è detto che funzioni come dovrebbe.
Considera che nello sketch postato i tre comandi unsigned ci sono, ma se li tolgo va lo stesso.
Visualizzo i dati corretti, o almeno gli stessi che ho in diagnostica.
Quando ho testato integralmente il tuo sketch avevo, come detto , nessun valore visualizzato a schermo arduino.
Praticamente ho copiato in void () draw
 float temp(NAN), hum(NAN), pres(NAN);
   
   BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
   BME280::PresUnit presUnit(BME280::PresUnit_Pa);

   bme.read(pres, temp, hum, tempUnit, presUnit); 

Con questo va, ho solo aggiunto un /100 alla variabile pres che essendo in hPa era appunto 100 volte più grande.
Grazie sempre.



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
primok




una ogni 100 livelli
una ogni 10 livelli


postato il:
15.02.2023, alle ore 12:21
Considera che nello sketch postato i tre comandi unsigned ci sono, ma se li tolgo va lo stesso.


Se ti riferisci a:

unsigned char tempC = temp+0.01;
unsigned char hum_float = hum+0.01;
unsigned char pres_float = pres/100;

questi non sono comandi ma dichiarazione di variabili di tipo char inizializzate
rispettivamente a

a temp+0.01
hum+0.01;
pres/100;

oltretutto sbagliate perché assegni a variabili di tipo unsigned char valori di tipo float.

Va lo stesso perché non sono usate da nessuna parte ed il compilatore di arduino è un pò troppo permissivo ma dovrebbe segnalarti quantomeno un warming.

Il valore #define SERIAL_BAUD 74880 per il baudrate da dove viene fuori?

Saluti




Più piccola è la mente più grande è la presunzione.
FrancoGual



[pagine pubblicate]

postato il:
15.02.2023, alle ore 16:02
Quello è il risultato della foga e/o entusiasmo.
Il serial mi serviva per verificare le variabili in monitor.
Appena funzionato ho alleggerito il codice che succhiava parecchie risorse e l'ho copincollato sul forum.
Poi ho eliminato gli unsigned e il resto che non serviva.
Grazie.



Anche il viaggio più lungo inizia con un piccolo passo.
Si vis pacem, para bellum!!!
Mark Zuckerberg ha reso suoi schiavi milioni di persone senza che se ne rendessero conto. F.G.
<Avete vinto voi,ma almeno non riuscirete a considerarmi vostro complice> Da Mediterraneo.
Inferno,Canto III,verso 51 Virgilio dice.........
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2023 GRIX.IT - La community dell'elettronica Amatoriale