test code 123

Dependencies:   mbed

Fork of LinkNode-Test by Qi Yao

Committer:
youkee
Date:
Fri Oct 28 13:04:10 2016 +0000
Revision:
1:b0d4fbbdb244
Parent:
0:1ad0e04b1bc5
ghhbfdd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
youkee 0:1ad0e04b1bc5 1 /*
youkee 0:1ad0e04b1bc5 2
youkee 0:1ad0e04b1bc5 3 Copyright (c) 2012-2014 RedBearLab
youkee 0:1ad0e04b1bc5 4
youkee 0:1ad0e04b1bc5 5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
youkee 0:1ad0e04b1bc5 6 and associated documentation files (the "Software"), to deal in the Software without restriction,
youkee 0:1ad0e04b1bc5 7 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
youkee 0:1ad0e04b1bc5 8 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
youkee 0:1ad0e04b1bc5 9 subject to the following conditions:
youkee 0:1ad0e04b1bc5 10 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
youkee 0:1ad0e04b1bc5 11
youkee 0:1ad0e04b1bc5 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
youkee 0:1ad0e04b1bc5 13 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
youkee 0:1ad0e04b1bc5 14 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
youkee 0:1ad0e04b1bc5 15 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
youkee 0:1ad0e04b1bc5 16 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
youkee 0:1ad0e04b1bc5 17
youkee 0:1ad0e04b1bc5 18 */
youkee 0:1ad0e04b1bc5 19 /*
youkee 0:1ad0e04b1bc5 20 * The application works with the Science Journal App.
youkee 0:1ad0e04b1bc5 21 * Sensors Value from the BLE sensors tag to send
youkee 0:1ad0e04b1bc5 22 * to the Science Journal App.
youkee 0:1ad0e04b1bc5 23 * Characteristics Value received from App will print on Terminal.
youkee 0:1ad0e04b1bc5 24 * Sensors value will display the Science Jorunal App.
youkee 0:1ad0e04b1bc5 25 */
youkee 0:1ad0e04b1bc5 26
youkee 0:1ad0e04b1bc5 27 #include <stdio.h>
youkee 0:1ad0e04b1bc5 28 #include "mbed.h"
youkee 0:1ad0e04b1bc5 29 #include "ble/BLE.h"
youkee 0:1ad0e04b1bc5 30 #include "goosci_utility.h"
youkee 0:1ad0e04b1bc5 31 #include "config_change.h"
youkee 0:1ad0e04b1bc5 32 #include "BMP180.h"
youkee 0:1ad0e04b1bc5 33
youkee 0:1ad0e04b1bc5 34 #define SCIENCE_UUID_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */
youkee 0:1ad0e04b1bc5 35 #define SCIENCE_UUID_VALUE_CHARACTERISTIC 0x0003 /**< The UUID of the TX Characteristic. */
youkee 0:1ad0e04b1bc5 36 #define SCIENCE_UUID_CONFIG_CHARACTERISTIC 0x0010 /**< The UUID of the RX Characteristic. */
youkee 0:1ad0e04b1bc5 37
youkee 0:1ad0e04b1bc5 38 #define TXRX_BUF_LEN 20
youkee 0:1ad0e04b1bc5 39 #define INTERNAL 200
youkee 0:1ad0e04b1bc5 40
youkee 0:1ad0e04b1bc5 41 BLE ble;
youkee 0:1ad0e04b1bc5 42 Timer mytimer;
youkee 0:1ad0e04b1bc5 43 Serial pc(P0_23, P0_25);
youkee 0:1ad0e04b1bc5 44
youkee 0:1ad0e04b1bc5 45 //LED setup
youkee 0:1ad0e04b1bc5 46 DigitalOut LED_R(P0_20);
youkee 0:1ad0e04b1bc5 47 DigitalOut LED_G(P0_19);
youkee 0:1ad0e04b1bc5 48
youkee 0:1ad0e04b1bc5 49 //Sensors setup
youkee 0:1ad0e04b1bc5 50 I2C i2c(P0_17, P0_18);
youkee 0:1ad0e04b1bc5 51 BMP180 bmp180(&i2c);
youkee 0:1ad0e04b1bc5 52
youkee 0:1ad0e04b1bc5 53 //Light sensor
youkee 0:1ad0e04b1bc5 54 //Analog setup
youkee 0:1ad0e04b1bc5 55 AnalogIn myanalog(P0_1);
youkee 0:1ad0e04b1bc5 56
youkee 0:1ad0e04b1bc5 57 //LIS3DH set up
youkee 0:1ad0e04b1bc5 58 SPI spi_master(P0_6,P0_5,P0_7); //mosi miso sclk
youkee 0:1ad0e04b1bc5 59 DigitalOut cs(P0_4);
youkee 0:1ad0e04b1bc5 60
youkee 0:1ad0e04b1bc5 61
youkee 0:1ad0e04b1bc5 62 uint16_t x_a,y_a,z_a;
youkee 0:1ad0e04b1bc5 63
youkee 0:1ad0e04b1bc5 64 uint8_t LIS3DH_SPI_RD(uint8_t addr)
youkee 0:1ad0e04b1bc5 65 {
youkee 0:1ad0e04b1bc5 66 uint8_t temp;
youkee 0:1ad0e04b1bc5 67 cs = 0;
youkee 0:1ad0e04b1bc5 68 wait_us(10);
youkee 0:1ad0e04b1bc5 69 spi_master.write(addr);
youkee 0:1ad0e04b1bc5 70 temp=spi_master.write(0xff);
youkee 0:1ad0e04b1bc5 71 wait_us(10);
youkee 0:1ad0e04b1bc5 72 cs = 1;
youkee 0:1ad0e04b1bc5 73 return temp;
youkee 0:1ad0e04b1bc5 74 }
youkee 0:1ad0e04b1bc5 75 void LIS3DH_SPI_WR(uint8_t addr,uint8_t wrdata)
youkee 0:1ad0e04b1bc5 76 {
youkee 0:1ad0e04b1bc5 77 cs = 0;
youkee 0:1ad0e04b1bc5 78 wait_us(10);
youkee 0:1ad0e04b1bc5 79 spi_master.write(addr);
youkee 0:1ad0e04b1bc5 80 spi_master.write(wrdata);
youkee 0:1ad0e04b1bc5 81 wait_us(10);
youkee 0:1ad0e04b1bc5 82 cs = 1;
youkee 0:1ad0e04b1bc5 83 }
youkee 0:1ad0e04b1bc5 84 void SPI_LIS3DH_Init()
youkee 0:1ad0e04b1bc5 85 {
youkee 0:1ad0e04b1bc5 86 spi_master.format(8,3);
youkee 0:1ad0e04b1bc5 87 spi_master.frequency(100000);
youkee 0:1ad0e04b1bc5 88 wait_ms(5);
youkee 0:1ad0e04b1bc5 89 LIS3DH_SPI_WR(0x24,0x80);
youkee 0:1ad0e04b1bc5 90 wait_ms(5);
youkee 0:1ad0e04b1bc5 91 LIS3DH_SPI_WR(0x20,0x17);
youkee 0:1ad0e04b1bc5 92 LIS3DH_SPI_WR(0x23,0x80);
youkee 0:1ad0e04b1bc5 93 }
youkee 0:1ad0e04b1bc5 94 void Get_LIS3DH_Val(void)
youkee 0:1ad0e04b1bc5 95 {
youkee 0:1ad0e04b1bc5 96 uint8_t Dx_L=1,Dy_L=1,Dz_L=1;
youkee 0:1ad0e04b1bc5 97 uint8_t Dx_H=1,Dy_H=1,Dz_H=1;
youkee 0:1ad0e04b1bc5 98 if(LIS3DH_SPI_RD(0x0f|0x80)==0x33)
youkee 0:1ad0e04b1bc5 99 {
youkee 0:1ad0e04b1bc5 100 printf("check device ok!\r\n");
youkee 0:1ad0e04b1bc5 101 Dx_H=LIS3DH_SPI_RD(0x29|0x80);
youkee 0:1ad0e04b1bc5 102 Dx_L=LIS3DH_SPI_RD(0x28|0x80);
youkee 0:1ad0e04b1bc5 103 Dy_H=LIS3DH_SPI_RD(0x2b|0x80);
youkee 0:1ad0e04b1bc5 104 Dy_L=LIS3DH_SPI_RD(0x2A|0x80);
youkee 0:1ad0e04b1bc5 105 Dz_H=LIS3DH_SPI_RD(0x2d|0x80);
youkee 0:1ad0e04b1bc5 106 Dz_L=LIS3DH_SPI_RD(0x2C|0x80);
youkee 0:1ad0e04b1bc5 107 }
youkee 0:1ad0e04b1bc5 108 else printf("check device err!\r\n");
youkee 0:1ad0e04b1bc5 109 x_a=Dx_H<<8|Dx_L/16;
youkee 0:1ad0e04b1bc5 110 y_a=Dy_H<<8|Dy_L/16;
youkee 0:1ad0e04b1bc5 111 z_a=Dz_H<<8|Dz_L/16;
youkee 0:1ad0e04b1bc5 112 }
youkee 0:1ad0e04b1bc5 113
youkee 0:1ad0e04b1bc5 114
youkee 0:1ad0e04b1bc5 115 void Sensors_Init()
youkee 0:1ad0e04b1bc5 116 {
youkee 0:1ad0e04b1bc5 117 SPI_LIS3DH_Init();
youkee 0:1ad0e04b1bc5 118
youkee 0:1ad0e04b1bc5 119 bmp180.init();
youkee 0:1ad0e04b1bc5 120 }
youkee 0:1ad0e04b1bc5 121
youkee 0:1ad0e04b1bc5 122 //
youkee 0:1ad0e04b1bc5 123
youkee 0:1ad0e04b1bc5 124 // The Science Journal Service
youkee 0:1ad0e04b1bc5 125 static const uint8_t science_uuid_conn[]= {0xe8,0x74,0x2c,0x65,0xf0,0x01,0x38,0x95,0x7a,0x46,0xaa,0x0a,0x01,0x00,0x5a,0x55};
youkee 0:1ad0e04b1bc5 126
youkee 0:1ad0e04b1bc5 127 static const uint8_t science_base_uuid[] = {0x55,0x5a,0x00,0x01,0x0a,0xaa,0x46,0x7a,0x95,0x38,0x01,0xf0,0x65,0x2c,0x74,0xe8};
youkee 0:1ad0e04b1bc5 128
youkee 0:1ad0e04b1bc5 129 static const uint8_t science_value_uuid[]= {0x55,0x5a,0x00,0x03,0x0a,0xaa,0x46,0x7a,0x95,0x38,0x01,0xf0,0x65,0x2c,0x74,0xe8};
youkee 0:1ad0e04b1bc5 130
youkee 0:1ad0e04b1bc5 131 static const uint8_t science_config_uuid[]= {0x55,0x5a,0x00,0x10,0x0a,0xaa,0x46,0x7a,0x95,0x38,0x01,0xf0,0x65,0x2c,0x74,0xe8};
youkee 0:1ad0e04b1bc5 132
youkee 0:1ad0e04b1bc5 133
youkee 0:1ad0e04b1bc5 134
youkee 0:1ad0e04b1bc5 135
youkee 0:1ad0e04b1bc5 136 uint8_t valuePayload[TXRX_BUF_LEN] = {0,};
youkee 0:1ad0e04b1bc5 137 uint8_t configPayload[TXRX_BUF_LEN] = {0,};
youkee 0:1ad0e04b1bc5 138
youkee 0:1ad0e04b1bc5 139 static uint8_t config_buf[TXRX_BUF_LEN];
youkee 0:1ad0e04b1bc5 140 static uint8_t config_len=0;
youkee 0:1ad0e04b1bc5 141
youkee 0:1ad0e04b1bc5 142 GattCharacteristic valueCharacteristic (science_value_uuid, valuePayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
youkee 0:1ad0e04b1bc5 143
youkee 0:1ad0e04b1bc5 144 GattCharacteristic configCharacteristic (science_config_uuid, configPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
youkee 0:1ad0e04b1bc5 145
youkee 0:1ad0e04b1bc5 146 GattCharacteristic *scienceChars[] = {&valueCharacteristic, &configCharacteristic};
youkee 0:1ad0e04b1bc5 147
youkee 0:1ad0e04b1bc5 148 GattService scienceService(science_base_uuid, scienceChars, sizeof(scienceChars) / sizeof(GattCharacteristic *));
youkee 0:1ad0e04b1bc5 149
youkee 0:1ad0e04b1bc5 150 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
youkee 0:1ad0e04b1bc5 151 {
youkee 0:1ad0e04b1bc5 152 pc.printf("Disconnected \r\n");
youkee 0:1ad0e04b1bc5 153 pc.printf("Restart advertising \r\n");
youkee 0:1ad0e04b1bc5 154 ble.startAdvertising();
youkee 0:1ad0e04b1bc5 155 }
youkee 0:1ad0e04b1bc5 156
youkee 0:1ad0e04b1bc5 157 void WrittenHandler(const GattWriteCallbackParams *Handler)
youkee 0:1ad0e04b1bc5 158 {
youkee 0:1ad0e04b1bc5 159 uint8_t buf[TXRX_BUF_LEN];
youkee 0:1ad0e04b1bc5 160 uint16_t bytesRead;
youkee 0:1ad0e04b1bc5 161
youkee 0:1ad0e04b1bc5 162 if (Handler->handle == configCharacteristic.getValueAttribute().getHandle())
youkee 0:1ad0e04b1bc5 163 {
youkee 0:1ad0e04b1bc5 164 ble.readCharacteristicValue(configCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead);
youkee 0:1ad0e04b1bc5 165 memset(valuePayload, 0, TXRX_BUF_LEN);
youkee 0:1ad0e04b1bc5 166 memcpy(valuePayload, buf, TXRX_BUF_LEN);
youkee 0:1ad0e04b1bc5 167 pc.printf("WriteHandler \r\n");
youkee 0:1ad0e04b1bc5 168 int8_t handle_len = bytesRead;
youkee 0:1ad0e04b1bc5 169 handle(valuePayload,handle_len);
youkee 0:1ad0e04b1bc5 170 pc.printf("pin num : %d ",pin);
youkee 0:1ad0e04b1bc5 171
youkee 0:1ad0e04b1bc5 172 }
youkee 0:1ad0e04b1bc5 173 }
youkee 0:1ad0e04b1bc5 174
youkee 0:1ad0e04b1bc5 175 void uartCB(void)
youkee 0:1ad0e04b1bc5 176 {
youkee 0:1ad0e04b1bc5 177 while(pc.readable()) {
youkee 0:1ad0e04b1bc5 178 config_buf[config_len++] = pc.getc();
youkee 0:1ad0e04b1bc5 179 if(config_len>=20 || config_buf[config_len-1]=='\0' || config_buf[config_len-1]=='\n')
youkee 0:1ad0e04b1bc5 180 {
youkee 0:1ad0e04b1bc5 181 ble.updateCharacteristicValue(valueCharacteristic.getValueAttribute().getHandle(), config_buf, config_len);
youkee 0:1ad0e04b1bc5 182 pc.printf("RecHandler \r\n");
youkee 0:1ad0e04b1bc5 183 pc.printf("Length: ");
youkee 0:1ad0e04b1bc5 184 pc.putc(config_len);
youkee 0:1ad0e04b1bc5 185 pc.printf("config_len: %d",config_len);
youkee 0:1ad0e04b1bc5 186 pc.printf("\r\n");
youkee 0:1ad0e04b1bc5 187 config_len = 0;
youkee 0:1ad0e04b1bc5 188 break;
youkee 0:1ad0e04b1bc5 189 }
youkee 0:1ad0e04b1bc5 190 }
youkee 0:1ad0e04b1bc5 191 }
youkee 0:1ad0e04b1bc5 192
youkee 0:1ad0e04b1bc5 193
youkee 0:1ad0e04b1bc5 194 int main(void)
youkee 0:1ad0e04b1bc5 195 {
youkee 0:1ad0e04b1bc5 196 mytimer.start();
youkee 0:1ad0e04b1bc5 197 ble.init();
youkee 0:1ad0e04b1bc5 198
youkee 0:1ad0e04b1bc5 199 Sensors_Init();
youkee 0:1ad0e04b1bc5 200
youkee 0:1ad0e04b1bc5 201 ble.onDisconnection(disconnectionCallback);
youkee 0:1ad0e04b1bc5 202 ble.onDataWritten(WrittenHandler);
youkee 0:1ad0e04b1bc5 203
youkee 0:1ad0e04b1bc5 204 pc.baud(9600);
youkee 0:1ad0e04b1bc5 205 pc.printf("BLE sensors tag init \r\n");
youkee 0:1ad0e04b1bc5 206
youkee 0:1ad0e04b1bc5 207 pc.attach( uartCB , pc.RxIrq);
youkee 0:1ad0e04b1bc5 208
youkee 0:1ad0e04b1bc5 209 //setup advertising
youkee 0:1ad0e04b1bc5 210 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
youkee 0:1ad0e04b1bc5 211 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
youkee 0:1ad0e04b1bc5 212
youkee 0:1ad0e04b1bc5 213 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
youkee 0:1ad0e04b1bc5 214 (const uint8_t *) "BLE-mbed",sizeof("BLE-mbed") - 1);
youkee 0:1ad0e04b1bc5 215
youkee 0:1ad0e04b1bc5 216
youkee 0:1ad0e04b1bc5 217 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
youkee 0:1ad0e04b1bc5 218 (const uint8_t *)science_uuid_conn, sizeof(science_uuid_conn));
youkee 0:1ad0e04b1bc5 219 // 100ms; in multiples of 0.625ms.
youkee 0:1ad0e04b1bc5 220 ble.setAdvertisingInterval(160);
youkee 0:1ad0e04b1bc5 221
youkee 0:1ad0e04b1bc5 222 ble.addService(scienceService);
youkee 0:1ad0e04b1bc5 223
youkee 0:1ad0e04b1bc5 224 ble.startAdvertising();
youkee 0:1ad0e04b1bc5 225 pc.printf("Advertising Start \r\n");
youkee 0:1ad0e04b1bc5 226
youkee 0:1ad0e04b1bc5 227 while(1)
youkee 0:1ad0e04b1bc5 228 {
youkee 0:1ad0e04b1bc5 229 LED_R = 0;
youkee 0:1ad0e04b1bc5 230 LED_G = 0;
youkee 0:1ad0e04b1bc5 231
youkee 0:1ad0e04b1bc5 232 if (pin == 0 && pin_type == ANALOG) //Light sensor
youkee 0:1ad0e04b1bc5 233 {
youkee 0:1ad0e04b1bc5 234 //read analog value
youkee 0:1ad0e04b1bc5 235 unsigned short AnalogValue=myanalog.read_u16();
youkee 0:1ad0e04b1bc5 236 wait_ms(10);
youkee 0:1ad0e04b1bc5 237 pc.printf("Analog: %d\n",AnalogValue);
youkee 0:1ad0e04b1bc5 238 send_int_data(valueCharacteristic,mytimer.read_ms(),AnalogValue);
youkee 0:1ad0e04b1bc5 239 }
youkee 0:1ad0e04b1bc5 240 else if(pin == 1 && pin_type == ANALOG) //Temperature
youkee 0:1ad0e04b1bc5 241 {
youkee 0:1ad0e04b1bc5 242 bmp180.startTemperature();
youkee 0:1ad0e04b1bc5 243 wait_ms(10); // Wait for conversion to complete
youkee 0:1ad0e04b1bc5 244 float temp;
youkee 0:1ad0e04b1bc5 245 bmp180.getTemperature(&temp);
youkee 0:1ad0e04b1bc5 246 int value = temp;
youkee 0:1ad0e04b1bc5 247 pc.printf("Tem:%d \n",value);
youkee 0:1ad0e04b1bc5 248 send_int_data(valueCharacteristic,mytimer.read_ms(),value);
youkee 0:1ad0e04b1bc5 249 }
youkee 0:1ad0e04b1bc5 250 else if(pin == 2 && pin_type == ANALOG) //Barometric pressure
youkee 0:1ad0e04b1bc5 251 {
youkee 0:1ad0e04b1bc5 252 bmp180.startPressure(BMP180::ULTRA_LOW_POWER);
youkee 0:1ad0e04b1bc5 253 wait_ms(10); // Wait for conversion to complete
youkee 0:1ad0e04b1bc5 254 int pressure;
youkee 0:1ad0e04b1bc5 255 bmp180.getPressure(&pressure);
youkee 0:1ad0e04b1bc5 256 pc.printf("Pre:%d \n",pressure);
youkee 0:1ad0e04b1bc5 257 send_int_data(valueCharacteristic,mytimer.read_ms(),pressure);
youkee 0:1ad0e04b1bc5 258 }
youkee 0:1ad0e04b1bc5 259 else if(pin == 3 && pin_type == ANALOG) //X axis acceleration
youkee 0:1ad0e04b1bc5 260 {
youkee 0:1ad0e04b1bc5 261 Get_LIS3DH_Val();
youkee 0:1ad0e04b1bc5 262 pc.printf("Dx=:%d\r\n",x_a);
youkee 0:1ad0e04b1bc5 263 send_int_data(valueCharacteristic,mytimer.read_ms(),x_a);
youkee 0:1ad0e04b1bc5 264 }
youkee 0:1ad0e04b1bc5 265 else if(pin == 4 && pin_type == ANALOG) //Y axis acceleration
youkee 0:1ad0e04b1bc5 266 {
youkee 0:1ad0e04b1bc5 267 Get_LIS3DH_Val();
youkee 0:1ad0e04b1bc5 268 pc.printf("Dy=:%d\r\n",y_a);
youkee 0:1ad0e04b1bc5 269 send_int_data(valueCharacteristic,mytimer.read_ms(),y_a);
youkee 0:1ad0e04b1bc5 270 }
youkee 0:1ad0e04b1bc5 271 else if(pin == 5 && pin_type == ANALOG) //Z axis acceleration
youkee 0:1ad0e04b1bc5 272 {
youkee 0:1ad0e04b1bc5 273 Get_LIS3DH_Val();
youkee 0:1ad0e04b1bc5 274 pc.printf("Dz=:%d\r\n",z_a);
youkee 0:1ad0e04b1bc5 275 send_int_data(valueCharacteristic,mytimer.read_ms(),z_a);
youkee 0:1ad0e04b1bc5 276 }
youkee 0:1ad0e04b1bc5 277 else if(pin == 6 && pin_type == ANALOG)
youkee 0:1ad0e04b1bc5 278 {
youkee 0:1ad0e04b1bc5 279 //add another sensor in here
youkee 0:1ad0e04b1bc5 280 }
youkee 0:1ad0e04b1bc5 281 else
youkee 0:1ad0e04b1bc5 282 {
youkee 0:1ad0e04b1bc5 283 int error_code = 404;
youkee 0:1ad0e04b1bc5 284 send_int_data(valueCharacteristic,mytimer.read_ms(),error_code);
youkee 0:1ad0e04b1bc5 285 }
youkee 0:1ad0e04b1bc5 286 LED_R = 1;
youkee 0:1ad0e04b1bc5 287 LED_G = 1;
youkee 0:1ad0e04b1bc5 288
youkee 0:1ad0e04b1bc5 289 wait_ms(INTERNAL);
youkee 0:1ad0e04b1bc5 290 ble.waitForEvent();
youkee 0:1ad0e04b1bc5 291 }
youkee 0:1ad0e04b1bc5 292 }
youkee 0:1ad0e04b1bc5 293
youkee 0:1ad0e04b1bc5 294
youkee 0:1ad0e04b1bc5 295
youkee 0:1ad0e04b1bc5 296
youkee 0:1ad0e04b1bc5 297
youkee 0:1ad0e04b1bc5 298
youkee 0:1ad0e04b1bc5 299
youkee 0:1ad0e04b1bc5 300
youkee 0:1ad0e04b1bc5 301
youkee 0:1ad0e04b1bc5 302
youkee 0:1ad0e04b1bc5 303
youkee 0:1ad0e04b1bc5 304
youkee 0:1ad0e04b1bc5 305
youkee 0:1ad0e04b1bc5 306
youkee 0:1ad0e04b1bc5 307
youkee 0:1ad0e04b1bc5 308