BLE Lightning sensor for Nordic NRF51822 based module
Dependencies: AS3935 AS3935_ext BLE_API mbed nRF51822 nrf51_rtc
main.cpp@3:2ea547dab8a8, 2015-08-30 (annotated)
- Committer:
- takafuminaka
- Date:
- Sun Aug 30 10:15:31 2015 +0000
- Revision:
- 3:2ea547dab8a8
- Parent:
- 2:e1e638cbf972
- Child:
- 4:8f815f8d804e
?????? UART????????????;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
takafuminaka | 0:371bcac81ea2 | 1 | /* |
takafuminaka | 0:371bcac81ea2 | 2 | |
takafuminaka | 0:371bcac81ea2 | 3 | */ |
takafuminaka | 0:371bcac81ea2 | 4 | |
takafuminaka | 0:371bcac81ea2 | 5 | #include "mbed.h" |
takafuminaka | 0:371bcac81ea2 | 6 | #include "nrf51_rtc.h" |
takafuminaka | 0:371bcac81ea2 | 7 | #include "AS3935_ext.h" |
takafuminaka | 0:371bcac81ea2 | 8 | |
takafuminaka | 3:2ea547dab8a8 | 9 | #define NEED_CONSOLE_OUTPUT 1 // Set this if you need debug messages on the console; |
takafuminaka | 3:2ea547dab8a8 | 10 | #define NEED_BLE_CONSOLE 1 |
takafuminaka | 1:a4119049dd99 | 11 | |
takafuminaka | 1:a4119049dd99 | 12 | #if NEED_CONSOLE_OUTPUT |
takafuminaka | 1:a4119049dd99 | 13 | Serial pc(USBTX, USBRX); |
takafuminaka | 1:a4119049dd99 | 14 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
takafuminaka | 1:a4119049dd99 | 15 | #else |
takafuminaka | 1:a4119049dd99 | 16 | #define DEBUG(...) /* nothing */ |
takafuminaka | 1:a4119049dd99 | 17 | #endif /* #if NEED_CONSOLE_OUTPUT */ |
takafuminaka | 1:a4119049dd99 | 18 | |
takafuminaka | 3:2ea547dab8a8 | 19 | #if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 20 | #include "BLE.h" |
takafuminaka | 3:2ea547dab8a8 | 21 | #include "UARTService.h" |
takafuminaka | 3:2ea547dab8a8 | 22 | #define BLEC(...) { char __blecstr[32]; sprintf(__blecstr,__VA_ARGS__); if (uart) uart->write(__blecstr, strlen(__blecstr)); } |
takafuminaka | 3:2ea547dab8a8 | 23 | #else |
takafuminaka | 3:2ea547dab8a8 | 24 | #define BLEC(...) /* nothing */ |
takafuminaka | 3:2ea547dab8a8 | 25 | #endif /* #if NEED_BLE_CONSOLE */ |
takafuminaka | 1:a4119049dd99 | 26 | |
takafuminaka | 3:2ea547dab8a8 | 27 | #if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 28 | // Prepare BLE device |
takafuminaka | 3:2ea547dab8a8 | 29 | const uint8_t DEVICE_NAME[] = "BLE Ligttning Sensor"; |
takafuminaka | 3:2ea547dab8a8 | 30 | #endif // #if NEED_BLE_CONSOLE |
takafuminaka | 1:a4119049dd99 | 31 | |
takafuminaka | 1:a4119049dd99 | 32 | |
takafuminaka | 1:a4119049dd99 | 33 | // Prepare LED device |
takafuminaka | 1:a4119049dd99 | 34 | DigitalOut led1(LED1); |
takafuminaka | 1:a4119049dd99 | 35 | DigitalOut led2(LED2); |
takafuminaka | 1:a4119049dd99 | 36 | |
takafuminaka | 0:371bcac81ea2 | 37 | AS3935_ext Lightning(I2C_SDA0,I2C_SCL0,0x00,P0_23); |
takafuminaka | 0:371bcac81ea2 | 38 | InterruptIn IntLightning(P0_23); //IRQ AS3935 |
takafuminaka | 0:371bcac81ea2 | 39 | |
takafuminaka | 0:371bcac81ea2 | 40 | // used for the example only, not required for rtc use |
takafuminaka | 0:371bcac81ea2 | 41 | DigitalIn button1(BUTTON1); // used to trigger the time report |
takafuminaka | 0:371bcac81ea2 | 42 | InterruptIn button1Press(BUTTON1); |
takafuminaka | 0:371bcac81ea2 | 43 | |
takafuminaka | 3:2ea547dab8a8 | 44 | // event record buffer struct |
takafuminaka | 3:2ea547dab8a8 | 45 | const int s_evrecord=10; |
takafuminaka | 3:2ea547dab8a8 | 46 | struct t_evrecord { |
takafuminaka | 3:2ea547dab8a8 | 47 | public: |
takafuminaka | 3:2ea547dab8a8 | 48 | int event; |
takafuminaka | 3:2ea547dab8a8 | 49 | time_t time; |
takafuminaka | 3:2ea547dab8a8 | 50 | int distance; |
takafuminaka | 3:2ea547dab8a8 | 51 | |
takafuminaka | 3:2ea547dab8a8 | 52 | t_evrecord() { |
takafuminaka | 3:2ea547dab8a8 | 53 | event = 0; |
takafuminaka | 3:2ea547dab8a8 | 54 | time = 0; |
takafuminaka | 3:2ea547dab8a8 | 55 | distance = 0; |
takafuminaka | 3:2ea547dab8a8 | 56 | } |
takafuminaka | 3:2ea547dab8a8 | 57 | } evrecord[s_evrecord]; |
takafuminaka | 0:371bcac81ea2 | 58 | |
takafuminaka | 0:371bcac81ea2 | 59 | time_t example_time() { |
takafuminaka | 0:371bcac81ea2 | 60 | // set an intial time |
takafuminaka | 0:371bcac81ea2 | 61 | // ...not really necessary for this example, but it beats setting it to 0 or some non-obvious large integer (# of seconds since 1/1/1970) |
takafuminaka | 0:371bcac81ea2 | 62 | time_t rawtime=0; |
takafuminaka | 0:371bcac81ea2 | 63 | |
takafuminaka | 0:371bcac81ea2 | 64 | struct tm * init_timeinfo; |
takafuminaka | 0:371bcac81ea2 | 65 | |
takafuminaka | 0:371bcac81ea2 | 66 | // initialize time |
takafuminaka | 0:371bcac81ea2 | 67 | init_timeinfo = localtime(&rawtime); // note: must initialize the struct with this before trying to set components |
takafuminaka | 0:371bcac81ea2 | 68 | // ...else code goes into the weeds!! |
takafuminaka | 0:371bcac81ea2 | 69 | init_timeinfo->tm_sec = 0; |
takafuminaka | 0:371bcac81ea2 | 70 | init_timeinfo->tm_min = 0; |
takafuminaka | 0:371bcac81ea2 | 71 | init_timeinfo->tm_hour = 0; |
takafuminaka | 0:371bcac81ea2 | 72 | init_timeinfo->tm_mon = 0; |
takafuminaka | 0:371bcac81ea2 | 73 | init_timeinfo->tm_mday = 1; |
takafuminaka | 2:e1e638cbf972 | 74 | init_timeinfo->tm_year = 70; |
takafuminaka | 0:371bcac81ea2 | 75 | |
takafuminaka | 0:371bcac81ea2 | 76 | char date[24]; |
takafuminaka | 0:371bcac81ea2 | 77 | strftime(date,sizeof(date),"%H:%M:%S on %m/%d/%G",init_timeinfo); |
takafuminaka | 1:a4119049dd99 | 78 | DEBUG("Initial time set is %s.\r\n",date); |
takafuminaka | 0:371bcac81ea2 | 79 | |
takafuminaka | 0:371bcac81ea2 | 80 | // compute the proper value for time in time_t type |
takafuminaka | 0:371bcac81ea2 | 81 | rawtime = mktime(init_timeinfo); |
takafuminaka | 0:371bcac81ea2 | 82 | return rawtime; |
takafuminaka | 0:371bcac81ea2 | 83 | } |
takafuminaka | 1:a4119049dd99 | 84 | |
takafuminaka | 0:371bcac81ea2 | 85 | void print_time() { |
takafuminaka | 0:371bcac81ea2 | 86 | // called when a button is pushed, this prints the current time to the USB-connected console |
takafuminaka | 0:371bcac81ea2 | 87 | |
takafuminaka | 0:371bcac81ea2 | 88 | time_t rawtime=rtc.time(); |
takafuminaka | 0:371bcac81ea2 | 89 | |
takafuminaka | 0:371bcac81ea2 | 90 | // massage the time into a human-friendly format for printing |
takafuminaka | 0:371bcac81ea2 | 91 | struct tm * timeinfo; |
takafuminaka | 0:371bcac81ea2 | 92 | timeinfo = localtime(&rawtime); |
takafuminaka | 0:371bcac81ea2 | 93 | char date[24]; |
takafuminaka | 0:371bcac81ea2 | 94 | strftime(date,sizeof(date),"%H:%M:%S on %m/%d/%G",timeinfo); |
takafuminaka | 1:a4119049dd99 | 95 | DEBUG("The current time is %s.(%d)\r\n",date,rawtime); |
takafuminaka | 0:371bcac81ea2 | 96 | } |
takafuminaka | 0:371bcac81ea2 | 97 | |
takafuminaka | 1:a4119049dd99 | 98 | void periodic_update() { |
takafuminaka | 0:371bcac81ea2 | 99 | // for use as interrupt routine, to insure that RTC is updated periodically |
takafuminaka | 0:371bcac81ea2 | 100 | // ...if rtc is not read before the underlying counter rolls over (typically 512 seconds), the RTC value will be wrong |
takafuminaka | 0:371bcac81ea2 | 101 | // ...ideally this would be done as part of the nrf51_rtc method, but I couldn't get it to behave (see nrf51_rtc.cpp for details) |
takafuminaka | 0:371bcac81ea2 | 102 | rtc.time(); |
takafuminaka | 1:a4119049dd99 | 103 | Lightning.lightningDistanceKm(); |
takafuminaka | 1:a4119049dd99 | 104 | led1 = !led1; |
takafuminaka | 1:a4119049dd99 | 105 | |
takafuminaka | 0:371bcac81ea2 | 106 | // print_time(); |
takafuminaka | 0:371bcac81ea2 | 107 | } |
takafuminaka | 0:371bcac81ea2 | 108 | |
takafuminaka | 3:2ea547dab8a8 | 109 | #if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 110 | BLEDevice ble; |
takafuminaka | 3:2ea547dab8a8 | 111 | UARTService *uart; |
takafuminaka | 3:2ea547dab8a8 | 112 | static Gap::ConnectionParams_t connectionParams; |
takafuminaka | 3:2ea547dab8a8 | 113 | int buff_flash_flag; |
takafuminaka | 3:2ea547dab8a8 | 114 | |
takafuminaka | 3:2ea547dab8a8 | 115 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) // Mod |
takafuminaka | 3:2ea547dab8a8 | 116 | { |
takafuminaka | 3:2ea547dab8a8 | 117 | DEBUG("Disconnected handle %u!\n\r", handle); |
takafuminaka | 3:2ea547dab8a8 | 118 | DEBUG("Restarting the advertising process\n\r"); |
takafuminaka | 3:2ea547dab8a8 | 119 | led2 = 0; |
takafuminaka | 3:2ea547dab8a8 | 120 | ble.gap().startAdvertising(); |
takafuminaka | 3:2ea547dab8a8 | 121 | |
takafuminaka | 3:2ea547dab8a8 | 122 | |
takafuminaka | 3:2ea547dab8a8 | 123 | } |
takafuminaka | 3:2ea547dab8a8 | 124 | |
takafuminaka | 3:2ea547dab8a8 | 125 | void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params) |
takafuminaka | 3:2ea547dab8a8 | 126 | { |
takafuminaka | 3:2ea547dab8a8 | 127 | DEBUG("connected. Got handle %u\r\n", params->handle); |
takafuminaka | 3:2ea547dab8a8 | 128 | |
takafuminaka | 3:2ea547dab8a8 | 129 | connectionParams.slaveLatency = 1; |
takafuminaka | 3:2ea547dab8a8 | 130 | led2 = 1; |
takafuminaka | 3:2ea547dab8a8 | 131 | if (ble.gap().updateConnectionParams(params->handle, &connectionParams) != BLE_ERROR_NONE) { |
takafuminaka | 3:2ea547dab8a8 | 132 | DEBUG("failed to update connection paramter\r\n"); |
takafuminaka | 3:2ea547dab8a8 | 133 | } |
takafuminaka | 3:2ea547dab8a8 | 134 | buff_flash_flag = 1; |
takafuminaka | 3:2ea547dab8a8 | 135 | |
takafuminaka | 3:2ea547dab8a8 | 136 | } |
takafuminaka | 3:2ea547dab8a8 | 137 | |
takafuminaka | 3:2ea547dab8a8 | 138 | void onDataWritten(const GattWriteCallbackParams *params) |
takafuminaka | 3:2ea547dab8a8 | 139 | { |
takafuminaka | 3:2ea547dab8a8 | 140 | uint8_t buff[21]; |
takafuminaka | 3:2ea547dab8a8 | 141 | if ((uart != NULL) && (params->handle == uart->getTXCharacteristicHandle())) { |
takafuminaka | 3:2ea547dab8a8 | 142 | uint16_t bytesRead = params->len; |
takafuminaka | 3:2ea547dab8a8 | 143 | DEBUG("received %u bytes\n\r", bytesRead); |
takafuminaka | 3:2ea547dab8a8 | 144 | strncpy((char*)buff,(char*)params->data,bytesRead); |
takafuminaka | 3:2ea547dab8a8 | 145 | // ble.updateCharacteristicValue(uart->getRXCharacteristicHandle(), params->data, bytesRead); |
takafuminaka | 3:2ea547dab8a8 | 146 | ble.updateCharacteristicValue(uart->getRXCharacteristicHandle(), buff, bytesRead); |
takafuminaka | 3:2ea547dab8a8 | 147 | } |
takafuminaka | 3:2ea547dab8a8 | 148 | } |
takafuminaka | 3:2ea547dab8a8 | 149 | |
takafuminaka | 3:2ea547dab8a8 | 150 | #endif // if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 151 | |
takafuminaka | 0:371bcac81ea2 | 152 | void DetectLightning() |
takafuminaka | 0:371bcac81ea2 | 153 | { |
takafuminaka | 0:371bcac81ea2 | 154 | char OriginInt; |
takafuminaka | 0:371bcac81ea2 | 155 | time_t rawtime=rtc.time(); |
takafuminaka | 0:371bcac81ea2 | 156 | struct tm * timeinfo; |
takafuminaka | 0:371bcac81ea2 | 157 | timeinfo = localtime(&rawtime); |
takafuminaka | 3:2ea547dab8a8 | 158 | char date[24],sdate[9]; |
takafuminaka | 0:371bcac81ea2 | 159 | int distance; |
takafuminaka | 0:371bcac81ea2 | 160 | |
takafuminaka | 0:371bcac81ea2 | 161 | strftime(date,sizeof(date),"%H:%M:%S on %m/%d/%G",timeinfo); |
takafuminaka | 3:2ea547dab8a8 | 162 | strftime(sdate,sizeof(sdate),"%H%M%S",timeinfo); |
takafuminaka | 0:371bcac81ea2 | 163 | |
takafuminaka | 0:371bcac81ea2 | 164 | wait_ms(2); //on attend 2ms préconisation constructeur |
takafuminaka | 0:371bcac81ea2 | 165 | OriginInt = Lightning.interruptSource(); |
takafuminaka | 0:371bcac81ea2 | 166 | distance = Lightning.lightningDistanceKm(); |
takafuminaka | 0:371bcac81ea2 | 167 | |
takafuminaka | 1:a4119049dd99 | 168 | if (OriginInt == 1) { |
takafuminaka | 1:a4119049dd99 | 169 | led2 = !led2; |
takafuminaka | 1:a4119049dd99 | 170 | DEBUG("%24s : Noise level too high. %d km\r\n",date,distance); |
takafuminaka | 0:371bcac81ea2 | 171 | } |
takafuminaka | 0:371bcac81ea2 | 172 | if (OriginInt == 4) { |
takafuminaka | 1:a4119049dd99 | 173 | led2 = !led2; |
takafuminaka | 1:a4119049dd99 | 174 | DEBUG("%24s : Disturber detected. %d km\r\n",date,distance); |
takafuminaka | 0:371bcac81ea2 | 175 | } |
takafuminaka | 0:371bcac81ea2 | 176 | if (OriginInt == 8) { |
takafuminaka | 1:a4119049dd99 | 177 | led2 = !led2; |
takafuminaka | 1:a4119049dd99 | 178 | DEBUG("%24s : Lightning interrupt %d km\r\n",date,distance); |
takafuminaka | 0:371bcac81ea2 | 179 | } |
takafuminaka | 0:371bcac81ea2 | 180 | } |
takafuminaka | 0:371bcac81ea2 | 181 | |
takafuminaka | 0:371bcac81ea2 | 182 | |
takafuminaka | 0:371bcac81ea2 | 183 | int main(void) |
takafuminaka | 0:371bcac81ea2 | 184 | { |
takafuminaka | 3:2ea547dab8a8 | 185 | #if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 186 | ble.init(); |
takafuminaka | 3:2ea547dab8a8 | 187 | ble.gap().onDisconnection(disconnectionCallback); |
takafuminaka | 3:2ea547dab8a8 | 188 | ble.gap().onConnection(onConnectionCallback); |
takafuminaka | 3:2ea547dab8a8 | 189 | ble.gattServer().onDataWritten(onDataWritten); |
takafuminaka | 3:2ea547dab8a8 | 190 | ble.gap().getPreferredConnectionParams(&connectionParams); |
takafuminaka | 3:2ea547dab8a8 | 191 | |
takafuminaka | 3:2ea547dab8a8 | 192 | uart = new UARTService(ble); |
takafuminaka | 3:2ea547dab8a8 | 193 | buff_flash_flag = 0; |
takafuminaka | 3:2ea547dab8a8 | 194 | |
takafuminaka | 3:2ea547dab8a8 | 195 | #endif // if NEED_BLE_CONSOLE |
takafuminaka | 3:2ea547dab8a8 | 196 | |
takafuminaka | 3:2ea547dab8a8 | 197 | |
takafuminaka | 1:a4119049dd99 | 198 | led1=0; |
takafuminaka | 1:a4119049dd99 | 199 | led2=0; |
takafuminaka | 0:371bcac81ea2 | 200 | int hz=0; |
takafuminaka | 0:371bcac81ea2 | 201 | |
takafuminaka | 0:371bcac81ea2 | 202 | //initialisations |
takafuminaka | 2:e1e638cbf972 | 203 | wait(1); |
takafuminaka | 1:a4119049dd99 | 204 | DEBUG("reset\r\n"); |
takafuminaka | 0:371bcac81ea2 | 205 | Lightning.reset(); |
takafuminaka | 1:a4119049dd99 | 206 | DEBUG("setTuneCap as 5\r\n"); |
takafuminaka | 0:371bcac81ea2 | 207 | Lightning.setTuneCap(5); // Tuning Parameter |
takafuminaka | 1:a4119049dd99 | 208 | DEBUG("powerup\r\n"); |
takafuminaka | 0:371bcac81ea2 | 209 | Lightning.powerUp(); |
takafuminaka | 2:e1e638cbf972 | 210 | |
takafuminaka | 2:e1e638cbf972 | 211 | DEBUG("set Indoor Mode as 0x0d\r\n"); |
takafuminaka | 2:e1e638cbf972 | 212 | Lightning.registerWrite(AS3935_AFE_GB,0x0d); |
takafuminaka | 2:e1e638cbf972 | 213 | |
takafuminaka | 1:a4119049dd99 | 214 | DEBUG("Auto Calibration Start\r\n"); |
takafuminaka | 0:371bcac81ea2 | 215 | float minerr = 100; |
takafuminaka | 0:371bcac81ea2 | 216 | int fincap = 7; |
takafuminaka | 0:371bcac81ea2 | 217 | for(int i=0;i<16;i++) { |
takafuminaka | 0:371bcac81ea2 | 218 | Lightning.setTuneCap(i); // Tuning Parameter |
takafuminaka | 0:371bcac81ea2 | 219 | hz = Lightning.MeasureLCOFreq(); |
takafuminaka | 0:371bcac81ea2 | 220 | float err = (hz-500000.)/500000.*100.; |
takafuminaka | 1:a4119049dd99 | 221 | DEBUG("%d : hz=%10d Hz (%5.2f%%)\r\n",i,hz,err); |
takafuminaka | 0:371bcac81ea2 | 222 | if ( abs(err) < minerr ) { |
takafuminaka | 0:371bcac81ea2 | 223 | minerr = abs(err); |
takafuminaka | 0:371bcac81ea2 | 224 | fincap = i; |
takafuminaka | 0:371bcac81ea2 | 225 | } |
takafuminaka | 0:371bcac81ea2 | 226 | } |
takafuminaka | 0:371bcac81ea2 | 227 | Lightning.setTuneCap(fincap); // Tuning Parameter |
takafuminaka | 0:371bcac81ea2 | 228 | wait_ms(100); |
takafuminaka | 0:371bcac81ea2 | 229 | hz = Lightning.MeasureLCOFreq(); |
takafuminaka | 0:371bcac81ea2 | 230 | float err = (hz-500000.)/500000.*100.; |
takafuminaka | 1:a4119049dd99 | 231 | DEBUG("Final %d : hz=%10d Hz (%5.2f%%)\r\n",fincap,hz,err); |
takafuminaka | 3:2ea547dab8a8 | 232 | BLEC("%1x:%10dHz:%5.2f:final\n",fincap,hz,err); |
takafuminaka | 0:371bcac81ea2 | 233 | |
takafuminaka | 1:a4119049dd99 | 234 | DEBUG("Auto Calibration finished\r\n"); |
takafuminaka | 0:371bcac81ea2 | 235 | |
takafuminaka | 0:371bcac81ea2 | 236 | // user selectable, any time < 512 seconds is OK |
takafuminaka | 0:371bcac81ea2 | 237 | #define PERIODIC_UPDATE 1 |
takafuminaka | 0:371bcac81ea2 | 238 | Ticker rtc_ticker; |
takafuminaka | 1:a4119049dd99 | 239 | rtc_ticker.attach(&periodic_update, PERIODIC_UPDATE); |
takafuminaka | 0:371bcac81ea2 | 240 | |
takafuminaka | 0:371bcac81ea2 | 241 | time_t initial_time = example_time(); |
takafuminaka | 0:371bcac81ea2 | 242 | rtc.set_time(initial_time); |
takafuminaka | 0:371bcac81ea2 | 243 | |
takafuminaka | 0:371bcac81ea2 | 244 | button1Press.fall(&print_time); // when button1 is pressed, this calls rtc.time() and prints it |
takafuminaka | 0:371bcac81ea2 | 245 | |
takafuminaka | 0:371bcac81ea2 | 246 | IntLightning.rise(&DetectLightning); |
takafuminaka | 0:371bcac81ea2 | 247 | |
takafuminaka | 3:2ea547dab8a8 | 248 | #if NEED_BLE_CONSOLE |
takafuminaka | 1:a4119049dd99 | 249 | /* setup advertising */ |
takafuminaka | 3:2ea547dab8a8 | 250 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
takafuminaka | 3:2ea547dab8a8 | 251 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
takafuminaka | 3:2ea547dab8a8 | 252 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
takafuminaka | 3:2ea547dab8a8 | 253 | DEVICE_NAME, sizeof(DEVICE_NAME) - 1); |
takafuminaka | 3:2ea547dab8a8 | 254 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
takafuminaka | 3:2ea547dab8a8 | 255 | (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
takafuminaka | 1:a4119049dd99 | 256 | |
takafuminaka | 1:a4119049dd99 | 257 | ble.gap().setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ |
takafuminaka | 1:a4119049dd99 | 258 | ble.gap().startAdvertising(); |
takafuminaka | 3:2ea547dab8a8 | 259 | #endif // #if NEED_BLE_CONSOLE |
takafuminaka | 1:a4119049dd99 | 260 | |
takafuminaka | 0:371bcac81ea2 | 261 | while (true) { |
takafuminaka | 3:2ea547dab8a8 | 262 | if ( buff_flash_flag != 0) { |
takafuminaka | 3:2ea547dab8a8 | 263 | wait_ms(4000); |
takafuminaka | 3:2ea547dab8a8 | 264 | BLEC("test1\n"); |
takafuminaka | 3:2ea547dab8a8 | 265 | wait_ms(300); |
takafuminaka | 3:2ea547dab8a8 | 266 | time_t rawtime=rtc.time(); |
takafuminaka | 3:2ea547dab8a8 | 267 | BLEC("%4x:current time\n",rawtime); |
takafuminaka | 3:2ea547dab8a8 | 268 | |
takafuminaka | 3:2ea547dab8a8 | 269 | for(int i=0;i<s_evrecord;i++) { |
takafuminaka | 3:2ea547dab8a8 | 270 | BLEC("%1d:%4x:%1x:%2x\n",i,evrecord[i].time,evrecord[i].event,evrecord[i].distance); |
takafuminaka | 3:2ea547dab8a8 | 271 | wait_ms(300); |
takafuminaka | 3:2ea547dab8a8 | 272 | } |
takafuminaka | 3:2ea547dab8a8 | 273 | BLEC("finished\n"); |
takafuminaka | 1:a4119049dd99 | 274 | |
takafuminaka | 3:2ea547dab8a8 | 275 | buff_flash_flag = 0; |
takafuminaka | 1:a4119049dd99 | 276 | |
takafuminaka | 1:a4119049dd99 | 277 | } else { |
takafuminaka | 3:2ea547dab8a8 | 278 | BLEC("pong\n"); |
takafuminaka | 3:2ea547dab8a8 | 279 | wait(5); |
takafuminaka | 1:a4119049dd99 | 280 | } |
takafuminaka | 0:371bcac81ea2 | 281 | } |
takafuminaka | 0:371bcac81ea2 | 282 | } |
takafuminaka | 1:a4119049dd99 | 283 |