BMP180 Digital temperature sensor, BLE, & human body infrared sensor

Dependencies:   BLE_API BMP180 mbed nRF51822

Fork of BMP180_example by Kevin Gillepsie

Committer:
geekfamily
Date:
Thu Apr 28 06:29:59 2016 +0000
Revision:
3:b67c5cc2ac61
Parent:
0:f03b6a07c4ba
Healthy in Office

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kgills 0:f03b6a07c4ba 1 #include <stdio.h>
kgills 0:f03b6a07c4ba 2 #include "mbed.h"
kgills 0:f03b6a07c4ba 3 #include "BMP180.h"
kgills 0:f03b6a07c4ba 4
geekfamily 3:b67c5cc2ac61 5 #include "ble/BLE.h"
geekfamily 3:b67c5cc2ac61 6 #include "Servo.h"
geekfamily 3:b67c5cc2ac61 7 #include "GattCallbackParamTypes.h"
geekfamily 3:b67c5cc2ac61 8
geekfamily 3:b67c5cc2ac61 9 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
geekfamily 3:b67c5cc2ac61 10 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
geekfamily 3:b67c5cc2ac61 11 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
geekfamily 3:b67c5cc2ac61 12
geekfamily 3:b67c5cc2ac61 13 #define TXRX_BUF_LEN 20
geekfamily 3:b67c5cc2ac61 14
geekfamily 3:b67c5cc2ac61 15 #define DIGITAL_OUT_PIN P0_17 //D7
geekfamily 3:b67c5cc2ac61 16 #define DIGITAL_IN_PIN P0_5 //A4
geekfamily 3:b67c5cc2ac61 17 #define PWM_PIN P0_16 //D6
geekfamily 3:b67c5cc2ac61 18 #define SERVO_PIN P0_14 //D10
geekfamily 3:b67c5cc2ac61 19 #define ANALOG_IN_PIN P0_6 //A5
geekfamily 3:b67c5cc2ac61 20
geekfamily 3:b67c5cc2ac61 21 //Start Add by Ax 2016-4-23
geekfamily 3:b67c5cc2ac61 22 #include "BMP180.h"
geekfamily 3:b67c5cc2ac61 23 I2C i2c(P0_17, P0_18);
kgills 0:f03b6a07c4ba 24 BMP180 bmp180(&i2c);
kgills 0:f03b6a07c4ba 25
geekfamily 3:b67c5cc2ac61 26 //#define DIGITAL_OUT_BlueLed_PIN P0_20 //Blue LED P0_19
geekfamily 3:b67c5cc2ac61 27 //#define DIGITAL_OUT_RedLed_PIN P0_19 //Red LED P0_20
geekfamily 3:b67c5cc2ac61 28 #define DIGITAL_IN_IsNoPeopleInfront_PIN P0_23 //Tx Pin to check if people infront
geekfamily 3:b67c5cc2ac61 29
geekfamily 3:b67c5cc2ac61 30 //#define DIGITAL_IN_IsNoPeopleInfront_PIN P0_23 //Tx Pin to check if people infront
geekfamily 3:b67c5cc2ac61 31 //#define DIGITAL_IN_IsNoPeopleInfront_PIN P0_23 //Tx Pin to check if people infront
geekfamily 3:b67c5cc2ac61 32 //#define DIGITAL_IN_IsNoPeopleInfront_PIN P0_23 //Tx Pin to check if people infront
geekfamily 3:b67c5cc2ac61 33
geekfamily 3:b67c5cc2ac61 34 float arrHistoryEnvironment[2] = {0,0};//total working hours,total rest hours
geekfamily 3:b67c5cc2ac61 35 float arrCurrentEnvironment[3] = {0,0,0};//current working hours,current rest hours,current temperature
geekfamily 3:b67c5cc2ac61 36 float stdWorkHours=60;//60 seconds for testing
geekfamily 3:b67c5cc2ac61 37 float stdRestHours=15;//15 seconds for testing
geekfamily 3:b67c5cc2ac61 38 float stdTemperature=18;//18 degree for testing
geekfamily 3:b67c5cc2ac61 39 int checkCounter=2;
geekfamily 3:b67c5cc2ac61 40
geekfamily 3:b67c5cc2ac61 41 DigitalIn IsNoPeopleInfront(DIGITAL_IN_IsNoPeopleInfront_PIN);
geekfamily 3:b67c5cc2ac61 42 //DigitalOut Blue_Led_SET(DIGITAL_OUT_BlueLed_PIN);
geekfamily 3:b67c5cc2ac61 43 //DigitalOut Red_Led_SET(DIGITAL_OUT_RedLed_PIN);
geekfamily 3:b67c5cc2ac61 44
geekfamily 3:b67c5cc2ac61 45 //End Add by Ax 2016-4-23
geekfamily 3:b67c5cc2ac61 46
geekfamily 3:b67c5cc2ac61 47 BLE ble;
geekfamily 3:b67c5cc2ac61 48
geekfamily 3:b67c5cc2ac61 49 DigitalOut LED_SET(DIGITAL_OUT_PIN);
geekfamily 3:b67c5cc2ac61 50 DigitalIn BUTTON(DIGITAL_IN_PIN);
geekfamily 3:b67c5cc2ac61 51 PwmOut PWM(PWM_PIN);
geekfamily 3:b67c5cc2ac61 52 AnalogIn ANALOG(ANALOG_IN_PIN);
geekfamily 3:b67c5cc2ac61 53 Servo MYSERVO(SERVO_PIN);
geekfamily 3:b67c5cc2ac61 54
geekfamily 3:b67c5cc2ac61 55 Serial pc(USBTX, USBRX);
geekfamily 3:b67c5cc2ac61 56
geekfamily 3:b67c5cc2ac61 57 static uint8_t analog_enabled = 0;
geekfamily 3:b67c5cc2ac61 58 static uint8_t old_state = 0;
geekfamily 3:b67c5cc2ac61 59
geekfamily 3:b67c5cc2ac61 60 // The Nordic UART Service
geekfamily 3:b67c5cc2ac61 61 static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
geekfamily 3:b67c5cc2ac61 62 static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
geekfamily 3:b67c5cc2ac61 63 static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
geekfamily 3:b67c5cc2ac61 64 static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
geekfamily 3:b67c5cc2ac61 65
geekfamily 3:b67c5cc2ac61 66 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
geekfamily 3:b67c5cc2ac61 67 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
geekfamily 3:b67c5cc2ac61 68
geekfamily 3:b67c5cc2ac61 69 //static uint8_t rx_buf[TXRX_BUF_LEN];
geekfamily 3:b67c5cc2ac61 70 //static uint8_t rx_len=0;
geekfamily 3:b67c5cc2ac61 71
geekfamily 3:b67c5cc2ac61 72
geekfamily 3:b67c5cc2ac61 73 GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
geekfamily 3:b67c5cc2ac61 74
geekfamily 3:b67c5cc2ac61 75 GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
geekfamily 3:b67c5cc2ac61 76
geekfamily 3:b67c5cc2ac61 77 GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic};
geekfamily 3:b67c5cc2ac61 78
geekfamily 3:b67c5cc2ac61 79 GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
geekfamily 3:b67c5cc2ac61 80
geekfamily 3:b67c5cc2ac61 81
geekfamily 3:b67c5cc2ac61 82
geekfamily 3:b67c5cc2ac61 83 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
geekfamily 3:b67c5cc2ac61 84 {
geekfamily 3:b67c5cc2ac61 85 pc.printf("Disconnected \r\n");
geekfamily 3:b67c5cc2ac61 86 pc.printf("Restart advertising \r\n");
geekfamily 3:b67c5cc2ac61 87 ble.startAdvertising();
geekfamily 3:b67c5cc2ac61 88 }
kgills 0:f03b6a07c4ba 89
geekfamily 3:b67c5cc2ac61 90 void WrittenHandler(const GattWriteCallbackParams *Handler)
geekfamily 3:b67c5cc2ac61 91 {
geekfamily 3:b67c5cc2ac61 92 uint8_t buf[TXRX_BUF_LEN];
geekfamily 3:b67c5cc2ac61 93 uint16_t bytesRead, index;
geekfamily 3:b67c5cc2ac61 94
geekfamily 3:b67c5cc2ac61 95 if (Handler->handle == txCharacteristic.getValueAttribute().getHandle())
geekfamily 3:b67c5cc2ac61 96 {
geekfamily 3:b67c5cc2ac61 97 ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead);
geekfamily 3:b67c5cc2ac61 98 memset(txPayload, 0, TXRX_BUF_LEN);
geekfamily 3:b67c5cc2ac61 99 memcpy(txPayload, buf, TXRX_BUF_LEN);
geekfamily 3:b67c5cc2ac61 100
geekfamily 3:b67c5cc2ac61 101 for(index=0; index<bytesRead; index++)
geekfamily 3:b67c5cc2ac61 102 pc.putc(buf[index]);
geekfamily 3:b67c5cc2ac61 103
geekfamily 3:b67c5cc2ac61 104 if(buf[0] == 0x01)
geekfamily 3:b67c5cc2ac61 105 {
geekfamily 3:b67c5cc2ac61 106 if(buf[1] == 0x01)
geekfamily 3:b67c5cc2ac61 107 LED_SET = 1;
geekfamily 3:b67c5cc2ac61 108 else
geekfamily 3:b67c5cc2ac61 109 LED_SET = 0;
geekfamily 3:b67c5cc2ac61 110 }
geekfamily 3:b67c5cc2ac61 111 else if(buf[0] == 0xA0)
geekfamily 3:b67c5cc2ac61 112 {
geekfamily 3:b67c5cc2ac61 113 if(buf[1] == 0x01)
geekfamily 3:b67c5cc2ac61 114 analog_enabled = 1;
geekfamily 3:b67c5cc2ac61 115 else
geekfamily 3:b67c5cc2ac61 116 analog_enabled = 0;
geekfamily 3:b67c5cc2ac61 117 }
geekfamily 3:b67c5cc2ac61 118 else if(buf[0] == 0x02)
geekfamily 3:b67c5cc2ac61 119 {
geekfamily 3:b67c5cc2ac61 120 float value = (float)buf[1]/255;
geekfamily 3:b67c5cc2ac61 121 PWM = value;
geekfamily 3:b67c5cc2ac61 122 }
geekfamily 3:b67c5cc2ac61 123 else if(buf[0] == 0x03)
geekfamily 3:b67c5cc2ac61 124 {
geekfamily 3:b67c5cc2ac61 125 MYSERVO.write(buf[1]);
geekfamily 3:b67c5cc2ac61 126 }
geekfamily 3:b67c5cc2ac61 127 else if(buf[0] == 0x04)
geekfamily 3:b67c5cc2ac61 128 {
geekfamily 3:b67c5cc2ac61 129 analog_enabled = 0;
geekfamily 3:b67c5cc2ac61 130 PWM = 0;
geekfamily 3:b67c5cc2ac61 131 MYSERVO.write(0);
geekfamily 3:b67c5cc2ac61 132 LED_SET = 0;
geekfamily 3:b67c5cc2ac61 133 old_state = 0;
geekfamily 3:b67c5cc2ac61 134 }
geekfamily 3:b67c5cc2ac61 135
geekfamily 3:b67c5cc2ac61 136 }
geekfamily 3:b67c5cc2ac61 137 }
geekfamily 3:b67c5cc2ac61 138 /*
geekfamily 3:b67c5cc2ac61 139 void uartCB(void)
geekfamily 3:b67c5cc2ac61 140 {
geekfamily 3:b67c5cc2ac61 141 while(pc.readable())
geekfamily 3:b67c5cc2ac61 142 {
geekfamily 3:b67c5cc2ac61 143 rx_buf[rx_len++] = pc.getc();
geekfamily 3:b67c5cc2ac61 144 if(rx_len>=20 || rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n')
geekfamily 3:b67c5cc2ac61 145 {
geekfamily 3:b67c5cc2ac61 146 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), rx_buf, rx_len);
geekfamily 3:b67c5cc2ac61 147 pc.printf("RecHandler \r\n");
geekfamily 3:b67c5cc2ac61 148 pc.printf("Length: ");
geekfamily 3:b67c5cc2ac61 149 pc.putc(rx_len);
geekfamily 3:b67c5cc2ac61 150 pc.printf("\r\n");
geekfamily 3:b67c5cc2ac61 151 rx_len = 0;
geekfamily 3:b67c5cc2ac61 152 break;
geekfamily 3:b67c5cc2ac61 153 }
geekfamily 3:b67c5cc2ac61 154 }
geekfamily 3:b67c5cc2ac61 155 }
geekfamily 3:b67c5cc2ac61 156 */
geekfamily 3:b67c5cc2ac61 157 void m_status_check_handle(void)
geekfamily 3:b67c5cc2ac61 158 {
geekfamily 3:b67c5cc2ac61 159 uint8_t buf[6];
geekfamily 3:b67c5cc2ac61 160 //float buf[6];
geekfamily 3:b67c5cc2ac61 161 if (analog_enabled) // if analog reading enabled
geekfamily 3:b67c5cc2ac61 162 {
geekfamily 3:b67c5cc2ac61 163 // Read and send out
geekfamily 3:b67c5cc2ac61 164 //float s = ANALOG;
geekfamily 3:b67c5cc2ac61 165 //uint16_t value = s*1024;
geekfamily 3:b67c5cc2ac61 166 //buf[0] = (0x0B);
geekfamily 3:b67c5cc2ac61 167 //buf[1] = (value >> 8);
geekfamily 3:b67c5cc2ac61 168 //buf[2] = (value);
geekfamily 3:b67c5cc2ac61 169 //ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3);
geekfamily 3:b67c5cc2ac61 170
geekfamily 3:b67c5cc2ac61 171 //float s = 4;
geekfamily 3:b67c5cc2ac61 172 //uint16_t value = s*1024;
geekfamily 3:b67c5cc2ac61 173 //buf[0] = (0x0B);
geekfamily 3:b67c5cc2ac61 174 //buf[1] = 4.5;
geekfamily 3:b67c5cc2ac61 175 //buf[2] = 18;
geekfamily 3:b67c5cc2ac61 176
geekfamily 3:b67c5cc2ac61 177 buf[0] = (0x0B);//Result ID
geekfamily 3:b67c5cc2ac61 178
geekfamily 3:b67c5cc2ac61 179 buf[1] = arrHistoryEnvironment[0];//Total Work Hours
geekfamily 3:b67c5cc2ac61 180 //uint16_t value = arrHistoryEnvironment[0]*1024;
geekfamily 3:b67c5cc2ac61 181 //buf[1] = (value>>8);//Total Work Hours
geekfamily 3:b67c5cc2ac61 182
geekfamily 3:b67c5cc2ac61 183 buf[2] = arrHistoryEnvironment[1];//Total Rest Hours
geekfamily 3:b67c5cc2ac61 184 //value=arrHistoryEnvironment[1]*1024;
geekfamily 3:b67c5cc2ac61 185 //buf[2] = (value>>8);//Total Rest Hours
geekfamily 3:b67c5cc2ac61 186
geekfamily 3:b67c5cc2ac61 187 buf[3] = arrCurrentEnvironment[0];//Current Work Hours
geekfamily 3:b67c5cc2ac61 188 //value=arrCurrentEnvironment[0]*1024;
geekfamily 3:b67c5cc2ac61 189 //buf[3] = (value>>8);//Current Work Hours
geekfamily 3:b67c5cc2ac61 190
geekfamily 3:b67c5cc2ac61 191 buf[4] = arrCurrentEnvironment[1];//Current Rest Hours
geekfamily 3:b67c5cc2ac61 192 //value=arrCurrentEnvironment[1]*1024;
geekfamily 3:b67c5cc2ac61 193 //buf[4] = (value>>8);//Current Rest Hours
geekfamily 3:b67c5cc2ac61 194
geekfamily 3:b67c5cc2ac61 195 buf[5] = arrCurrentEnvironment[2];//Current Temperature
geekfamily 3:b67c5cc2ac61 196 //value=arrCurrentEnvironment[2]*1024;
geekfamily 3:b67c5cc2ac61 197 //buf[5] = (value>>8);//Current Temperature
geekfamily 3:b67c5cc2ac61 198 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 6);
geekfamily 3:b67c5cc2ac61 199 }
geekfamily 3:b67c5cc2ac61 200
geekfamily 3:b67c5cc2ac61 201 // If digital in changes, report the state
geekfamily 3:b67c5cc2ac61 202 if (BUTTON != old_state)
geekfamily 3:b67c5cc2ac61 203 {
geekfamily 3:b67c5cc2ac61 204 old_state = BUTTON;
geekfamily 3:b67c5cc2ac61 205
geekfamily 3:b67c5cc2ac61 206 if (BUTTON == 1)
geekfamily 3:b67c5cc2ac61 207 {
geekfamily 3:b67c5cc2ac61 208 buf[0] = (0x0A);
geekfamily 3:b67c5cc2ac61 209 buf[1] = (0x01);
geekfamily 3:b67c5cc2ac61 210 buf[2] = (0x00);
geekfamily 3:b67c5cc2ac61 211 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3);
geekfamily 3:b67c5cc2ac61 212 }
geekfamily 3:b67c5cc2ac61 213 else
geekfamily 3:b67c5cc2ac61 214 {
geekfamily 3:b67c5cc2ac61 215 buf[0] = (0x0A);
geekfamily 3:b67c5cc2ac61 216 buf[1] = (0x00);
geekfamily 3:b67c5cc2ac61 217 buf[2] = (0x00);
geekfamily 3:b67c5cc2ac61 218 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3);
geekfamily 3:b67c5cc2ac61 219 }
geekfamily 3:b67c5cc2ac61 220 }
geekfamily 3:b67c5cc2ac61 221 }
geekfamily 3:b67c5cc2ac61 222
geekfamily 3:b67c5cc2ac61 223 //Start Add by Ax 2016-4-23
geekfamily 3:b67c5cc2ac61 224 void GetTemperature()
geekfamily 3:b67c5cc2ac61 225 {
kgills 0:f03b6a07c4ba 226 while(1) {
kgills 0:f03b6a07c4ba 227 if (bmp180.init() != 0) {
kgills 0:f03b6a07c4ba 228 printf("Error communicating with BMP180\n");
kgills 0:f03b6a07c4ba 229 } else {
kgills 0:f03b6a07c4ba 230 printf("Initialized BMP180\n");
kgills 0:f03b6a07c4ba 231 break;
kgills 0:f03b6a07c4ba 232 }
kgills 0:f03b6a07c4ba 233 wait(1);
kgills 0:f03b6a07c4ba 234 }
kgills 0:f03b6a07c4ba 235
geekfamily 3:b67c5cc2ac61 236 bmp180.startTemperature();
geekfamily 3:b67c5cc2ac61 237 wait_ms(5); // Wait for conversion to complete
geekfamily 3:b67c5cc2ac61 238 float temp;
geekfamily 3:b67c5cc2ac61 239 while(1)
geekfamily 3:b67c5cc2ac61 240 {
kgills 0:f03b6a07c4ba 241 if(bmp180.getTemperature(&temp) != 0) {
kgills 0:f03b6a07c4ba 242 printf("Error getting temperature\n");
kgills 0:f03b6a07c4ba 243 continue;
kgills 0:f03b6a07c4ba 244 }
geekfamily 3:b67c5cc2ac61 245 else
geekfamily 3:b67c5cc2ac61 246 break;
geekfamily 3:b67c5cc2ac61 247 }
geekfamily 3:b67c5cc2ac61 248 arrCurrentEnvironment[2]=temp;
geekfamily 3:b67c5cc2ac61 249 //bmp180.startPressure(BMP180::ULTRA_LOW_POWER);
geekfamily 3:b67c5cc2ac61 250 //wait_ms(10); // Wait for conversion to complete
geekfamily 3:b67c5cc2ac61 251 //int pressure;
geekfamily 3:b67c5cc2ac61 252 //if(bmp180.getPressure(&pressure) != 0) {
geekfamily 3:b67c5cc2ac61 253 // printf("Error getting pressure\n");
geekfamily 3:b67c5cc2ac61 254 // continue;
geekfamily 3:b67c5cc2ac61 255 //}
kgills 0:f03b6a07c4ba 256
geekfamily 3:b67c5cc2ac61 257 //printf("Pressure = %d Pa Temperature = %f C\n", pressure, temp);
geekfamily 3:b67c5cc2ac61 258 //wait(1);
geekfamily 3:b67c5cc2ac61 259 }
geekfamily 3:b67c5cc2ac61 260
geekfamily 3:b67c5cc2ac61 261 void CheckEnvironment()
geekfamily 3:b67c5cc2ac61 262 {
geekfamily 3:b67c5cc2ac61 263 //Blue_Led_SET=1;//Enable bule LED means start to check
geekfamily 3:b67c5cc2ac61 264 //Red_Led_SET=0;//Disable RED LED means start to check
geekfamily 3:b67c5cc2ac61 265 for(int i=0;i<checkCounter;i++)
geekfamily 3:b67c5cc2ac61 266 {
geekfamily 3:b67c5cc2ac61 267 if(!IsNoPeopleInfront)
geekfamily 3:b67c5cc2ac61 268 {
geekfamily 3:b67c5cc2ac61 269 //Red_Led_SET=0;
geekfamily 3:b67c5cc2ac61 270 //LED_R = 1;
geekfamily 3:b67c5cc2ac61 271 //LED_R = 0;
geekfamily 3:b67c5cc2ac61 272 //wait(1);
geekfamily 3:b67c5cc2ac61 273 //if check many times there's no people
geekfamily 3:b67c5cc2ac61 274 if(i==checkCounter-1)
geekfamily 3:b67c5cc2ac61 275 {
geekfamily 3:b67c5cc2ac61 276 //if no people there, Add rest hours e.g. 2
geekfamily 3:b67c5cc2ac61 277 arrCurrentEnvironment[1]=arrCurrentEnvironment[1]+1;
geekfamily 3:b67c5cc2ac61 278 arrHistoryEnvironment[1]=arrHistoryEnvironment[1]+1;
geekfamily 3:b67c5cc2ac61 279
geekfamily 3:b67c5cc2ac61 280 //if rest enough time, rest working hour and rest hours
geekfamily 3:b67c5cc2ac61 281 if(arrCurrentEnvironment[1]>stdRestHours)
geekfamily 3:b67c5cc2ac61 282 {
geekfamily 3:b67c5cc2ac61 283 arrCurrentEnvironment[0]=0;
geekfamily 3:b67c5cc2ac61 284 arrCurrentEnvironment[1]=0;
geekfamily 3:b67c5cc2ac61 285 }
geekfamily 3:b67c5cc2ac61 286 }
kgills 0:f03b6a07c4ba 287 }
geekfamily 3:b67c5cc2ac61 288 else
geekfamily 3:b67c5cc2ac61 289 {
geekfamily 3:b67c5cc2ac61 290 //if people is siting there, Add working hours e.g. 2
geekfamily 3:b67c5cc2ac61 291 arrCurrentEnvironment[0]=arrCurrentEnvironment[0]+1;
geekfamily 3:b67c5cc2ac61 292 arrHistoryEnvironment[0]=arrHistoryEnvironment[0]+1;
geekfamily 3:b67c5cc2ac61 293 arrCurrentEnvironment[1]=0;//Rest hours set to 0
geekfamily 3:b67c5cc2ac61 294 //if working enough time, warn user
geekfamily 3:b67c5cc2ac61 295 if(arrCurrentEnvironment[0]>stdWorkHours)
geekfamily 3:b67c5cc2ac61 296 {
geekfamily 3:b67c5cc2ac61 297 //Red_Led_SET=1;
geekfamily 3:b67c5cc2ac61 298 //Blue_Led_SET=0;
geekfamily 3:b67c5cc2ac61 299 }
geekfamily 3:b67c5cc2ac61 300 /*
geekfamily 3:b67c5cc2ac61 301 arrCurrentEnvironment;
geekfamily 3:b67c5cc2ac61 302 float arrHistoryEnvironment[2] = {0,0};//total working hours,total rest hours
geekfamily 3:b67c5cc2ac61 303 float arrCurrentEnvironment[3] = {0,0,0};//current working hours,current rest hours,current temperature
geekfamily 3:b67c5cc2ac61 304 float stdWorkHours=60;//60 seconds for testing
geekfamily 3:b67c5cc2ac61 305 float stdRestHours=15;//15 seconds for testing
geekfamily 3:b67c5cc2ac61 306 float stdTemperature=18;//18 degree for testing
geekfamily 3:b67c5cc2ac61 307 */
geekfamily 3:b67c5cc2ac61 308 }
kgills 0:f03b6a07c4ba 309 wait(1);
kgills 0:f03b6a07c4ba 310 }
geekfamily 3:b67c5cc2ac61 311
geekfamily 3:b67c5cc2ac61 312 GetTemperature();
geekfamily 3:b67c5cc2ac61 313 }
geekfamily 3:b67c5cc2ac61 314 //End Add by Ax 2016-4-23
geekfamily 3:b67c5cc2ac61 315
geekfamily 3:b67c5cc2ac61 316 int main(void)
geekfamily 3:b67c5cc2ac61 317 {
geekfamily 3:b67c5cc2ac61 318 Ticker ticker;
geekfamily 3:b67c5cc2ac61 319 ticker.attach_us(m_status_check_handle, 200000);
geekfamily 3:b67c5cc2ac61 320
geekfamily 3:b67c5cc2ac61 321 ble.init();
geekfamily 3:b67c5cc2ac61 322 ble.onDisconnection(disconnectionCallback);
geekfamily 3:b67c5cc2ac61 323 ble.onDataWritten(WrittenHandler);
geekfamily 3:b67c5cc2ac61 324
geekfamily 3:b67c5cc2ac61 325 pc.baud(9600);
geekfamily 3:b67c5cc2ac61 326 pc.printf("SimpleChat Init \r\n");
geekfamily 3:b67c5cc2ac61 327
geekfamily 3:b67c5cc2ac61 328 //pc.attach( uartCB , pc.RxIrq);
geekfamily 3:b67c5cc2ac61 329
geekfamily 3:b67c5cc2ac61 330 // setup advertising
geekfamily 3:b67c5cc2ac61 331 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
geekfamily 3:b67c5cc2ac61 332 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
geekfamily 3:b67c5cc2ac61 333 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
geekfamily 3:b67c5cc2ac61 334 (const uint8_t *)"Biscuit", sizeof("Biscuit") - 1);
geekfamily 3:b67c5cc2ac61 335 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
geekfamily 3:b67c5cc2ac61 336 (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
geekfamily 3:b67c5cc2ac61 337 // 100ms; in multiples of 0.625ms.
geekfamily 3:b67c5cc2ac61 338 ble.setAdvertisingInterval(160);
geekfamily 3:b67c5cc2ac61 339
geekfamily 3:b67c5cc2ac61 340 ble.addService(uartService);
geekfamily 3:b67c5cc2ac61 341
geekfamily 3:b67c5cc2ac61 342 ble.startAdvertising();
geekfamily 3:b67c5cc2ac61 343
geekfamily 3:b67c5cc2ac61 344 pc.printf("Advertising Start \r\n");
geekfamily 3:b67c5cc2ac61 345
geekfamily 3:b67c5cc2ac61 346 while(1)
geekfamily 3:b67c5cc2ac61 347 {
geekfamily 3:b67c5cc2ac61 348 ble.waitForEvent();
geekfamily 3:b67c5cc2ac61 349 //Check Temperature & People sitting time
geekfamily 3:b67c5cc2ac61 350 CheckEnvironment();
geekfamily 3:b67c5cc2ac61 351 //wait(1);
geekfamily 3:b67c5cc2ac61 352 //Red_Led_SET=0;
geekfamily 3:b67c5cc2ac61 353 //Blue_Led_SET=0;
geekfamily 3:b67c5cc2ac61 354
geekfamily 3:b67c5cc2ac61 355 }
geekfamily 3:b67c5cc2ac61 356 }