IoT - Modular - BMP180.cpp
Jump to navigation
Jump to search
Contents
#includes, Defines, etc...
1 #include "libraries.h"
2 #include "functions.h"
3 #include "externs.h"
4 #include "s-BMP180.h"
5
6 extern int Altitude;
7 struct BMP180_Readings BMP180_Datum;
BMP180_main()
1 void BMP180_main()
2 {
3
4 for (int Count = 0; Count < BMP180_Count; Count++)
5 {
6 BMP180_getReadings(0);
7 }
8
9 if (BMP180_Datum.Status == 0)
10 {
11 BMP180_Display();
12
13 SSD1306_Indicate_Action();
14
15 BMP180_SendData();
16
17 BMP180_debug();
18 }
19 else
20 {
21 debug_Trouble("BMP180 Status Bad");
22 BMP180_init();
23 }
24 }
BMP180_init()
1 int BMP180_init()
2 {
3 bool status;
4 char debugTEXT[46];
5
6 status = bmp.begin(0x76);
7 if (!status)
8 {
9 debug_LineOut("No BMP180(s)");
10 return (0);
11 }
12 else
13 {
14 sprintf(debugTEXT, "%2d BMP180(s) initialised", 1);
15 debug_LineOut(debugTEXT);
16 return (1); // This needs to change
17 }
18
19 // Currently only capable of using one...
20 }
BMP180_getReadings()
1 void BMP180_getReadings(int deviceNumber)
2 {
3 BMP180_Datum.Temperature = bmp.readTemperature();
4 BMP180_Datum.AbsPressure = bmp.readPressure() / 100.0F;
5
6 if (
7 (BMP180_Datum.Temperature != BMP180_Datum.Temperature) ||
8 (BMP180_Datum.AbsPressure != BMP180_Datum.AbsPressure))
9 {
10 BMP180_Datum.Status = -1;
11 }
12 else
13 BMP180_Datum.Status = 0;
14
15 // Attempting to derive SeaPressure based on formula found at:
16 // https://keisan.casio.com/exec/system/1224575267
17 BMP180_Datum.SeaPressure = BMP180_Datum.AbsPressure * pow((1 - ((0.0065 * Altitude) / (BMP180_Datum.Temperature + (0.0065 * Altitude) + 273.15))), -5.257);
18 }
Climate_Pressure_Correction()
1 float Climate_Pressure_Correction(float Pressure_Actual)
2 {
3 BMP180_getReadings(0);
4 float inHg = (BMP180_Datum.AbsPressure / 33.863886666667);
5 // // float inHg = 0;
6 Pressure_Correction = Pressure_Actual - inHg;
7 char FooBar[42];
8 sprintf(FooBar, "actual: %f, reading: %f", Pressure_Actual, inHg);
9 debug_Success(FooBar);
10 sprintf(FooBar, "Correction: %f", Pressure_Correction);
11 debug_Success(FooBar);
12 return (Pressure_Correction);
13 // return(0);
14 }
BMP180_SendData()
1 void BMP180_SendData()
2 {
3 char BMP180_JSON[100];
4
5 sprintf(BMP180_JSON,
6 "{\"Type\":\"BMP180\", \"Temperature\":%5.1f, \"AbsPressure\":%5.2f, \"SeaPressure\":%5.2f, \"inHg\":%5.2f}",
7 BMP180_Datum.Temperature,
8 BMP180_Datum.AbsPressure,
9 BMP180_Datum.SeaPressure,
10 (BMP180_Datum.AbsPressure / 33.863886666667) + Pressure_Correction);
11
12 MQTT_SendTELE("SENSOR", BMP180_JSON);
13 }
BMP180_Display()
1 void BMP180_Display()
2 {
3 float inHg = (BMP180_Datum.AbsPressure / 33.863886666667) + Pressure_Correction;
4 float Water = (49.161 * log(inHg) + 44.932);
5 SSD1306_Display_Sensor_Data2(
6 "BMP180",
7 "Temp:",
8 BMP180_Datum.Temperature,
9 "inHg",
10 inHg,
11 " H2O",
12 Water);
13
14 char FooBar[42];
15 sprintf(FooBar,
16 "inHg: %f - Corrected: %f",
17 BMP180_Datum.AbsPressure / 33.863886666667,
18 BMP180_Datum.AbsPressure / 33.863886666667 + Pressure_Correction);
19 debug_Success(FooBar);
20 sprintf(FooBar, "Correction: %f", Pressure_Correction);
21 debug_Success(FooBar);
22 }
BMP180_debug()
1 void BMP180_debug()
2 {
3 #ifdef DEBUG2
4 char debugTEXT[46];
5
6 debug_SectionTitle("BMP180:");
7 sprintf(debugTEXT, "Temperature: %5.1f C", BMP180_Datum.Temperature);
8 debug_LineOut(debugTEXT);
9 sprintf(debugTEXT, "Temperature: %5.1f F", 1.8 * BMP180_Datum.Temperature + 32);
10 debug_LineOut(debugTEXT);
11 sprintf(debugTEXT, "AbsPressure: %5.2f hPa", BMP180_Datum.AbsPressure);
12 debug_LineOut(debugTEXT);
13 sprintf(debugTEXT, "SeaPressure: %5.2f hPa", BMP180_Datum.SeaPressure);
14 debug_LineOut(debugTEXT);
15 #endif
16 }