test

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Committer:
gomihgy
Date:
Thu Dec 17 04:02:23 2015 +0000
Revision:
14:81347f8f0bda
Parent:
13:6b3cce9e588b
Child:
15:544e0ce3c1d9
v1.00.004; use micro switch, and unused ticker for led Flickering

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akita11 0:08c8325a21ec 1 #include "mbed.h"
akita11 0:08c8325a21ec 2 #include "io.h"
gomihgy 12:880400fa5c44 3 #include "BLE.h"
gomihgy 9:a7bd5ae66d6d 4 #include "common.h"
akita11 0:08c8325a21ec 5
gomihgy 6:bc960e6fd1ed 6 // BLE
gomihgy 6:bc960e6fd1ed 7 #define INTERVAL_500MSEC (500UL)
gomihgy 6:bc960e6fd1ed 8 #define CONNTIMEOUT_3000MSEC (3000UL)
gomihgy 5:1730064b94bd 9 #define ADV_TIMEOUT (0)
gomihgy 5:1730064b94bd 10 #define DEVICE_NAME "Kitchen Scale"
gomihgy 5:1730064b94bd 11 #define BLE_TXPOWER_4DBM (4)
gomihgy 5:1730064b94bd 12
gomihgy 5:1730064b94bd 13 // Device Information Service (DIS) (20 character limit)
gomihgy 5:1730064b94bd 14 // https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.device_information.xml
gomihgy 6:bc960e6fd1ed 15 #define MANUFACTURER_NAME_STRING "Hacarus" // Manufacturer Name String - shall represent the name of the manufacturer of the device.
gomihgy 6:bc960e6fd1ed 16 #define MODEL_NUMBER_STRING "0001" // Model Number String - shall represent the model number that is assigned by the device vendor.
gomihgy 6:bc960e6fd1ed 17 #define SERIAL_NUMBER_STRING "000780c0ffeef00d" // Serial Number String - shall represent the serial number for a particular instance of the device.
gomihgy 14:81347f8f0bda 18 #define FIRMWARE_REVISION_STRING "v1.00.004@rev0014" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
gomihgy 5:1730064b94bd 19
gomihgy 5:1730064b94bd 20 // Weight Scale Service (Original)
gomihgy 5:1730064b94bd 21 #define UUID_WEIGHT_SCALE_SERVICE (0x181D)
gomihgy 6:bc960e6fd1ed 22
gomihgy 6:bc960e6fd1ed 23 // JoyStick
gomihgy 7:9ebf125e405f 24 #define PUSH_MINTHRESHOLD (0.2)
gomihgy 7:9ebf125e405f 25 #define PUSH_MAXTHRESHOLD (0.6)
gomihgy 14:81347f8f0bda 26 #define PUSH_COUNT (3)
gomihgy 14:81347f8f0bda 27
gomihgy 14:81347f8f0bda 28 #define SW_THRESHOLD (0.5)
gomihgy 14:81347f8f0bda 29 #define SW_SAMPLECOUNT (3)
gomihgy 5:1730064b94bd 30
gomihgy 6:bc960e6fd1ed 31 // Mode
gomihgy 6:bc960e6fd1ed 32 #define MODE_OFF (0) // LED OFF
gomihgy 6:bc960e6fd1ed 33 #define MODE_START (1) // LED OFF -> ON
gomihgy 6:bc960e6fd1ed 34 #define MODE_ON (2) // LED ON
gomihgy 6:bc960e6fd1ed 35 #define MODE_END (3) // LED ON -> OFF
gomihgy 6:bc960e6fd1ed 36
gomihgy 6:bc960e6fd1ed 37 // Led
gomihgy 7:9ebf125e405f 38 #define LED_INTERVAL_NSEC (100000)
gomihgy 6:bc960e6fd1ed 39 #define BRIGHTNESS_ADDVALUE (0.1)
gomihgy 7:9ebf125e405f 40 #define BRIGHTNESS_MINVALUE (0.0)
gomihgy 6:bc960e6fd1ed 41 #define BRIGHTNESS_MAXVALUE (1.0)
gomihgy 6:bc960e6fd1ed 42
gomihgy 6:bc960e6fd1ed 43 // Properties
gomihgy 6:bc960e6fd1ed 44 io io;
gomihgy 6:bc960e6fd1ed 45 Ticker tk;
gomihgy 9:a7bd5ae66d6d 46 uint32_t weight_data;
gomihgy 9:a7bd5ae66d6d 47 float32_t weight = 0.0;
gomihgy 6:bc960e6fd1ed 48 uint32_t scale = 0;
gomihgy 6:bc960e6fd1ed 49 int update_counter = 0;
gomihgy 6:bc960e6fd1ed 50 int push_counter = 0;
gomihgy 14:81347f8f0bda 51 float sw_data[SW_SAMPLECOUNT];
gomihgy 14:81347f8f0bda 52 uint8_t sw_count = 0;
gomihgy 6:bc960e6fd1ed 53 int led_mode = MODE_OFF;
gomihgy 6:bc960e6fd1ed 54 float led_brightness = BRIGHTNESS_MINVALUE;
akita11 4:edd6e262de9e 55
gomihgy 14:81347f8f0bda 56 Timer t;
gomihgy 14:81347f8f0bda 57
akita11 10:95c1e5a218d5 58 // UART for debug
akita11 10:95c1e5a218d5 59
akita11 10:95c1e5a218d5 60 #ifdef UART_DEBUG
akita11 10:95c1e5a218d5 61 Serial pc(P0_9, P0_8);// TX=P0_9
akita11 10:95c1e5a218d5 62 #define UART_BAUD_RATE (9600UL)
akita11 10:95c1e5a218d5 63 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
akita11 10:95c1e5a218d5 64 #else
akita11 10:95c1e5a218d5 65 #define DEBUG(...) {}
akita11 10:95c1e5a218d5 66 #endif
akita11 10:95c1e5a218d5 67
gomihgy 6:bc960e6fd1ed 68 // BLE
gomihgy 12:880400fa5c44 69 BLE ble;
gomihgy 5:1730064b94bd 70 Gap::ConnectionParams_t connectionParams;
gomihgy 5:1730064b94bd 71
gomihgy 5:1730064b94bd 72 /* Complete list of 16-bit Service IDs */
gomihgy 6:bc960e6fd1ed 73 uint16_t uuid16_list[] = {GattService::UUID_DEVICE_INFORMATION_SERVICE};
gomihgy 5:1730064b94bd 74
gomihgy 5:1730064b94bd 75 /* Weight Scale Service */
gomihgy 6:bc960e6fd1ed 76 static const uint8_t UUID_HACARUS_WEIGHT_CHAR[] = {0x00, 0x00, 0x2A, 0x9D, 0x00, 0x01, 0x00, 0x01, 0x00, 'H','a', 'c', 'a', 'r','u', 's'};
gomihgy 9:a7bd5ae66d6d 77 GattCharacteristic WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight_data, sizeof(weight_data), sizeof(weight_data),
gomihgy 6:bc960e6fd1ed 78 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
gomihgy 6:bc960e6fd1ed 79 static const uint8_t UUID_HACARUS_SCALE_CHAR[] = {0x00, 0x00, 0x2A, 0x9E, 0x00, 0x01, 0x00, 0x01, 0x00, 'H','a', 'c', 'a', 'r','u', 's'};
gomihgy 6:bc960e6fd1ed 80 GattCharacteristic WeightScale (UUID(UUID_HACARUS_SCALE_CHAR), (uint8_t *)&scale, sizeof(scale), sizeof(scale),
gomihgy 6:bc960e6fd1ed 81 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE);
gomihgy 6:bc960e6fd1ed 82 GattCharacteristic *Chars[] = {&WeightMeasurement,&WeightScale};
gomihgy 6:bc960e6fd1ed 83 static const uint8_t UUID_HACARUS_WEIGHT_SERVICE[] = {0x00, 0x00, 0x18, 0x1D, 0x00, 0x01, 0x00, 0x01, 0x00, 'H','a', 'c', 'a', 'r','u', 's'};
gomihgy 6:bc960e6fd1ed 84 GattService HWS = GattService(UUID(UUID_HACARUS_WEIGHT_SERVICE), Chars, sizeof(Chars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 85
gomihgy 5:1730064b94bd 86 /* Device Information Service */
gomihgy 5:1730064b94bd 87 GattCharacteristic ManuName(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)&MANUFACTURER_NAME_STRING, sizeof(MANUFACTURER_NAME_STRING) - 1, sizeof(MANUFACTURER_NAME_STRING) - 1,
gomihgy 5:1730064b94bd 88 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 89 GattCharacteristic ModelNum(GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)&MODEL_NUMBER_STRING, sizeof(MODEL_NUMBER_STRING) - 1, sizeof(MODEL_NUMBER_STRING) - 1,
gomihgy 5:1730064b94bd 90 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 91 GattCharacteristic SerialNum(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)&SERIAL_NUMBER_STRING, sizeof(SERIAL_NUMBER_STRING) - 1, sizeof(SERIAL_NUMBER_STRING) - 1,
gomihgy 5:1730064b94bd 92 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 93 GattCharacteristic FWVersion(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)&FIRMWARE_REVISION_STRING, sizeof(FIRMWARE_REVISION_STRING) - 1, sizeof(FIRMWARE_REVISION_STRING) - 1,
gomihgy 5:1730064b94bd 94 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 95 GattCharacteristic *DISChars[] = {&ManuName, &ModelNum, &SerialNum, &FWVersion};
gomihgy 5:1730064b94bd 96 GattService DIS(GattService::UUID_DEVICE_INFORMATION_SERVICE , DISChars, sizeof(DISChars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 97
gomihgy 7:9ebf125e405f 98 /* to confirm joystick */
gomihgy 7:9ebf125e405f 99 bool check_joystick(){
gomihgy 14:81347f8f0bda 100 float sum_data = 0;
gomihgy 6:bc960e6fd1ed 101
gomihgy 14:81347f8f0bda 102 // ジョイスティックXのADC値(0〜1.0換算)が0.5以上ならON、0.5未満ならOFF
gomihgy 14:81347f8f0bda 103 sw_data[sw_count] = io.get_x();
gomihgy 14:81347f8f0bda 104
gomihgy 14:81347f8f0bda 105 if(++sw_count >= SW_SAMPLECOUNT){
gomihgy 14:81347f8f0bda 106 sw_count = 0;
gomihgy 7:9ebf125e405f 107 }
gomihgy 7:9ebf125e405f 108
gomihgy 14:81347f8f0bda 109 for(int count = 0;count < SW_SAMPLECOUNT;count++){
gomihgy 14:81347f8f0bda 110 sum_data += sw_data[count];
akita11 0:08c8325a21ec 111 }
gomihgy 6:bc960e6fd1ed 112
gomihgy 14:81347f8f0bda 113 return ((sum_data / SW_SAMPLECOUNT) >= SW_THRESHOLD);
gomihgy 7:9ebf125e405f 114 }
gomihgy 7:9ebf125e405f 115
gomihgy 9:a7bd5ae66d6d 116 uint32_t quick_ieee11073_from_float(float data)
gomihgy 9:a7bd5ae66d6d 117 {
gomihgy 9:a7bd5ae66d6d 118 uint8_t exponent = 0xFE; //exponent is -2
gomihgy 9:a7bd5ae66d6d 119 uint32_t mantissa = (uint32_t)(data*100);
gomihgy 9:a7bd5ae66d6d 120
gomihgy 9:a7bd5ae66d6d 121 return ( ((uint32_t)exponent) << 24) | mantissa;
gomihgy 9:a7bd5ae66d6d 122 }
gomihgy 9:a7bd5ae66d6d 123
gomihgy 7:9ebf125e405f 124 void ticker_callback()
gomihgy 7:9ebf125e405f 125 {
akita11 10:95c1e5a218d5 126
akita11 10:95c1e5a218d5 127 // pc.printf("!!!\r\n");
akita11 10:95c1e5a218d5 128 /*
akita11 10:95c1e5a218d5 129 while(1){
akita11 10:95c1e5a218d5 130 adc_dat[0] = 0x01; // config reg.
akita11 10:95c1e5a218d5 131 // adc_dat[1] = 0xc4 | (ch << 4); // single conv. & FS=+-2.048V & conv.
akita11 10:95c1e5a218d5 132 adc_dat[1] = 0xc4;
akita11 10:95c1e5a218d5 133 adc_dat[2] = 0x83; // 8SPS & disable comp.
akita11 10:95c1e5a218d5 134 pc.printf("adc_dat: %02x %02x\r\n", adc_dat[0], adc_dat[1]);
akita11 10:95c1e5a218d5 135 // i2c.write(I2C_ADDR_ADS1115, adc_dat, 3);
akita11 10:95c1e5a218d5 136 adc_dat[0] = 0x00;
akita11 10:95c1e5a218d5 137 // i2c.write(I2C_ADDR_ADS1115, adc_dat, 1);
akita11 10:95c1e5a218d5 138 // i2c.read(I2C_ADDR_ADS1115, adc_dat, 2);
akita11 10:95c1e5a218d5 139 uint8_t dh, dl;
akita11 10:95c1e5a218d5 140 dh = adc_dat[0];
akita11 10:95c1e5a218d5 141 dl = adc_dat[1];
akita11 10:95c1e5a218d5 142 pc.printf("%d %d\r\n", dh, dl);
akita11 10:95c1e5a218d5 143 // pc.printf("ADC result=%02x %02x\r\n", dh, dl);
akita11 10:95c1e5a218d5 144 }
akita11 10:95c1e5a218d5 145 */
akita11 10:95c1e5a218d5 146
gomihgy 6:bc960e6fd1ed 147 switch(led_mode){
gomihgy 6:bc960e6fd1ed 148 case MODE_OFF:
gomihgy 14:81347f8f0bda 149 if(check_joystick()){
gomihgy 14:81347f8f0bda 150 // io.display_value = 0;
gomihgy 6:bc960e6fd1ed 151 led_mode = MODE_START;
gomihgy 14:81347f8f0bda 152 }
gomihgy 6:bc960e6fd1ed 153 break;
gomihgy 6:bc960e6fd1ed 154 case MODE_START:
gomihgy 6:bc960e6fd1ed 155 led_brightness += BRIGHTNESS_ADDVALUE;
gomihgy 12:880400fa5c44 156 io.display(led_brightness);
gomihgy 6:bc960e6fd1ed 157 if(led_brightness >= BRIGHTNESS_MAXVALUE){
gomihgy 14:81347f8f0bda 158 update_counter = 0;
gomihgy 6:bc960e6fd1ed 159 led_mode = MODE_ON;
gomihgy 6:bc960e6fd1ed 160 ble.startAdvertising();
gomihgy 6:bc960e6fd1ed 161 }
gomihgy 6:bc960e6fd1ed 162 break;
gomihgy 6:bc960e6fd1ed 163 case MODE_ON:
gomihgy 14:81347f8f0bda 164 if(!check_joystick()){
gomihgy 8:32be16b1eaf2 165 led_mode = MODE_END;
gomihgy 6:bc960e6fd1ed 166 if(ble.getGapState().connected){
gomihgy 6:bc960e6fd1ed 167 ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
gomihgy 8:32be16b1eaf2 168 }else{
gomihgy 8:32be16b1eaf2 169 ble.stopAdvertising();
gomihgy 6:bc960e6fd1ed 170 }
gomihgy 14:81347f8f0bda 171 return;
gomihgy 14:81347f8f0bda 172 }
gomihgy 14:81347f8f0bda 173 //io.analog_pow(1); // turn analog power on
gomihgy 14:81347f8f0bda 174 //wait_ms(1);
gomihgy 14:81347f8f0bda 175 weight = io.get_weight() * 9999.0;
gomihgy 14:81347f8f0bda 176 io.display_value = (uint16_t)weight; // dummy display
gomihgy 14:81347f8f0bda 177 //io.analog_pow(0); // turn analog power off
gomihgy 14:81347f8f0bda 178
gomihgy 14:81347f8f0bda 179 if(++update_counter >= 5){
gomihgy 14:81347f8f0bda 180 weight_data = quick_ieee11073_from_float(weight);
gomihgy 14:81347f8f0bda 181 ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
gomihgy 14:81347f8f0bda 182 (uint8_t *)&weight_data,
gomihgy 14:81347f8f0bda 183 sizeof(weight_data));
gomihgy 6:bc960e6fd1ed 184 update_counter = 0;
gomihgy 6:bc960e6fd1ed 185 }
gomihgy 14:81347f8f0bda 186
gomihgy 6:bc960e6fd1ed 187 break;
gomihgy 6:bc960e6fd1ed 188 case MODE_END:
gomihgy 6:bc960e6fd1ed 189 led_brightness -= BRIGHTNESS_ADDVALUE;
gomihgy 12:880400fa5c44 190 io.display(led_brightness);
gomihgy 6:bc960e6fd1ed 191 if(led_brightness <= BRIGHTNESS_MINVALUE){
gomihgy 6:bc960e6fd1ed 192 led_mode = MODE_OFF;
gomihgy 6:bc960e6fd1ed 193 }
gomihgy 6:bc960e6fd1ed 194 break;
akita11 0:08c8325a21ec 195 }
akita11 0:08c8325a21ec 196 }
akita11 0:08c8325a21ec 197
gomihgy 5:1730064b94bd 198 /*
gomihgy 5:1730064b94bd 199 * BLE CallBacks
gomihgy 5:1730064b94bd 200 */
gomihgy 12:880400fa5c44 201 void BLEConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 202 {
gomihgy 12:880400fa5c44 203 ble.updateConnectionParams(params->handle, params->connectionParams);
gomihgy 5:1730064b94bd 204 }
gomihgy 5:1730064b94bd 205
gomihgy 12:880400fa5c44 206 void BLEDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 207 {
gomihgy 6:bc960e6fd1ed 208 if(led_mode == MODE_ON){
gomihgy 6:bc960e6fd1ed 209 ble.startAdvertising();
gomihgy 5:1730064b94bd 210 }
gomihgy 5:1730064b94bd 211 }
gomihgy 5:1730064b94bd 212
gomihgy 12:880400fa5c44 213 void BLERadioNotificationCallback(bool radio_active)
gomihgy 12:880400fa5c44 214 {
gomihgy 12:880400fa5c44 215 if (radio_active == false)
gomihgy 12:880400fa5c44 216 {
gomihgy 12:880400fa5c44 217 if(led_mode == MODE_ON){
gomihgy 12:880400fa5c44 218 }
gomihgy 12:880400fa5c44 219 }
gomihgy 12:880400fa5c44 220 }
gomihgy 12:880400fa5c44 221
gomihgy 5:1730064b94bd 222 void BleInitialize(void){
gomihgy 5:1730064b94bd 223
gomihgy 6:bc960e6fd1ed 224 uint8_t advertiseServiceID[16];
gomihgy 6:bc960e6fd1ed 225
gomihgy 5:1730064b94bd 226 // Initialize
gomihgy 5:1730064b94bd 227 ble.init();
gomihgy 5:1730064b94bd 228
gomihgy 5:1730064b94bd 229 // Event Set
gomihgy 5:1730064b94bd 230 ble.onConnection(&BLEConnectionCallback);
gomihgy 5:1730064b94bd 231 ble.onDisconnection(&BLEDisconnectionCallback);
gomihgy 12:880400fa5c44 232 ble.onRadioNotification(&BLERadioNotificationCallback);
gomihgy 5:1730064b94bd 233
gomihgy 5:1730064b94bd 234 ble.getPreferredConnectionParams(&connectionParams);
gomihgy 6:bc960e6fd1ed 235 connectionParams.maxConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 236 connectionParams.minConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 237 connectionParams.connectionSupervisionTimeout = CONNTIMEOUT_3000MSEC;
gomihgy 6:bc960e6fd1ed 238 connectionParams.slaveLatency = 2;
gomihgy 5:1730064b94bd 239 ble.setPreferredConnectionParams(&connectionParams);
gomihgy 5:1730064b94bd 240
gomihgy 5:1730064b94bd 241 ble.setTxPower(BLE_TXPOWER_4DBM);
gomihgy 6:bc960e6fd1ed 242
gomihgy 6:bc960e6fd1ed 243 for(int i=0; i<16; i++){
gomihgy 6:bc960e6fd1ed 244 advertiseServiceID[i] = UUID_HACARUS_WEIGHT_SERVICE[16 - 1 - i];
gomihgy 6:bc960e6fd1ed 245 }
gomihgy 6:bc960e6fd1ed 246
gomihgy 5:1730064b94bd 247 ble.accumulateAdvertisingPayload((GapAdvertisingData::Flags)(GapAdvertisingData::LE_GENERAL_DISCOVERABLE | GapAdvertisingData::BREDR_NOT_SUPPORTED));
gomihgy 5:1730064b94bd 248 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
gomihgy 5:1730064b94bd 249 (const uint8_t *)DEVICE_NAME,
gomihgy 5:1730064b94bd 250 strlen(DEVICE_NAME));
gomihgy 5:1730064b94bd 251 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
gomihgy 6:bc960e6fd1ed 252 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
gomihgy 6:bc960e6fd1ed 253 (const uint8_t *)advertiseServiceID, sizeof(advertiseServiceID));
gomihgy 6:bc960e6fd1ed 254
gomihgy 12:880400fa5c44 255 ble.setAdvertisingInterval(INTERVAL_500MSEC);
gomihgy 5:1730064b94bd 256 ble.setAdvertisingTimeout(ADV_TIMEOUT); /* 0 is disable the advertising timeout. */
gomihgy 5:1730064b94bd 257
gomihgy 6:bc960e6fd1ed 258 ble.addService(HWS);
gomihgy 5:1730064b94bd 259 ble.addService(DIS);
gomihgy 5:1730064b94bd 260 }
gomihgy 5:1730064b94bd 261
akita11 0:08c8325a21ec 262 int main()
akita11 0:08c8325a21ec 263 {
gomihgy 5:1730064b94bd 264 #ifdef UART_DEBUG
gomihgy 5:1730064b94bd 265 pc.baud(UART_BAUD_RATE);
gomihgy 5:1730064b94bd 266 #endif
akita11 10:95c1e5a218d5 267 #ifndef PCB_VER1
akita11 10:95c1e5a218d5 268 // set XTAL=32MHz for TaiyoYuden's module
akita11 11:be439189e3f7 269 // is moved to mbed-src/targets/cmsis/TARGET_NORDIC/TARGET_MCU_NRF51822/system_nrf51.c
akita11 11:be439189e3f7 270 DEBUG("UICR->XTALFREQ=%x\r\n", NRF_UICR->XTALFREQ); // this should be 0xffffff00, not 0xffffffff
akita11 10:95c1e5a218d5 271 #endif
akita11 10:95c1e5a218d5 272
akita11 10:95c1e5a218d5 273 BleInitialize();
gomihgy 5:1730064b94bd 274
gomihgy 14:81347f8f0bda 275 // SW Initialize
gomihgy 14:81347f8f0bda 276 for(int count = 0;count < SW_SAMPLECOUNT;count++){
gomihgy 14:81347f8f0bda 277 sw_data[count] = 0;
gomihgy 14:81347f8f0bda 278 }
gomihgy 14:81347f8f0bda 279
gomihgy 14:81347f8f0bda 280
akita11 10:95c1e5a218d5 281 /*
gomihgy 14:81347f8f0bda 282 //tk.attach_us(&ticker_callback, LED_INTERVAL_NSEC);
gomihgy 12:880400fa5c44 283 if(NRF_UICR->XTALFREQ == 0xFFFFFF00){
gomihgy 12:880400fa5c44 284 io.display_value = 3232;
gomihgy 12:880400fa5c44 285 }else if(NRF_UICR->XTALFREQ == 0xFFFFFFFF){
gomihgy 12:880400fa5c44 286 io.display_value = 1616;
gomihgy 12:880400fa5c44 287 }
gomihgy 14:81347f8f0bda 288 */
gomihgy 12:880400fa5c44 289
akita11 11:be439189e3f7 290 io.analog_pow(1);
gomihgy 14:81347f8f0bda 291
gomihgy 6:bc960e6fd1ed 292 for (;; ) {
gomihgy 14:81347f8f0bda 293 // 100msec waitForEvent
gomihgy 14:81347f8f0bda 294 t.reset();
gomihgy 14:81347f8f0bda 295 t.start();
gomihgy 14:81347f8f0bda 296 while(t.read_ms() < 100){
gomihgy 14:81347f8f0bda 297 ble.waitForEvent();
gomihgy 14:81347f8f0bda 298 }
gomihgy 14:81347f8f0bda 299
gomihgy 14:81347f8f0bda 300 // ticker処理
gomihgy 14:81347f8f0bda 301 switch(led_mode){
gomihgy 14:81347f8f0bda 302 case MODE_OFF:
gomihgy 14:81347f8f0bda 303 if(check_joystick()){
gomihgy 14:81347f8f0bda 304 led_mode = MODE_START;
gomihgy 14:81347f8f0bda 305 }
gomihgy 14:81347f8f0bda 306 break;
gomihgy 14:81347f8f0bda 307 case MODE_START:
gomihgy 14:81347f8f0bda 308 led_brightness += BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 309 io.display(led_brightness);
gomihgy 14:81347f8f0bda 310 if(led_brightness >= BRIGHTNESS_MAXVALUE){
gomihgy 14:81347f8f0bda 311 update_counter = 0;
gomihgy 14:81347f8f0bda 312 led_mode = MODE_ON;
gomihgy 14:81347f8f0bda 313 ble.startAdvertising();
gomihgy 14:81347f8f0bda 314 }
gomihgy 14:81347f8f0bda 315 break;
gomihgy 14:81347f8f0bda 316 case MODE_ON:
gomihgy 14:81347f8f0bda 317 if(!check_joystick()){
gomihgy 14:81347f8f0bda 318 led_mode = MODE_END;
gomihgy 14:81347f8f0bda 319 if(ble.getGapState().connected){
gomihgy 14:81347f8f0bda 320 ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
gomihgy 14:81347f8f0bda 321 }else{
gomihgy 14:81347f8f0bda 322 ble.stopAdvertising();
gomihgy 14:81347f8f0bda 323 }
gomihgy 14:81347f8f0bda 324 }else{
gomihgy 14:81347f8f0bda 325 weight = io.get_weight() * 9999.0;
gomihgy 14:81347f8f0bda 326 io.display_value = (uint16_t)weight; // dummy display
gomihgy 14:81347f8f0bda 327 if(++update_counter >= 5){
gomihgy 14:81347f8f0bda 328 weight_data = quick_ieee11073_from_float(weight);
gomihgy 14:81347f8f0bda 329 ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
gomihgy 14:81347f8f0bda 330 (uint8_t *)&weight_data,
gomihgy 14:81347f8f0bda 331 sizeof(weight_data));
gomihgy 14:81347f8f0bda 332 update_counter = 0;
gomihgy 14:81347f8f0bda 333 }
gomihgy 14:81347f8f0bda 334 }
gomihgy 14:81347f8f0bda 335 break;
gomihgy 14:81347f8f0bda 336 case MODE_END:
gomihgy 14:81347f8f0bda 337 led_brightness -= BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 338 io.display(led_brightness);
gomihgy 14:81347f8f0bda 339 if(led_brightness <= BRIGHTNESS_MINVALUE){
gomihgy 14:81347f8f0bda 340 led_mode = MODE_OFF;
gomihgy 14:81347f8f0bda 341 }
gomihgy 14:81347f8f0bda 342 break;
gomihgy 14:81347f8f0bda 343 }
akita11 0:08c8325a21ec 344 }
akita11 0:08c8325a21ec 345 }
gomihgy 6:bc960e6fd1ed 346
akita11 0:08c8325a21ec 347