-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpressure.ino
143 lines (126 loc) · 3.28 KB
/
pressure.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
double tempPressure[3];
float humidityRead, pressureRead;
double tempFromPressure, bmpAltitude;
double baselinePressure = -9999;
bool tempStarted = false;
#ifdef LOG_PRESSURE
#ifdef PRESSURE_TYPE
#define SEALEVELPRESSURE_HPA (1013.25)
#if PRESSURE_TYPE == BME280
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 pressure; // I2C
#else
#include <SFE_BMP180.h>
SFE_BMP180 pressure;
#endif
const unsigned int reading_interval = 1000;
unsigned long last_reading = 0;
void SetupPressure(){
if (!pressure.begin()){
failure(3);
}
}
void CheckPressure(){
if((getLogStarted() && millis()-last_reading >= reading_interval) || last_reading==0){
if(!isTX()){
#if PRESSURE_TYPE == BME280
getBMETempPressure();
#else
getBMPTempPressure();
tempFromPressure = tempPressure[0]; //temperature from pressure sensor
bmpAltitude = tempPressure[2];
pressureRead = tempPressure[1];
humidityRead = 0;
#endif
last_reading = millis();
}
}
}
#if PRESSURE_TYPE == BME280
void getBMETempPressure(){
tempFromPressure = pressure.readTemperature();
pressureRead = (pressure.readPressure()/100.0F);
humidityRead = pressure.readHumidity();
bmpAltitude = pressure.readAltitude(SEALEVELPRESSURE_HPA);
if(baselinePressure<=-9999){
#ifdef DEBUG_SERIAL
DEBUG_SERIAL.print(F("Set baseline pressure to "));
DEBUG_SERIAL.println(pressureRead);
#endif
baselinePressure = pressureRead;
tempStarted = true;
}
}
#else
void getBMPTempPressure(){
char status;
double T,P,p0,a;
ReadGPS();
status = pressure.startTemperature();
if (status != 0){
delay(status);
status = pressure.getTemperature(T);
ReadGPS();
tempPressure[0] = T;
if (status != 0){
status = pressure.startPressure(3);
if (status != 0){
delay(status);
status = pressure.getPressure(P,T);
ReadGPS();
if (status != 0){
tempPressure[1] = P;
GPS.Pressure = P;
if(baselinePressure<=-9999){
#ifdef DEBUG_SERIAL
DEBUG_SERIAL.print(F("Set baseline pressure to "));
DEBUG_SERIAL.println(P);
#endif
baselinePressure = P;
tempStarted = true;
}
tempPressure[2] = pressure.altitude(P,baselinePressure);
}else if (!tempStarted) failure(4);
}
else if (!tempStarted) failure(5);
}
else if (!tempStarted) failure(6);
}
else if (!tempStarted) failure(7);
}
#endif
#endif
#endif
double getTempFromPressure(){
return tempFromPressure;
}
double getBMPAltitude(){
return bmpAltitude;
}
double getBMPAltitudeF(){
return mToF(bmpAltitude);
}
float getBaselinePressure(){
return baselinePressure;
}
float getHumidityRead(){
return humidityRead;
}
float getPressureRead(){
return pressureRead;
}
float getBMEDewPoint(){
#if PRESSURE_TYPE == BME280
return dewPointFast(getTempFromPressure(),getHumidityRead());
#else
return -573.333;
#endif
}
double cToF(double c){
return ((c * 1.8) + 32);
}
double mToF(double m){
return m*3.28084;
}