Nakatafu ☆ / Mbed 2 deprecated BLE_Condensation_Monitor

Dependencies:   AQM0802 BME280 HDC1000 VaporCondition mbed BLE_API nRF51822 BLE_Condensation_Monitor

Dependents:   BLE_Condensation_Monitor

Fork of Condensation_Monitor by Nakatafu ☆

Committer:
takafuminaka
Date:
Sun May 31 11:11:48 2015 +0000
Revision:
6:3c2404870d39
Parent:
5:06d988a47721
Child:
7:7cecec859fe1
Small Modifications

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yasuyuki 0:6434ef883399 1 //**********************
yasuyuki 0:6434ef883399 2 // Hygrometer and Thermometer for mbed
yasuyuki 0:6434ef883399 3 //
yasuyuki 0:6434ef883399 4 // LPC1768 flash=512KB, ADC=12bits
yasuyuki 0:6434ef883399 5 // LPC11U35 flash=64KB, ADC=10bits
yasuyuki 0:6434ef883399 6 // Nucleo ADC=12bits
yasuyuki 0:6434ef883399 7 //
yasuyuki 0:6434ef883399 8 // (C)Copyright 2015 All rights reserved by Y.Onodera
yasuyuki 0:6434ef883399 9 // http://einstlab.web.fc2.com
yasuyuki 0:6434ef883399 10 //**********************
yasuyuki 0:6434ef883399 11 #include "mbed.h"
yasuyuki 0:6434ef883399 12 #include "HDC1000.h"
takafuminaka 1:1cf4309871b7 13 #include "BME280.h"
takafuminaka 4:3075954b341c 14 #include "AQM0802.h"
takafuminaka 4:3075954b341c 15
takafuminaka 1:1cf4309871b7 16 #include "VaporCondition.h"
takafuminaka 1:1cf4309871b7 17
takafuminaka 1:1cf4309871b7 18 #define NEED_CONSOLE_OUTPUT 1
takafuminaka 5:06d988a47721 19 #define NEED_BLE_CONSOLE 1
takafuminaka 4:3075954b341c 20 #define NEED_LCD_OUTPUT 1
takafuminaka 1:1cf4309871b7 21
takafuminaka 1:1cf4309871b7 22 #if NEED_CONSOLE_OUTPUT
takafuminaka 1:1cf4309871b7 23 Serial pc(USBTX, USBRX);
takafuminaka 1:1cf4309871b7 24 #define PC(...) { pc.printf(__VA_ARGS__); }
takafuminaka 1:1cf4309871b7 25 #else
takafuminaka 1:1cf4309871b7 26 #define PC(...) /* nothing */
takafuminaka 1:1cf4309871b7 27 #endif /* #if NEED_CONSOLE_OUTPUT */
takafuminaka 1:1cf4309871b7 28
takafuminaka 5:06d988a47721 29 #if NEED_BLE_CONSOLE
takafuminaka 5:06d988a47721 30 #include "BLEDevice.h"
takafuminaka 5:06d988a47721 31 #include "UARTService.h"
takafuminaka 5:06d988a47721 32 #define BLEC(...) { char __blecstr[32]; sprintf(__blecstr,__VA_ARGS__); if (uart) uart->write(__blecstr, strlen(__blecstr)); }
takafuminaka 5:06d988a47721 33 #else
takafuminaka 5:06d988a47721 34 #define BLEC(...) /* nothing */
takafuminaka 5:06d988a47721 35 #endif /* #if NEED_BLE_CONSOLE */
yasuyuki 0:6434ef883399 36
yasuyuki 0:6434ef883399 37 #if defined(TARGET_LPC1768)
takafuminaka 6:3c2404870d39 38 I2C i2c(p28, p27);
takafuminaka 6:3c2404870d39 39 // BME280 sensor(p28, p27, 0x76 << 1);
takafuminaka 1:1cf4309871b7 40 #else
takafuminaka 6:3c2404870d39 41 I2C i2c(I2C_SDA0, I2C_SCL0);
takafuminaka 6:3c2404870d39 42 // BME280 sensor(I2C_SDA0, I2C_SCL0, 0x76 << 1);
yasuyuki 0:6434ef883399 43 #endif
yasuyuki 0:6434ef883399 44
takafuminaka 1:1cf4309871b7 45 BME280 bme280(I2C_SDA0, I2C_SCL0, 0x76 << 1);
yasuyuki 0:6434ef883399 46 HDC1000 hdc1000(i2c);
takafuminaka 4:3075954b341c 47 #if NEED_LCD_OUTPUT
takafuminaka 6:3c2404870d39 48 AQM0802 lcd(i2c);
takafuminaka 4:3075954b341c 49 #endif
yasuyuki 0:6434ef883399 50
takafuminaka 1:1cf4309871b7 51 DigitalOut led1(LED1);
takafuminaka 1:1cf4309871b7 52 DigitalOut led2(LED2);
takafuminaka 1:1cf4309871b7 53
takafuminaka 5:06d988a47721 54 #if NEED_BLE_CONSOLE
takafuminaka 5:06d988a47721 55 BLEDevice ble;
takafuminaka 5:06d988a47721 56 UARTService *uart;
takafuminaka 5:06d988a47721 57
takafuminaka 5:06d988a47721 58 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
takafuminaka 5:06d988a47721 59 {
takafuminaka 5:06d988a47721 60 PC("Disconnected!\n\r");
takafuminaka 5:06d988a47721 61 PC("Restarting the advertising process\n\r");
takafuminaka 5:06d988a47721 62 ble.startAdvertising();
takafuminaka 5:06d988a47721 63 }
takafuminaka 5:06d988a47721 64
takafuminaka 5:06d988a47721 65 #endif /* #if NEED_BLE_CONSOLE */
takafuminaka 4:3075954b341c 66
takafuminaka 6:3c2404870d39 67 int main()
takafuminaka 6:3c2404870d39 68 {
takafuminaka 4:3075954b341c 69 float Tdp_o =0.;
takafuminaka 4:3075954b341c 70 float Tdp_i =0.;
takafuminaka 4:3075954b341c 71 int cautions = 0;
takafuminaka 4:3075954b341c 72 int warnings = 0;
takafuminaka 1:1cf4309871b7 73 int warn_wid = 20;
takafuminaka 4:3075954b341c 74 char msg1[10],msg2[9];
takafuminaka 4:3075954b341c 75 int mode=0;
takafuminaka 4:3075954b341c 76 int skip=0;
takafuminaka 4:3075954b341c 77 char msg[4][2][9];
takafuminaka 5:06d988a47721 78 char bmsg[4][20];
takafuminaka 4:3075954b341c 79 int skipf[4];
takafuminaka 6:3c2404870d39 80
takafuminaka 4:3075954b341c 81 float Tcur;
takafuminaka 4:3075954b341c 82 float Tdp;
takafuminaka 4:3075954b341c 83 char *sTcur;
takafuminaka 4:3075954b341c 84 char *sWin;
takafuminaka 4:3075954b341c 85 char *ssTcur;
takafuminaka 4:3075954b341c 86 char *ssWin;
takafuminaka 5:06d988a47721 87 char *bsTcur;
takafuminaka 5:06d988a47721 88 char *bsWin;
takafuminaka 5:06d988a47721 89
takafuminaka 6:3c2404870d39 90 int skipped = 0;
takafuminaka 6:3c2404870d39 91
takafuminaka 1:1cf4309871b7 92 VaporCondition Inside;
takafuminaka 1:1cf4309871b7 93 VaporCondition Outside;
takafuminaka 1:1cf4309871b7 94
takafuminaka 6:3c2404870d39 95 // LED Check
takafuminaka 1:1cf4309871b7 96 led1 = 1;
takafuminaka 1:1cf4309871b7 97 led2 = 1;
takafuminaka 4:3075954b341c 98 wait(3);
takafuminaka 1:1cf4309871b7 99
takafuminaka 1:1cf4309871b7 100 led1 = 0;
takafuminaka 1:1cf4309871b7 101 led2 = 0;
takafuminaka 6:3c2404870d39 102
takafuminaka 3:8f886f74f9bb 103 // i2c.frequency(100000);
takafuminaka 6:3c2404870d39 104
takafuminaka 5:06d988a47721 105 #if NEED_BLE_CONSOLE
takafuminaka 6:3c2404870d39 106 // Setup BLE //
takafuminaka 5:06d988a47721 107 ble.init();
takafuminaka 5:06d988a47721 108 ble.onDisconnection(disconnectionCallback);
takafuminaka 6:3c2404870d39 109
takafuminaka 5:06d988a47721 110 uart = new UARTService(ble);
takafuminaka 5:06d988a47721 111
takafuminaka 5:06d988a47721 112 /* setup advertising */
takafuminaka 5:06d988a47721 113 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
takafuminaka 5:06d988a47721 114 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
takafuminaka 5:06d988a47721 115 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
takafuminaka 5:06d988a47721 116 (const uint8_t *)"BLE Condensation Monitor", sizeof("BLE Condensation Monitor") - 1);
takafuminaka 5:06d988a47721 117 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
takafuminaka 5:06d988a47721 118 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
takafuminaka 5:06d988a47721 119
takafuminaka 5:06d988a47721 120 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
takafuminaka 5:06d988a47721 121 ble.startAdvertising();
takafuminaka 5:06d988a47721 122 #endif /* #if NEED_BLE_CONSOLE */
takafuminaka 6:3c2404870d39 123
yasuyuki 0:6434ef883399 124 while(1) {
takafuminaka 6:3c2404870d39 125 if ( skipped == 0 ) {
takafuminaka 6:3c2404870d39 126 // Get data
takafuminaka 6:3c2404870d39 127
takafuminaka 6:3c2404870d39 128 Outside.t = bme280.getTemperature();
takafuminaka 6:3c2404870d39 129 Outside.h = bme280.getHumidity();
takafuminaka 6:3c2404870d39 130
takafuminaka 6:3c2404870d39 131 Outside.p = bme280.getPressure();
takafuminaka 6:3c2404870d39 132 Inside.p = bme280.getPressure(); // Usually Pressures are same between inside and outside.
yasuyuki 0:6434ef883399 133
takafuminaka 6:3c2404870d39 134 Inside.t = float(hdc1000.temperature())/0x10000*165-40;
takafuminaka 6:3c2404870d39 135 Inside.h = float(hdc1000.humidity())/0x10000*100;
takafuminaka 6:3c2404870d39 136
takafuminaka 1:1cf4309871b7 137
takafuminaka 6:3c2404870d39 138 PC("In: %2.2f degC, %2.2f %% Out: %2.2f degC, %2.2f %%, %04.2f hPa\r\n", Inside.t, Inside.h, Outside.t, Outside.h, Outside.p);
takafuminaka 6:3c2404870d39 139 PC("Humidity Ratio [g/kg] : In %2.2f Out %2.2f \r\n", Inside.Rh(), Outside.Rh());
takafuminaka 6:3c2404870d39 140 Tdp_o = Outside.Tdp();
takafuminaka 6:3c2404870d39 141 Tdp_i = Inside.Tdp();
takafuminaka 6:3c2404870d39 142 PC("Due Point Temperature [degC] : In %2.2f Out %2.2f \r\n", Tdp_o, Tdp_i);
yasuyuki 0:6434ef883399 143
takafuminaka 6:3c2404870d39 144 // print catuions and warnings //
takafuminaka 6:3c2404870d39 145 cautions = 0;
takafuminaka 6:3c2404870d39 146 warnings = 0;
takafuminaka 3:8f886f74f9bb 147
takafuminaka 6:3c2404870d39 148 for(int ii=0; ii<4; ii++) {
takafuminaka 6:3c2404870d39 149 if ( (ii % 2) == 1 ) {
takafuminaka 6:3c2404870d39 150 Tcur = Outside.t; // 1 and 3
takafuminaka 6:3c2404870d39 151 sTcur = "Outside";
takafuminaka 6:3c2404870d39 152 ssTcur = "Out";
takafuminaka 6:3c2404870d39 153 bsTcur = "Out";
takafuminaka 6:3c2404870d39 154 } else {
takafuminaka 6:3c2404870d39 155 Tcur = Inside.t; // 0 and 2
takafuminaka 6:3c2404870d39 156 sTcur = "Inside";
takafuminaka 6:3c2404870d39 157 ssTcur = "In";
takafuminaka 6:3c2404870d39 158 bsTcur = "In";
takafuminaka 6:3c2404870d39 159 }
takafuminaka 4:3075954b341c 160
takafuminaka 6:3c2404870d39 161 if ( ii / 2 ) {
takafuminaka 6:3c2404870d39 162 sWin = " Window"; // 2 and 3
takafuminaka 6:3c2404870d39 163 ssWin = "@Win";
takafuminaka 6:3c2404870d39 164 bsWin = "Wind.";
takafuminaka 6:3c2404870d39 165 } else {
takafuminaka 6:3c2404870d39 166 sWin = ""; // 0 and 1
takafuminaka 6:3c2404870d39 167 ssWin = "";
takafuminaka 6:3c2404870d39 168 bsWin = "";
takafuminaka 6:3c2404870d39 169 }
takafuminaka 4:3075954b341c 170
takafuminaka 6:3c2404870d39 171 if ( ii / 2 == ii %2 ) {
takafuminaka 6:3c2404870d39 172 Tdp = Tdp_i; // 0 and 3
takafuminaka 6:3c2404870d39 173 } else {
takafuminaka 6:3c2404870d39 174 Tdp = Tdp_o; // 1 and 1
takafuminaka 6:3c2404870d39 175 }
takafuminaka 6:3c2404870d39 176
takafuminaka 6:3c2404870d39 177 if ( Tdp >= Tcur - warn_wid ) {
takafuminaka 6:3c2404870d39 178 skipf[ii] = 0;
takafuminaka 6:3c2404870d39 179 if ( Tdp >= Tcur ) {
takafuminaka 6:3c2404870d39 180 PC("Condensation at %s\r\n",sTcur);
takafuminaka 6:3c2404870d39 181 sprintf(msg[ii][0],"Condns!!");
takafuminaka 6:3c2404870d39 182 sprintf(msg[ii][1],"%s%s",ssTcur,ssWin);
takafuminaka 6:3c2404870d39 183 sprintf(bmsg[ii],"Cond. at %s",bsWin);
takafuminaka 6:3c2404870d39 184 cautions ++;
takafuminaka 6:3c2404870d39 185 } else {
takafuminaka 6:3c2404870d39 186 PC("%4.1f degC to Condensation at %s%s\r\n", Tcur - Tdp, sTcur, sWin);
takafuminaka 6:3c2404870d39 187 sprintf(msg[ii][0],"Cto%4.1fC",Tcur-Tdp);
takafuminaka 6:3c2404870d39 188 sprintf(msg[ii][1],"%s%s\0",ssTcur,ssWin);
takafuminaka 6:3c2404870d39 189 sprintf(bmsg[ii],"%4.1ftoC.at%s%s",Tcur - Tdp, bsTcur, bsWin);
takafuminaka 6:3c2404870d39 190 warnings ++;
takafuminaka 6:3c2404870d39 191 }
takafuminaka 6:3c2404870d39 192 } else {
takafuminaka 6:3c2404870d39 193 skipf[ii] = 1;
takafuminaka 6:3c2404870d39 194 }
takafuminaka 4:3075954b341c 195 }
takafuminaka 4:3075954b341c 196
takafuminaka 6:3c2404870d39 197 PC("\r\n");
takafuminaka 6:3c2404870d39 198
takafuminaka 6:3c2404870d39 199 if ( cautions > 0 ) {
takafuminaka 6:3c2404870d39 200 led2 = 1;
takafuminaka 4:3075954b341c 201 } else {
takafuminaka 6:3c2404870d39 202 led2 = 0;
takafuminaka 4:3075954b341c 203 }
takafuminaka 4:3075954b341c 204
takafuminaka 6:3c2404870d39 205 if ( warnings > 0 ) {
takafuminaka 6:3c2404870d39 206 led1 = 1;
takafuminaka 4:3075954b341c 207 } else {
takafuminaka 6:3c2404870d39 208 led1 = 0;
takafuminaka 4:3075954b341c 209 }
takafuminaka 4:3075954b341c 210
takafuminaka 1:1cf4309871b7 211 }
takafuminaka 4:3075954b341c 212 // LCD print
takafuminaka 4:3075954b341c 213 switch(mode) {
takafuminaka 4:3075954b341c 214 case (0):
takafuminaka 4:3075954b341c 215 skip = 1;
takafuminaka 4:3075954b341c 216 break;
takafuminaka 6:3c2404870d39 217
takafuminaka 4:3075954b341c 218 case (1):
takafuminaka 4:3075954b341c 219 sprintf(msg1,"Ti %4.1fC",Inside.t);
takafuminaka 4:3075954b341c 220 sprintf(msg2,"To %4.1fC",Outside.t);
takafuminaka 5:06d988a47721 221 BLEC("Temp.In%4.1f Out%4.1f\n",Inside.t, Outside.t);
takafuminaka 4:3075954b341c 222 break;
takafuminaka 6:3c2404870d39 223
takafuminaka 4:3075954b341c 224 case (2):
takafuminaka 4:3075954b341c 225 sprintf(msg1,"Hi %4.1f%%",Inside.h);
takafuminaka 4:3075954b341c 226 sprintf(msg2,"Ho %4.1f%%",Outside.h);
takafuminaka 5:06d988a47721 227 BLEC("Hum.In%2.0f%% Out%2.0f%%\n",Inside.h, Outside.h);
takafuminaka 4:3075954b341c 228 break;
takafuminaka 6:3c2404870d39 229
takafuminaka 4:3075954b341c 230 case (3):
takafuminaka 4:3075954b341c 231 sprintf(msg1,"Po%6.2f",Outside.p);
takafuminaka 4:3075954b341c 232 sprintf(msg2," [hPa]");
takafuminaka 5:06d988a47721 233 BLEC("Press. %6.2fhPa\n",Outside.p);
takafuminaka 4:3075954b341c 234 break;
takafuminaka 6:3c2404870d39 235
takafuminaka 4:3075954b341c 236 case (4):
takafuminaka 4:3075954b341c 237 sprintf(msg1,"Dpi%4.1fC",Tdp_i);
takafuminaka 4:3075954b341c 238 sprintf(msg2,"Dpo%4.1fC",Tdp_o);
takafuminaka 5:06d988a47721 239 BLEC("DP. In%4.1f Out%4.1f\n",Tdp_i, Tdp_o);
takafuminaka 4:3075954b341c 240 break;
takafuminaka 6:3c2404870d39 241
takafuminaka 4:3075954b341c 242 case (5):
takafuminaka 4:3075954b341c 243 case (6):
takafuminaka 4:3075954b341c 244 case (7):
takafuminaka 4:3075954b341c 245 case (8):
takafuminaka 4:3075954b341c 246 int ii = mode - 5;
takafuminaka 4:3075954b341c 247 skip = skipf[ii];
takafuminaka 4:3075954b341c 248 sprintf(msg1,"%8s",msg[ii][0]);
takafuminaka 4:3075954b341c 249 sprintf(msg2,"%8s",msg[ii][1]);
takafuminaka 5:06d988a47721 250 BLEC("%s\n",bmsg[ii]);
takafuminaka 4:3075954b341c 251 break;
takafuminaka 4:3075954b341c 252 }
takafuminaka 4:3075954b341c 253 mode++;
takafuminaka 4:3075954b341c 254 if ( mode > 8 ) {
takafuminaka 6:3c2404870d39 255 mode = 0;
takafuminaka 6:3c2404870d39 256 }
takafuminaka 6:3c2404870d39 257
takafuminaka 4:3075954b341c 258 if ( skip == 0 ) {
takafuminaka 4:3075954b341c 259 #if NEED_LCD_OUTPUT
takafuminaka 4:3075954b341c 260 lcd.locate(0,0);
takafuminaka 4:3075954b341c 261 lcd.print(msg1);
takafuminaka 4:3075954b341c 262 lcd.locate(0,1);
takafuminaka 4:3075954b341c 263 lcd.print(msg2);
takafuminaka 6:3c2404870d39 264
takafuminaka 4:3075954b341c 265 #endif
takafuminaka 6:3c2404870d39 266 skipped = 0;
takafuminaka 4:3075954b341c 267 wait(3);
takafuminaka 4:3075954b341c 268 } else {
takafuminaka 4:3075954b341c 269 skip = 0;
takafuminaka 6:3c2404870d39 270 skipped = 1;
takafuminaka 4:3075954b341c 271 }
yasuyuki 0:6434ef883399 272 }
yasuyuki 0:6434ef883399 273
takafuminaka 4:3075954b341c 274 }