Hi,
Ik ben bezig wat code aan het schrijven zodat ik voor de reisreferentie zeg 1x in de 5 minuten wat data uit mijn BME280 sensor op haal.
Als ik continu de data op haal, wordt de dissipatie in deze te hoog en resulteerd in een te hoge temperatuur.
Dus ik heb een stukje code geschreven dat voor test dit 1x in de 5 seconde doet wat natuurlijk later naar iets van 2 a 10 minuten gaat.
Ik heb er voor gekozen, of beter gezegt ik probeer aan de hand van millis timing 1x per 5 seconde de data uit de BME280 op te halen.
Deze probeer ik dan in een variabel te stoppen die ik dan zo vaak als ik wil kan uitlezen zonder dat de sensor warm wordt.
Dit lukt echter niet, hoe krijg ik wat hier uit komt: (mySensor.readFloatHumidity(), 0) en (mySensor.readTempC(), 2);
in een variabel wel ik dan naar het scherm kan schijven zo vaak als ik dit nodig vind.
Dit is de code om een variabel naar het scherm(buffer) te schrijven: u8g2.print(dt.second);
En tekst doe je op de ze manier: u8g2.drawStr(0,62,"Celsius");
Ik ben dit probleem al eens meer tegengekomen maar kan het niet meer terug vinden.
De code
c code:
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <DS3231.h>
#include "SparkFunBME280.h"
BME280 mySensor;
DS3231 clock;
RTCDateTime dt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
long tmp = 0;
long hum = 0;
unsigned long currentTime;
unsigned long loopTime;
void setup(void) {
Serial.begin(9600);
Wire.begin();
mySensor.setI2CAddress(0x76);
mySensor.beginI2C();
mySensor.setFilter(4); //0 to 4 is valid. Filter coefficient. See 3.4.4
mySensor.setStandbyTime(7); //0 to 7 valid. Time between readings. See table 27.
mySensor.setTempOverSample(16); //0 to 16 are valid. 0 disables temp sensing. See table 24.
mySensor.setPressureOverSample(16); //0 to 16 are valid. 0 disables pressure sensing. See table 23.
mySensor.setHumidityOverSample(16); //0 to 16 are valid. 0 disables humidity sensing. See table 19.
mySensor.setMode(MODE_NORMAL); //MODE_SLEEP, MODE_FORCED, MODE_NORMAL is valid. See 3.3
// Initialize DS3231
Serial.println("Initialize DS3231");;
clock.begin();
// Start display
u8g2.begin();
//Timing setup for Temperature measurement samples
currentTime = millis();
loopTime = currentTime;
}
void loop(void) {
dt = clock.getDateTime();
u8g2.clearBuffer(); // clear the internal memory
u8g2.drawRFrame(0,0,128,14,6);
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(0,12," **** ****"); // write something to the internal memory
u8g2.drawStr(0,10," NoiseAmp "); // write something to the internal memory
u8g2.setCursor(0,35);
u8g2.print(dt.hour);
u8g2.drawStr(12,35,":");
u8g2.setCursor(15,35);
u8g2.print(dt.minute);
u8g2.drawStr(28,35,":");
u8g2.setCursor(31,35);
u8g2.print(dt.second);
// code voor het 1x in de 5 seconde uitlezen van de temperatuur en de luchtvochhtigheidsgraad
currentTime = millis();
if(currentTime >= (loopTime + 5000)){ // Every 5 second measure temperature
hum = (mySensor.readFloatHumidity(), 0); // plaats vochtighaidsgraad in tijdelijke variabel "hum"
tmp = (mySensor.readTempC(), 2); // plaats temperatuur in tijdelijke variabel "tmp"
loopTime = currentTime; // Updates loopTime
}
u8g2.drawStr(0,45,"H = : ");
u8g2.setCursor(38,45);
u8g2.print("hum"); // write something to the internal memory
u8g2.drawStr(0,55,"T = : ");
u8g2.setCursor(38,55);
u8g2.print("tmp");
u8g2.sendBuffer(); // transfer internal memory to the display
delay(400);
}
Weet een van jullie de oplossing?
Groet,
Bram
[Bericht gewijzigd door blackdog op dinsdag 4 juni 2019 00:31:08 (55%)