Test program for HP03SA pressure and altitude sensor and for LM77 temperature sensor. Both devices use and I2C interface.

Dependencies:   HP03SA LM77 mbed

Committer:
wim
Date:
Sat Jan 10 19:16:46 2015 +0000
Revision:
0:ab21c5466a81
Test program for HP03SA pressure and altitude sensor and for LM77 temperature sensor. The devices use an I2C interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:ab21c5466a81 1 /* mbed HP03SA I2C Pressure and Temperature sensor Test
wim 0:ab21c5466a81 2 * LM77 Temperature sensor Test
wim 0:ab21c5466a81 3 *
wim 0:ab21c5466a81 4 * Copyright (c) 2015 Wim Huiskamp
wim 0:ab21c5466a81 5 * Released under the MIT License: http://mbed.org/license/mit
wim 0:ab21c5466a81 6 *
wim 0:ab21c5466a81 7 * version 0.1 Initial Release
wim 0:ab21c5466a81 8 */
wim 0:ab21c5466a81 9 #define PCF8593_TST 0
wim 0:ab21c5466a81 10 #define LM77_TST 1
wim 0:ab21c5466a81 11 #define HP03SA_TST 1
wim 0:ab21c5466a81 12
wim 0:ab21c5466a81 13 #include "mbed.h"
wim 0:ab21c5466a81 14
wim 0:ab21c5466a81 15 #if (HP03SA_TST == 1)
wim 0:ab21c5466a81 16 #include "HP03SA.h"
wim 0:ab21c5466a81 17 #endif
wim 0:ab21c5466a81 18
wim 0:ab21c5466a81 19 #if (LM77_TST == 1)
wim 0:ab21c5466a81 20 #include "LM77.h"
wim 0:ab21c5466a81 21 #endif
wim 0:ab21c5466a81 22
wim 0:ab21c5466a81 23 //Pin Defines for I2C Bus
wim 0:ab21c5466a81 24 #define D_SDA p9
wim 0:ab21c5466a81 25 #define D_SCL p10
wim 0:ab21c5466a81 26 //#define D_SDA p28
wim 0:ab21c5466a81 27 //#define D_SCL p27
wim 0:ab21c5466a81 28 I2C i2c(D_SDA, D_SCL);
wim 0:ab21c5466a81 29
wim 0:ab21c5466a81 30 //Pin Defines for XCLR
wim 0:ab21c5466a81 31 #define D_XCLR p11
wim 0:ab21c5466a81 32
wim 0:ab21c5466a81 33 //Host PC Baudrate (Virtual Com Port on USB)
wim 0:ab21c5466a81 34 #define D_BAUDRATE 9600
wim 0:ab21c5466a81 35 //#define D_BAUDRATE 57600
wim 0:ab21c5466a81 36
wim 0:ab21c5466a81 37 // mbed Interface Hardware definitions
wim 0:ab21c5466a81 38 DigitalOut myled1(LED1);
wim 0:ab21c5466a81 39 DigitalOut myled2(LED2);
wim 0:ab21c5466a81 40 DigitalOut myled3(LED3);
wim 0:ab21c5466a81 41 DigitalOut heartbeatLED(LED4);
wim 0:ab21c5466a81 42
wim 0:ab21c5466a81 43 // Host PC Communication channels
wim 0:ab21c5466a81 44 Serial pc(USBTX, USBRX); // tx, rx
wim 0:ab21c5466a81 45
wim 0:ab21c5466a81 46 #if (HP03SA_TST == 1)
wim 0:ab21c5466a81 47 // Generate the 32kHz master clock for HP03SA
wim 0:ab21c5466a81 48 PwmOut mclk(p21);
wim 0:ab21c5466a81 49
wim 0:ab21c5466a81 50 // Instantiate HP03SA
wim 0:ab21c5466a81 51 HP03SA hp03sa(&i2c, D_XCLR); // I2C bus, XCLK Pin
wim 0:ab21c5466a81 52 #endif
wim 0:ab21c5466a81 53
wim 0:ab21c5466a81 54 #if (LM77_TST == 1)
wim 0:ab21c5466a81 55 // Instantiate LM77
wim 0:ab21c5466a81 56 LM77 lm77(&i2c, LM77_SA0); // I2C bus, XCLK Pin
wim 0:ab21c5466a81 57 #endif
wim 0:ab21c5466a81 58
wim 0:ab21c5466a81 59 int main() {
wim 0:ab21c5466a81 60 pc.baud(D_BAUDRATE);
wim 0:ab21c5466a81 61 pc.printf("\r\n\r\n");
wim 0:ab21c5466a81 62 pc.printf("Hello world\r\n");
wim 0:ab21c5466a81 63
wim 0:ab21c5466a81 64 #if (PCF8593_TST == 1)
wim 0:ab21c5466a81 65 char buffer[8];
wim 0:ab21c5466a81 66 char status;
wim 0:ab21c5466a81 67
wim 0:ab21c5466a81 68 //Init PCF8593 RTC
wim 0:ab21c5466a81 69 buffer[0] = 0x00; //control reg
wim 0:ab21c5466a81 70 buffer[1] = 0x00; //control reg value (32Khz osc)
wim 0:ab21c5466a81 71 status = i2c.write(0xA2, buffer, 2);
wim 0:ab21c5466a81 72
wim 0:ab21c5466a81 73 if (status == 0) {
wim 0:ab21c5466a81 74 pc.printf("RTC status = Ok\n\r");
wim 0:ab21c5466a81 75 }
wim 0:ab21c5466a81 76 else {
wim 0:ab21c5466a81 77 pc.printf("RTC status = Not Ok\n\r");
wim 0:ab21c5466a81 78 }
wim 0:ab21c5466a81 79 #endif
wim 0:ab21c5466a81 80
wim 0:ab21c5466a81 81 #if (LM77_TST == 1)
wim 0:ab21c5466a81 82 if (lm77.getStatus()) {
wim 0:ab21c5466a81 83 pc.printf("LM77 status = Ok\n\r");
wim 0:ab21c5466a81 84
wim 0:ab21c5466a81 85 pc.printf("Critical Alert temperature from LM77 is %.1f [C]\r\n", lm77.getCritAlertTemp());
wim 0:ab21c5466a81 86 pc.printf("Low Alert temperature from LM77 is %.1f [C]\r\n", lm77.getLowAlertTemp());
wim 0:ab21c5466a81 87 pc.printf("High Alert temperature from LM77 is %.1f [C]\r\n", lm77.getHighAlertTemp());
wim 0:ab21c5466a81 88 pc.printf("Alert Hysteresis from LM77 is %.1f [C]\r\n", lm77.getAlertHyst());
wim 0:ab21c5466a81 89 wait(1.0);
wim 0:ab21c5466a81 90
wim 0:ab21c5466a81 91 #if(0)
wim 0:ab21c5466a81 92 #define CA 95.0f
wim 0:ab21c5466a81 93 #define LA 8.0f
wim 0:ab21c5466a81 94 #define HA 15.0f
wim 0:ab21c5466a81 95 #define HY 3.0f
wim 0:ab21c5466a81 96 lm77.setCritAlertTemp(CA);
wim 0:ab21c5466a81 97 lm77.setLowAlertTemp(LA);
wim 0:ab21c5466a81 98 lm77.setHighAlertTemp(HA);
wim 0:ab21c5466a81 99 lm77.setAlertHyst(HY);
wim 0:ab21c5466a81 100 pc.printf("Critical Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", CA, lm77.getCritAlertTemp());
wim 0:ab21c5466a81 101 pc.printf("Low Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", LA, lm77.getLowAlertTemp());
wim 0:ab21c5466a81 102 pc.printf("High Alert temperature set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", HA, lm77.getHighAlertTemp());
wim 0:ab21c5466a81 103 pc.printf("Alert Hysteresis set at %.1f [C]. Read from LM77 is %.1f [°C]\r\n", HY, lm77.getAlertHyst());
wim 0:ab21c5466a81 104 #endif
wim 0:ab21c5466a81 105 }
wim 0:ab21c5466a81 106 else {
wim 0:ab21c5466a81 107 pc.printf("LM77 status = not Ok\n\r");
wim 0:ab21c5466a81 108 }
wim 0:ab21c5466a81 109 #endif
wim 0:ab21c5466a81 110
wim 0:ab21c5466a81 111 #if (HP03SA_TST == 1)
wim 0:ab21c5466a81 112 //Init MCLK
wim 0:ab21c5466a81 113 mclk.period_us(30); //32768 KHz
wim 0:ab21c5466a81 114 mclk.pulsewidth_us(15); //32768 KHz
wim 0:ab21c5466a81 115
wim 0:ab21c5466a81 116 if (hp03sa.getStatus()) {
wim 0:ab21c5466a81 117 pc.printf("HP03S status = Ok\n\r");
wim 0:ab21c5466a81 118 }
wim 0:ab21c5466a81 119 else {
wim 0:ab21c5466a81 120 pc.printf("HP03S status = not Ok\n\r");
wim 0:ab21c5466a81 121 }
wim 0:ab21c5466a81 122
wim 0:ab21c5466a81 123 // Take reading from sensor before setting calibration value!
wim 0:ab21c5466a81 124 hp03sa.sample();
wim 0:ab21c5466a81 125
wim 0:ab21c5466a81 126 // Set QNH pressure. The Altitude reading will be 0 for the set pressure.
wim 0:ab21c5466a81 127 // hp03sa.setPressure(10247); // MSL pressure at time of testing 1024.7 hPa
wim 0:ab21c5466a81 128 // // Results in getAltitude() = 6m because it matches local MSL pressure
wim 0:ab21c5466a81 129
wim 0:ab21c5466a81 130 // Set QNH altitude. The Altitude reading will be the set value at current pressure.
wim 0:ab21c5466a81 131 hp03sa.setAltitude(6); // About right where I live..
wim 0:ab21c5466a81 132 #endif
wim 0:ab21c5466a81 133
wim 0:ab21c5466a81 134 while(1) {
wim 0:ab21c5466a81 135 #if (HP03SA_TST == 1)
wim 0:ab21c5466a81 136 // Take reading from sensor
wim 0:ab21c5466a81 137 hp03sa.sample();
wim 0:ab21c5466a81 138
wim 0:ab21c5466a81 139 // Show Pressure
wim 0:ab21c5466a81 140 pc.printf("Absolute atmospheric pressure is %.1f [hPa]\r\n", (float) hp03sa.getAbsPressure() / 10.0f);
wim 0:ab21c5466a81 141 pc.printf("Sealevel atmospheric pressure is %.1f [hPa]\r\n", (float) hp03sa.getSeaPressure(6) / 10.0f); // About right where I live..
wim 0:ab21c5466a81 142
wim 0:ab21c5466a81 143 // Show Temperature
wim 0:ab21c5466a81 144 // pc.printf("Ambient temperature is %.1f [°C]\r\n", (float) hp03sa.getTemperatureInt() / 10.0f);
wim 0:ab21c5466a81 145 pc.printf("Ambient temperature is %.1f [C]\r\n", hp03sa.getTemperature());
wim 0:ab21c5466a81 146 pc.printf("Ambient temperature is %.1f [F]\r\n", hp03sa.celsiusToFahrenheit(hp03sa.getTemperature()) );
wim 0:ab21c5466a81 147
wim 0:ab21c5466a81 148 // Show Altitude
wim 0:ab21c5466a81 149 pc.printf("Altitude estimated at %d [m]\r\n", hp03sa.getAltitude());
wim 0:ab21c5466a81 150
wim 0:ab21c5466a81 151 // Show Altitude Ft
wim 0:ab21c5466a81 152 pc.printf("Altitude estimated at %d [ft]\r\n", hp03sa.getAltitudeFt());
wim 0:ab21c5466a81 153 #endif
wim 0:ab21c5466a81 154
wim 0:ab21c5466a81 155 #if (LM77_TST == 1)
wim 0:ab21c5466a81 156 // Show Temperature LM77
wim 0:ab21c5466a81 157 // pc.printf("Ambient temperature from LM77 is %.1f [°C]\r\n", (float) lm77.getTemperatureInt() / 10.0f);
wim 0:ab21c5466a81 158 pc.printf("Ambient temperature from LM77 is %.1f [C]\r\n", lm77.getTemperature());
wim 0:ab21c5466a81 159 #endif
wim 0:ab21c5466a81 160
wim 0:ab21c5466a81 161 wait(1.0);
wim 0:ab21c5466a81 162 myled1 = 1;
wim 0:ab21c5466a81 163 wait(0.2);
wim 0:ab21c5466a81 164 myled1 = 0;
wim 0:ab21c5466a81 165 }
wim 0:ab21c5466a81 166 }