LoRa_APRS_iGate/src/bme_utils.cpp

142 lines
3.3 KiB
C++
Raw Normal View History

2023-06-18 00:28:40 +02:00
#include "bme_utils.h"
#include "configuration.h"
#include "gps_utils.h"
#include "display.h"
2023-08-05 17:20:06 +02:00
#define SEALEVELPRESSURE_HPA (1013.25)
#define HEIGHT_CORRECTION 0 // in meters
#define CORRECTION_FACTOR (8.2296) // for meters
2023-07-16 22:47:24 +02:00
2023-06-19 06:52:40 +02:00
extern Configuration Config;
extern String fifthLine;
2023-06-18 00:28:40 +02:00
2023-07-16 22:47:24 +02:00
2023-06-18 00:28:40 +02:00
namespace BME_Utils {
2023-10-10 03:12:29 +02:00
#ifndef BMPSensor
2023-06-18 00:28:40 +02:00
Adafruit_BME280 bme;
2023-10-10 03:12:29 +02:00
#else
Adafruit_BMP280 bme;
#endif
2023-06-18 00:28:40 +02:00
void setup() {
if (Config.bme.active) {
bool status;
status = bme.begin(0x76); // Don't forget to join pins for righ direction on BME280!
if (!status) {
2023-10-10 03:12:29 +02:00
Serial.println("Could not find a valid BME280 or BMP280 sensor, check wiring!");
show_display("ERROR", "", "BME/BMP sensor active", "but no sensor found...");
2023-06-18 00:28:40 +02:00
while (1); // sacar esto para que quede pegado si no encuentra BME280
} else {
2023-10-10 03:12:29 +02:00
#ifndef BMPSensor
2023-06-18 00:28:40 +02:00
Serial.println("init : BME280 Module ... done!");
2023-10-10 03:12:29 +02:00
#else
Serial.println("init : BMP280 Module ... done!");
#endif
2023-06-18 00:28:40 +02:00
}
} else {
2023-10-10 03:12:29 +02:00
#ifndef BMPSensor
2023-07-30 17:59:56 +02:00
Serial.println("(BME not 'active' in 'igate_conf.json')");
2023-10-10 03:12:29 +02:00
#else
Serial.println("(BMP not 'active' in 'igate_conf.json')");
#endif
2023-06-18 00:28:40 +02:00
}
}
String generateTempString(float bmeTemp) {
String strTemp;
strTemp = String((int)bmeTemp);
switch (strTemp.length()) {
case 1:
return "00" + strTemp;
break;
case 2:
return "0" + strTemp;
break;
case 3:
return strTemp;
break;
default:
return "-999";
}
}
String generateHumString(float bmeHum) {
String strHum;
strHum = String((int)bmeHum);
switch (strHum.length()) {
case 1:
return "0" + strHum;
break;
case 2:
return strHum;
break;
case 3:
if ((int)bmeHum == 100) {
return "00";
} else {
return "-99";
}
break;
default:
return "-99";
}
}
String generatePresString(float bmePress) {
String strPress;
strPress = String((int)bmePress);
switch (strPress.length()) {
case 1:
return "000" + strPress + "0";
break;
case 2:
return "00" + strPress + "0";
break;
case 3:
return "0" + strPress + "0";
break;
case 4:
return strPress + "0";
break;
case 5:
return strPress;
break;
default:
return "-99999";
}
}
String readDataSensor() {
String wx, tempStr, humStr, presStr;
float newTemp = bme.readTemperature();
2023-10-10 03:12:29 +02:00
float newHum;
#ifndef BMPSensor
newHum = bme.readHumidity();
#else
newHum = 0;
2023-12-12 05:21:49 +01:00
#endif
2023-06-18 00:28:40 +02:00
float newPress = (bme.readPressure() / 100.0F);
2023-06-19 06:52:40 +02:00
2023-07-16 22:47:24 +02:00
//bme.readAltitude(SEALEVELPRESSURE_HPA) // this is for approximate Altitude Calculation.
2023-06-18 00:28:40 +02:00
if (isnan(newTemp) || isnan(newHum) || isnan(newPress)) {
Serial.println("BME280 Module data failed");
wx = ".../...g...t...r...p...P...h..b.....";
2023-06-19 06:52:40 +02:00
fifthLine = "";
2023-06-18 00:28:40 +02:00
return wx;
} else {
tempStr = generateTempString((newTemp * 1.8) + 32);
2023-10-10 03:12:29 +02:00
#ifndef BMPSensor
2023-06-18 00:28:40 +02:00
humStr = generateHumString(newHum);
2023-10-10 03:12:29 +02:00
#else
humStr = "-99";
#endif
2023-08-05 17:20:06 +02:00
presStr = generatePresString(newPress + (HEIGHT_CORRECTION/CORRECTION_FACTOR));
2023-06-19 06:52:40 +02:00
fifthLine = "BME-> " + String(int(newTemp))+"C " + humStr + "% " + presStr.substring(0,4) + "hPa";
2023-06-18 00:28:40 +02:00
wx = ".../...g...t" + tempStr + "r...p...P...h" + humStr + "b" + presStr;
return wx;
}
}
}