Test program for HP03SA pressure and altitude sensor and for LM77 temperature sensor. Both devices use and I2C interface.
Dependencies: HP03SA LM77 mbed
Revision 0:ab21c5466a81, committed 2015-01-10
- Comitter:
- wim
- Date:
- Sat Jan 10 19:16:46 2015 +0000
- Commit message:
- Test program for HP03SA pressure and altitude sensor and for LM77 temperature sensor. The devices use an I2C interface.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HP03SA.lib Sat Jan 10 19:16:46 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/wim/code/HP03SA/#61bbd81782de
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LM77.lib Sat Jan 10 19:16:46 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/wim/code/LM77/#8e812deb9f66
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sat Jan 10 19:16:46 2015 +0000
@@ -0,0 +1,166 @@
+/* mbed HP03SA I2C Pressure and Temperature sensor Test
+ * LM77 Temperature sensor Test
+ *
+ * Copyright (c) 2015 Wim Huiskamp
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * version 0.1 Initial Release
+ */
+#define PCF8593_TST 0
+#define LM77_TST 1
+#define HP03SA_TST 1
+
+#include "mbed.h"
+
+#if (HP03SA_TST == 1)
+#include "HP03SA.h"
+#endif
+
+#if (LM77_TST == 1)
+#include "LM77.h"
+#endif
+
+//Pin Defines for I2C Bus
+#define D_SDA p9
+#define D_SCL p10
+//#define D_SDA p28
+//#define D_SCL p27
+I2C i2c(D_SDA, D_SCL);
+
+//Pin Defines for XCLR
+#define D_XCLR p11
+
+//Host PC Baudrate (Virtual Com Port on USB)
+#define D_BAUDRATE 9600
+//#define D_BAUDRATE 57600
+
+// mbed Interface Hardware definitions
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut heartbeatLED(LED4);
+
+// Host PC Communication channels
+Serial pc(USBTX, USBRX); // tx, rx
+
+#if (HP03SA_TST == 1)
+// Generate the 32kHz master clock for HP03SA
+PwmOut mclk(p21);
+
+// Instantiate HP03SA
+HP03SA hp03sa(&i2c, D_XCLR); // I2C bus, XCLK Pin
+#endif
+
+#if (LM77_TST == 1)
+// Instantiate LM77
+LM77 lm77(&i2c, LM77_SA0); // I2C bus, XCLK Pin
+#endif
+
+int main() {
+ pc.baud(D_BAUDRATE);
+ pc.printf("\r\n\r\n");
+ pc.printf("Hello world\r\n");
+
+#if (PCF8593_TST == 1)
+ char buffer[8];
+ char status;
+
+ //Init PCF8593 RTC
+ buffer[0] = 0x00; //control reg
+ buffer[1] = 0x00; //control reg value (32Khz osc)
+ status = i2c.write(0xA2, buffer, 2);
+
+ if (status == 0) {
+ pc.printf("RTC status = Ok\n\r");
+ }
+ else {
+ pc.printf("RTC status = Not Ok\n\r");
+ }
+#endif
+
+#if (LM77_TST == 1)
+ if (lm77.getStatus()) {
+ pc.printf("LM77 status = Ok\n\r");
+
+ pc.printf("Critical Alert temperature from LM77 is %.1f [C]\r\n", lm77.getCritAlertTemp());
+ pc.printf("Low Alert temperature from LM77 is %.1f [C]\r\n", lm77.getLowAlertTemp());
+ pc.printf("High Alert temperature from LM77 is %.1f [C]\r\n", lm77.getHighAlertTemp());
+ pc.printf("Alert Hysteresis from LM77 is %.1f [C]\r\n", lm77.getAlertHyst());
+ wait(1.0);
+
+#if(0)
+#define CA 95.0f
+#define LA 8.0f
+#define HA 15.0f
+#define HY 3.0f
+ lm77.setCritAlertTemp(CA);
+ lm77.setLowAlertTemp(LA);
+ lm77.setHighAlertTemp(HA);
+ lm77.setAlertHyst(HY);
+ pc.printf("Critical Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", CA, lm77.getCritAlertTemp());
+ pc.printf("Low Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", LA, lm77.getLowAlertTemp());
+ pc.printf("High Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", HA, lm77.getHighAlertTemp());
+ pc.printf("Alert Hysteresis set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", HY, lm77.getAlertHyst());
+#endif
+ }
+ else {
+ pc.printf("LM77 status = not Ok\n\r");
+ }
+#endif
+
+#if (HP03SA_TST == 1)
+ //Init MCLK
+ mclk.period_us(30); //32768 KHz
+ mclk.pulsewidth_us(15); //32768 KHz
+
+ if (hp03sa.getStatus()) {
+ pc.printf("HP03S status = Ok\n\r");
+ }
+ else {
+ pc.printf("HP03S status = not Ok\n\r");
+ }
+
+ // Take reading from sensor before setting calibration value!
+ hp03sa.sample();
+
+ // Set QNH pressure. The Altitude reading will be 0 for the set pressure.
+// hp03sa.setPressure(10247); // MSL pressure at time of testing 1024.7 hPa
+// // Results in getAltitude() = 6m because it matches local MSL pressure
+
+ // Set QNH altitude. The Altitude reading will be the set value at current pressure.
+ hp03sa.setAltitude(6); // About right where I live..
+#endif
+
+ while(1) {
+#if (HP03SA_TST == 1)
+ // Take reading from sensor
+ hp03sa.sample();
+
+ // Show Pressure
+ pc.printf("Absolute atmospheric pressure is %.1f [hPa]\r\n", (float) hp03sa.getAbsPressure() / 10.0f);
+ pc.printf("Sealevel atmospheric pressure is %.1f [hPa]\r\n", (float) hp03sa.getSeaPressure(6) / 10.0f); // About right where I live..
+
+ // Show Temperature
+// pc.printf("Ambient temperature is %.1f [°C]\r\n", (float) hp03sa.getTemperatureInt() / 10.0f);
+ pc.printf("Ambient temperature is %.1f [C]\r\n", hp03sa.getTemperature());
+ pc.printf("Ambient temperature is %.1f [F]\r\n", hp03sa.celsiusToFahrenheit(hp03sa.getTemperature()) );
+
+ // Show Altitude
+ pc.printf("Altitude estimated at %d [m]\r\n", hp03sa.getAltitude());
+
+ // Show Altitude Ft
+ pc.printf("Altitude estimated at %d [ft]\r\n", hp03sa.getAltitudeFt());
+#endif
+
+#if (LM77_TST == 1)
+ // Show Temperature LM77
+// pc.printf("Ambient temperature from LM77 is %.1f [°C]\r\n", (float) lm77.getTemperatureInt() / 10.0f);
+ pc.printf("Ambient temperature from LM77 is %.1f [C]\r\n", lm77.getTemperature());
+#endif
+
+ wait(1.0);
+ myled1 = 1;
+ wait(0.2);
+ myled1 = 0;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Jan 10 19:16:46 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file
HP03SA pressure sensor and altimeter
LM77 temperature sensor