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


Non lo so fare
     
Autore Messaggio opzioni
FrancoGual



[pagine pubblicate]

postato il:
11.02.2023, alle ore 22:51
Non lo so fare 

Buonasera a tutti.
Avendo un paio di sensori BME280, pressione temparatura e umidità e un display grafico volevo realizzare un visualizzatore di questi dati,avendolo già realizzato con un LCD 44780 16X4.
Ho realizzato le 3 finestre con le relative indicazioni, ma non riesco a scrivere le variabili.
non so scrivere un programma, mi arrangio provando e riprovando.
Ma stavolta la risposta dell'IDE è sempre la stessa.
'TEMP' was not declared in this scope

TEMP come PRES o HUM
Di seguito il codice, non fate caso alla strana manovra iniziale dove prelevo una variabile e gli aggiungo un centesimo.
 /*
BME280 I2C Test.ino

This code shows how to record data from the BME280 environmental sensor
using I2C interface. This file is an example file, part of the Arduino
BME280 library.

GNU General Public License

Written: Dec 30 2015.
Last Updated: Oct 07 2017.

Connecting the BME280 Sensor:
Sensor              ->  Board
-----------------------------
Vin (Voltage In)    ->  3.3V
Gnd (Ground)        ->  Gnd
SDA (Serial Data)   ->  A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
SCK (Serial Clock)  ->  A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro

 */

#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);
//////////////////////////////////////////////////////////////////
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);
   delay(6500);

  
  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);
   String TEMP;
   float HUM;
   float PRES;
   TEMP = temp+0.01; 
   HUM = hum+0.01;
   PRES = pres/100;
   client->print("Temp: ");
   client->print(temp);
   client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
   client->print("\t\tHumidity: ");
   client->print(hum);
   client->print("% RH");
   client->print("\t\tPressure: ");
   client->print(pres/100);
   client->println("MilliBar");
   Serial.println(HUM);
   Serial.println(TEMP);
   Serial.println(PRES);
   delay(3000);
}  
void draw(){


    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
  u8g.drawStr( 50, 13, TEMP);        // Variabile non VA!!!
  u8g.drawStr(105,13, "*C");
  
  u8g.drawStr( 5, 35, "Press");       // do this for Pressure
  u8g.drawStr( 50, 35, "20");        // Variabile non VA!!!
  u8g.drawStr(110,35, "mB");
  

  u8g.drawStr(8,56, "Hum");             // do this for humidity
  u8g.drawStr( 50, 56, "30");        // Variabile non VA!!!
  u8g.drawStr(115,56, "%"); 
       

Erano prove che facevo per vedere se la variabile effettivamente veniva scritta, difatti la leggevo in monitor seriale.
Il programma gira e il display visualizza i valori fissi che ho messo.
Ma se sostituisco il valore virgolettato torna il solito messaggio.
Idee? Proposte?
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.........
nautiluso




una ogni 10 livelli una ogni 10 livelli


postato il:
11.02.2023, alle ore 23:26
Non mi torna il serial baud 74880

nautiluso




una ogni 10 livelli una ogni 10 livelli


postato il:
12.02.2023, alle ore 00:11
metterei nella funzione

void draw(){

String TEMP; // così la dichiari


poi la riga dove c'è temp la cambierei con

u8g.print(TEMP);

mi sembra ci sia un wiki che ne parlava
nautiluso




una ogni 10 livelli una ogni 10 livelli


postato il:
12.02.2023, alle ore 00:16
https://github.com/olikraus/u8g2/issues/1060
rcc.roberto



[pagine pubblicate]

postato il:
12.02.2023, alle ore 08:01
Quel messaggio esce quando le variabili non sono state dichiarate all'inizio del programma.
Bisogna specificarne il tipo.

Esempio
Int TEMP = 0 pet gli interi
constant MOLTIPKUCATORE = 100 pet i valori che non cambiano

La dichiarazione riserva il posto in nemiria a seconda della lunghezza del tipo dichiarato, da in bit a tanti byte.
rcc.roberto



[pagine pubblicate]

postato il:
12.02.2023, alle ore 08:09
Vedo adesso che hai dichiarato le variabili all'interno delle SUB, non va bene perché così sono variabili locali, valgono solo per la SUB.
Per renderle globali e utilizzabili da tutti devi metterle all'inizio prima del Void Setup.

Inoltre, le SUB io le metto sempre prima del Setup, altrimenti non le trova
FrancoGual



[pagine pubblicate]

postato il:
12.02.2023, alle ore 08:20
Ok Grazie per il tempo dedicatomi e tolto alla finale di SAnremo.
La velocità a 74880 è data per MIA comodità.
Il WEMOS nasce a quella velocità e cosi vedo anche lo stato all'accensione.
Tutti i miei lavoretti vanno a 74880 bps.
Ho provato lo sketch, in effetti compila, ma non visualizza, il comando u8g print passa indenne la compilazione ma non può scrivere dove vorrei, anzi non lo trovo da nessuna parte sul display.
il comando dovrebbe essere u8g.drawStr( X,Y, var) dove X e Y sono i pixel dove voglio la scritta.
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.........
FrancoGual



[pagine pubblicate]

postato il:
12.02.2023, alle ore 09:01
rcc.roberto:
Vedo adesso che hai dichiarato le variabili all'interno delle SUB, non va bene perché così sono variabili locali, valgono solo per la SUB.
Per renderle globali e utilizzabili da tutti devi metterle all'inizio prima del Void Setup.

Inoltre, le SUB io le metto sempre prima del Setup, altrimenti non le trova


Provo, tuttavia mi chiedevo la struttura va in questo modo?
Prima includo le librerie, nel Setup metto quello generale per tutto e nel Loop o sottoloop quello che deve eseguire.
O sbaglio?



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.........
FrancoGual



[pagine pubblicate]

postato il:
12.02.2023, alle ore 09:31
Ho spostato le variabili in testa, fuori dal loop, ho modificato il comando u8gprint in u8g.dreaStr e questo è la risposta di IDE.
u8g.drawStr(50, 13,temp); // Variabile non VA!!!

no matching function for call to 'U8GLIB_ST7920_128X64::drawStr(int, int, float&)'


Ovvero, drawStr vuole, valore X, valoreY, float, o variabile o che caspita vuole?
Sempre 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.........
nautiluso




una ogni 10 livelli una ogni 10 livelli


postato il:
12.02.2023, alle ore 09:50
Nel reference a cui facevo riferimento avevo trovato

print
C++/Arduino Prototype:
void U8G2::print(...)
Description: This is the Arduino print() function. See the description on the Arduino Web Page here and here. This procedure will write the text to the current cursor position with the current font, set by setFont. The cursor position can be set by setCursor. Support for UTF-8 can be enabled with enableUTF8Print. This function can print variable values and supports the F() macro.
Arguments: See link.
Returns: -
Note 1: This function depends on the current font mode and drawing color.
Note 2: Use print(u8x8_u8toa(value, digits)) or print(u8x8_u16toa(value, digits)) to print numbers with constant width (numbers are prefixed with 0 if required).
See also: print (U8x8), enableUTF8Print, setCursor, setFont
Example:
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.setCursor(0, 15);
u8g2.print('Hello World!');

che appunto indica che può stampare variabili a patto che sia enableUTF8Print

Purtroppo non avendo un display non posso fare prove.

Ti rimando anche alla discussione

https://forum.arduino.cc/t/u8glib-problem-printing-value/380…

Facci sapere!



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/2024 GRIX.IT - La community dell'elettronica Amatoriale