STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include "main.h"
2
3#include <Arduino.h>
4#include <Wire.h>
5#include <math.h>
6
7#include "SparkFun_LPS28DFW_Arduino_Library.h"
8
9static LPS28DFW pressureSensor;
10
11/** Barometric altitude (m) from static pressure using a simple ISA troposphere
12 * fit. */
13static float pressureToAltitudeM(float pressureHpa, float seaLevelHpa) {
14 if (pressureHpa <= 0.f || seaLevelHpa <= 0.f)
15 return NAN;
16 // h = 44330 * (1 - (P/P0)^(1/5.255)); exponent ≈ 0.190284
17 return 44330.0f * (1.0f - powf(pressureHpa / seaLevelHpa, 0.190284f));
18}
19
20void setup() {
21 Serial.begin(115200);
22 while (!Serial)
23 delay(10);
24
26
27 while (pressureSensor.begin(LPS28DFW_I2C_ADDR, Wire) != LPS28DFW_OK) {
28 Serial.println(
29 "ERROR: LPS28DFW not found. Check wiring and I2C address (0x5C / "
30 "0x5D).");
31 delay(1000);
32 }
33
34 lps28dfw_md_t modeConfig = {
35 .fs = LPS28DFW_1260hPa,
36 .odr = LPS28DFW_10Hz,
37 .avg = LPS28DFW_32_AVG,
38 .lpf = LPS28DFW_LPF_DISABLE,
39 };
40 if (pressureSensor.setModeConfig(&modeConfig) != LPS28DFW_OK) {
41 Serial.println("ERROR: setModeConfig failed.");
42 while (1)
43 delay(1000);
44 }
45
46 Serial.println();
47 Serial.println("LPS28DFW test (SparkFun library)");
48 Serial.printf(
49 "Altitude uses ISA P0 = %.2f hPa (change LPS28DFW_SEA_LEVEL_HPA to "
50 "match local pressure)\r\n",
52 Serial.println();
53}
54
55void loop() {
56 if (pressureSensor.getSensorData() != LPS28DFW_OK) {
57 Serial.println("ERROR: getSensorData failed");
58 delay(500);
59 return;
60 }
61
62 const float tempC = pressureSensor.data.heat.deg_c;
63 const float pressHpa = pressureSensor.data.pressure.hpa;
64 const float altM = pressureToAltitudeM(pressHpa, LPS28DFW_SEA_LEVEL_HPA);
65
66 Serial.printf("Temperature: %.3f C\r\n", tempC);
67 Serial.printf("Pressure: %.3f hPa\r\n", pressHpa);
68 Serial.printf("Altitude: %.1f m (barometric, ISA)\r\n", altM);
69 Serial.println();
70
71 delay(1000);
72}
static SerialStub Serial
Definition Arduino.h:128
#define LPS28DFW_SDA_PIN
Definition main.h:4
#define LPS28DFW_SCL_PIN
Definition main.h:5
#define LPS28DFW_I2C_ADDR
Definition main.h:9
#define LPS28DFW_SEA_LEVEL_HPA
Definition main.h:13
void delay(int ms)
void setup()
Definition main.cpp:142
void loop()
Definition main.cpp:201
static float pressureToAltitudeM(float pressureHpa, float seaLevelHpa)
Definition main.cpp:38
static LPS28DFW pressureSensor
Definition main.cpp:9