Weerstation BMP280

Alles wat niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 15
Geregistreerd: 28 Sep 2014, 00:10

Weerstation BMP280

Berichtdoor Arekkusu » 05 Aug 2017, 14:11

Hulp gevraagd.

Ben bezig met het maken van een weerstation.
Ik gebruik hier een BMP280 sensor(SCL Pin A5 en SDA Pin A4), LCD 16x2 scherm en een Arduino bordje.
De code die ik nu gebruik werkt.
Alles word netjes weergegeven in de SerialMonitor en op het LCD schermpje.
Wat ik echter wil is dat de pressure die nu in cijfers weergegeven wordt op het LCD schermpje, verandert van bijv. de waarden tussen de 1010 en 1020 mBar
in "Verandelijk weer" en "20 % kans op regen" etc.etc.
Ik kan er maar niet achter komen in welke hoek ik dat moet zoeken.
Wie helpt mij op weg. Niet met de hele code, dat wil ik zelf uit dokteren.
Maar hoe lees ik de waardes van de sensor en zet deze in plain tekst om.

Advertisement

Gebruikers-avatar
Berichten: 4802
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Weerstation BMP280

Berichtdoor nicoverduin » 05 Aug 2017, 14:53

tabel maken is meest eenvoudig.
cpp code
//
// opbouw van een tabel entry
//
struct weerType {
uint16_t mBar; // alles vanaf deze waarde
char Text[30]; // krijgt deze tekst
};
//
// dit voorbeeld bevat 3 druk regios
//

weerTypeTabel[] = {
{1000, "Slecht weer"}, // vanaf 1000 tot 1010
{1010, "Veranderlijk weer"}, // vanaf 1010 tot 1020
{1020, "20% kans op regen"}, // vanaf 1020 en hoger
{9999, "Komt nooit voor"}
};

/**
* @name zoekIndexInTabel
* @param druk huidige druk die in de tabel gezocht wordt
* @return uint16_t index in de weerTypeTabel die we moeten gebruiken
*/
uint16_t zoekIndexInTabel (uint16_t druk){

uint16_t aantalEntries = sizeof(weerTypeTabel) / sizeof(weerType); // bepaal aantal entries in de weerTypeTabel
int16_t returnIndex = -1; // geen index gevonden
for (uint16_t i = (aantalEntries-1); i >=0; i){
if (druk >= weerTypeTabel[i].mBar){
//
// we hebben een gebied gevonden
//
returnCode = i; // de juiste entry gevonden
break; // en stop met zoeken
}
}
return returnIndex; // deze verwijst naar de juiste index of -1
}


Eerst maak je een samenstelling beschrijving voor mBar en bijbehorende omschrijving
Daarna maak je een tabel met de gebieden die relevant zijn
In jouw sketch roep je de functie zoekIndexInTabel met als parameter de druk uit de sensor.
Als de index >= 0 is kun je de bijbehorende omschrijving ophalen als volgt bijv:
cpp code
Serial.println(weerTypeTabel[zoekIndexInTabel(druk)].Text));
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 15
Geregistreerd: 28 Sep 2014, 00:10

Re: Weerstation BMP280

Berichtdoor Arekkusu » 05 Aug 2017, 20:41

Hier had ik nooit opgekomen....zat met denken vast in dit stukje van de code met de simpele gedachte dat de oplossing in (P,2) gezocht moest worden.
Hartelijk dank Nico! Ik kan nu weer verder.

//klein stukje van de loop code waar ik met mijn gedachte ook in de loop ging!

double T,P;
double A = bmp.altitude(P,P0);
char result = bmp.startMeasurment();

if(result!=0){
delay(result);
result = bmp.getTemperatureAndPressure(T,P);
if(result!=0)
{

Serial.print("Temperatuur = ");Serial.print(T,2); Serial.print(" degC\n");
Serial.print("Pressure = ");Serial.print(P,2); Serial.print(" mBar\n");
Serial.print("Altitude = ");Serial.print(A,2); Serial.println(" m");
Serial.println("-------------------------");
}

Gebruikers-avatar
Berichten: 4802
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Weerstation BMP280

Berichtdoor nicoverduin » 05 Aug 2017, 21:12

Gewoon van die druk een int maken. Micro bar gaat een wezenlijk andere uitkomst geven.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Theekransje

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast