test

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Committer:
masaaki_makabe
Date:
Mon May 23 05:15:58 2016 +0000
Branch:
KS3
Revision:
30:f67850cc3cfe
Parent:
29:09406be35ef4
Child:
31:b5e19d153db4
io??????????????????main.cpp??????????????????

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 23:ca1806081f0c 4 #include "DFUService.h"
gomihgy 9:a7bd5ae66d6d 5 #include "common.h"
akita11 19:05526fe9365e 6 #include <stdlib.h>
masaaki_makabe 30:f67850cc3cfe 7 #include <arm_math.h>
akita11 0:08c8325a21ec 8
akita11 27:8c3c29b3f704 9 #define DISPLAY_DEMO // display random number for demo & LED check
akita11 27:8c3c29b3f704 10
gomihgy 6:bc960e6fd1ed 11 // BLE
gomihgy 6:bc960e6fd1ed 12 #define INTERVAL_500MSEC (500UL)
gomihgy 6:bc960e6fd1ed 13 #define CONNTIMEOUT_3000MSEC (3000UL)
gomihgy 5:1730064b94bd 14 #define ADV_TIMEOUT (0)
gomihgy 5:1730064b94bd 15 #define DEVICE_NAME "Kitchen Scale"
gomihgy 5:1730064b94bd 16 #define BLE_TXPOWER_4DBM (4)
gomihgy 5:1730064b94bd 17
gomihgy 5:1730064b94bd 18 // Device Information Service (DIS) (20 character limit)
gomihgy 5:1730064b94bd 19 // https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.device_information.xml
gomihgy 6:bc960e6fd1ed 20 #define MANUFACTURER_NAME_STRING "Hacarus" // Manufacturer Name String - shall represent the name of the manufacturer of the device.
gomihgy 6:bc960e6fd1ed 21 #define MODEL_NUMBER_STRING "0001" // Model Number String - shall represent the model number that is assigned by the device vendor.
gomihgy 6:bc960e6fd1ed 22 #define SERIAL_NUMBER_STRING "000780c0ffeef00d" // Serial Number String - shall represent the serial number for a particular instance of the device.
gomihgy 28:d8c652994988 23 #define FIRMWARE_REVISION_STRING "v1.00.009@rev0028" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
gomihgy 5:1730064b94bd 24
gomihgy 5:1730064b94bd 25 // Weight Scale Service (Original)
gomihgy 5:1730064b94bd 26 #define UUID_WEIGHT_SCALE_SERVICE (0x181D)
gomihgy 6:bc960e6fd1ed 27
akita11 20:c3fadeef5842 28 #if defined(PCB_VER1) || defined(PCB_VER2)
gomihgy 16:fc66feb533d0 29 // Switch
gomihgy 14:81347f8f0bda 30 #define SW_THRESHOLD (0.5)
gomihgy 14:81347f8f0bda 31 #define SW_SAMPLECOUNT (3)
akita11 20:c3fadeef5842 32 #endif
gomihgy 5:1730064b94bd 33
gomihgy 6:bc960e6fd1ed 34 // Mode
gomihgy 6:bc960e6fd1ed 35 #define MODE_OFF (0) // LED OFF
gomihgy 6:bc960e6fd1ed 36 #define MODE_START (1) // LED OFF -> ON
gomihgy 6:bc960e6fd1ed 37 #define MODE_ON (2) // LED ON
gomihgy 6:bc960e6fd1ed 38 #define MODE_END (3) // LED ON -> OFF
gomihgy 6:bc960e6fd1ed 39
gomihgy 6:bc960e6fd1ed 40 // Led
gomihgy 16:fc66feb533d0 41 #define LED_INTERVAL_MSEC (100)
gomihgy 6:bc960e6fd1ed 42 #define BRIGHTNESS_ADDVALUE (0.1)
gomihgy 7:9ebf125e405f 43 #define BRIGHTNESS_MINVALUE (0.0)
gomihgy 6:bc960e6fd1ed 44 #define BRIGHTNESS_MAXVALUE (1.0)
gomihgy 6:bc960e6fd1ed 45
gomihgy 6:bc960e6fd1ed 46 // Properties
akita11 25:da723b86c60b 47 //io io;
akita11 27:8c3c29b3f704 48 io io(P0_15, P0_13); // HX711's CLK & DAT
akita11 27:8c3c29b3f704 49 //io(P0_5, P0_4); // HX711's CLK & DAT for BLEnano debug
gomihgy 9:a7bd5ae66d6d 50 uint32_t weight_data;
gomihgy 9:a7bd5ae66d6d 51 float32_t weight = 0.0;
gomihgy 6:bc960e6fd1ed 52 uint32_t scale = 0;
gomihgy 6:bc960e6fd1ed 53 int update_counter = 0;
akita11 20:c3fadeef5842 54 #if defined(PCB_VER1) || defined(PCB_VER2)
gomihgy 14:81347f8f0bda 55 float sw_data[SW_SAMPLECOUNT];
gomihgy 14:81347f8f0bda 56 uint8_t sw_count = 0;
akita11 20:c3fadeef5842 57 #endif
gomihgy 6:bc960e6fd1ed 58 int led_mode = MODE_OFF;
gomihgy 6:bc960e6fd1ed 59 float led_brightness = BRIGHTNESS_MINVALUE;
akita11 4:edd6e262de9e 60
akita11 10:95c1e5a218d5 61 #ifdef UART_DEBUG
akita11 20:c3fadeef5842 62 #if defined(PCB_VER1) || defined(PCB_VER2)
akita11 10:95c1e5a218d5 63 Serial pc(P0_9, P0_8);// TX=P0_9
akita11 20:c3fadeef5842 64 #else
akita11 20:c3fadeef5842 65 Serial pc(P0_9, P0_11);// TX=P0_9
akita11 20:c3fadeef5842 66 #endif
akita11 10:95c1e5a218d5 67 #define UART_BAUD_RATE (9600UL)
akita11 10:95c1e5a218d5 68 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
akita11 10:95c1e5a218d5 69 #else
akita11 10:95c1e5a218d5 70 #define DEBUG(...) {}
akita11 10:95c1e5a218d5 71 #endif
akita11 10:95c1e5a218d5 72
akita11 20:c3fadeef5842 73 Timer t;
akita11 20:c3fadeef5842 74
akita11 20:c3fadeef5842 75 // BLE
gomihgy 12:880400fa5c44 76 BLE ble;
gomihgy 5:1730064b94bd 77 Gap::ConnectionParams_t connectionParams;
gomihgy 5:1730064b94bd 78
gomihgy 5:1730064b94bd 79 /* Complete list of 16-bit Service IDs */
gomihgy 6:bc960e6fd1ed 80 uint16_t uuid16_list[] = {GattService::UUID_DEVICE_INFORMATION_SERVICE};
gomihgy 5:1730064b94bd 81
gomihgy 5:1730064b94bd 82 /* Weight Scale Service */
gomihgy 6:bc960e6fd1ed 83 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 84 GattCharacteristic WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight_data, sizeof(weight_data), sizeof(weight_data),
akita11 20:c3fadeef5842 85 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
gomihgy 6:bc960e6fd1ed 86 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 87 GattCharacteristic WeightScale (UUID(UUID_HACARUS_SCALE_CHAR), (uint8_t *)&scale, sizeof(scale), sizeof(scale),
akita11 20:c3fadeef5842 88 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE);
gomihgy 6:bc960e6fd1ed 89 GattCharacteristic *Chars[] = {&WeightMeasurement,&WeightScale};
gomihgy 6:bc960e6fd1ed 90 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 91 GattService HWS = GattService(UUID(UUID_HACARUS_WEIGHT_SERVICE), Chars, sizeof(Chars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 92
gomihgy 5:1730064b94bd 93 /* Device Information Service */
gomihgy 5:1730064b94bd 94 GattCharacteristic ManuName(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)&MANUFACTURER_NAME_STRING, sizeof(MANUFACTURER_NAME_STRING) - 1, sizeof(MANUFACTURER_NAME_STRING) - 1,
akita11 20:c3fadeef5842 95 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 96 GattCharacteristic ModelNum(GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)&MODEL_NUMBER_STRING, sizeof(MODEL_NUMBER_STRING) - 1, sizeof(MODEL_NUMBER_STRING) - 1,
akita11 20:c3fadeef5842 97 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 98 GattCharacteristic SerialNum(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)&SERIAL_NUMBER_STRING, sizeof(SERIAL_NUMBER_STRING) - 1, sizeof(SERIAL_NUMBER_STRING) - 1,
akita11 20:c3fadeef5842 99 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 100 GattCharacteristic FWVersion(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)&FIRMWARE_REVISION_STRING, sizeof(FIRMWARE_REVISION_STRING) - 1, sizeof(FIRMWARE_REVISION_STRING) - 1,
akita11 20:c3fadeef5842 101 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 102 GattCharacteristic *DISChars[] = {&ManuName, &ModelNum, &SerialNum, &FWVersion};
gomihgy 5:1730064b94bd 103 GattService DIS(GattService::UUID_DEVICE_INFORMATION_SERVICE , DISChars, sizeof(DISChars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 104
akita11 20:c3fadeef5842 105 #ifdef PCB_VER1
akita11 20:c3fadeef5842 106 bool check_joystick()
akita11 20:c3fadeef5842 107 {
gomihgy 14:81347f8f0bda 108 float sum_data = 0;
akita11 20:c3fadeef5842 109
gomihgy 14:81347f8f0bda 110 sw_data[sw_count] = io.get_x();
akita11 20:c3fadeef5842 111
akita11 20:c3fadeef5842 112 if(++sw_count >= SW_SAMPLECOUNT) {
gomihgy 14:81347f8f0bda 113 sw_count = 0;
gomihgy 7:9ebf125e405f 114 }
akita11 20:c3fadeef5842 115
akita11 20:c3fadeef5842 116 for(int count = 0; count < SW_SAMPLECOUNT; count++) {
gomihgy 14:81347f8f0bda 117 sum_data += sw_data[count];
akita11 0:08c8325a21ec 118 }
akita11 20:c3fadeef5842 119
gomihgy 14:81347f8f0bda 120 return ((sum_data / SW_SAMPLECOUNT) >= SW_THRESHOLD);
gomihgy 7:9ebf125e405f 121 }
akita11 20:c3fadeef5842 122 #endif
gomihgy 7:9ebf125e405f 123
gomihgy 9:a7bd5ae66d6d 124 uint32_t quick_ieee11073_from_float(float data)
gomihgy 9:a7bd5ae66d6d 125 {
gomihgy 9:a7bd5ae66d6d 126 uint8_t exponent = 0xFE; //exponent is -2
gomihgy 9:a7bd5ae66d6d 127 uint32_t mantissa = (uint32_t)(data*100);
akita11 20:c3fadeef5842 128
gomihgy 9:a7bd5ae66d6d 129 return ( ((uint32_t)exponent) << 24) | mantissa;
gomihgy 9:a7bd5ae66d6d 130 }
gomihgy 9:a7bd5ae66d6d 131
akita11 20:c3fadeef5842 132 #if defined(PCB_VER1) || defined(PCB_VER2)
akita11 20:c3fadeef5842 133 void SWInit(void)
akita11 20:c3fadeef5842 134 {
gomihgy 16:fc66feb533d0 135 // SW Initialize
akita11 20:c3fadeef5842 136 for(int count = 0; count < SW_SAMPLECOUNT; count++) {
gomihgy 16:fc66feb533d0 137 sw_data[count] = 0;
gomihgy 16:fc66feb533d0 138 }
gomihgy 16:fc66feb533d0 139 }
akita11 20:c3fadeef5842 140 #endif
akita11 10:95c1e5a218d5 141
akita11 20:c3fadeef5842 142 void AppInit(void)
akita11 20:c3fadeef5842 143 {
akita11 20:c3fadeef5842 144
akita11 20:c3fadeef5842 145 #if defined(PCB_VER1) || defined(PCB_VER2)
gomihgy 16:fc66feb533d0 146 SWInit();
akita11 20:c3fadeef5842 147 #endif
gomihgy 16:fc66feb533d0 148 io.analog_pow(1);
akita11 20:c3fadeef5842 149
akita11 21:ab5b55d1947d 150 #ifdef PCB_VER3
akita11 21:ab5b55d1947d 151 // check XTALFREQ for TaiyoYuden module in PCB_VER3
gomihgy 28:d8c652994988 152 /*
gomihgy 28:d8c652994988 153 if(NRF_UICR->XTALFREQ == 0xFFFFFF00){
gomihgy 28:d8c652994988 154 io.display_value = 3232;
gomihgy 28:d8c652994988 155 }else if(NRF_UICR->XTALFREQ == 0xFFFFFFFF){
gomihgy 28:d8c652994988 156 io.display_value = 1616;
gomihgy 28:d8c652994988 157 }
gomihgy 28:d8c652994988 158 */
akita11 21:ab5b55d1947d 159 #endif
akita11 0:08c8325a21ec 160 }
akita11 0:08c8325a21ec 161
gomihgy 5:1730064b94bd 162 /*
gomihgy 5:1730064b94bd 163 * BLE CallBacks
gomihgy 5:1730064b94bd 164 */
gomihgy 12:880400fa5c44 165 void BLEConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 166 {
akita11 20:c3fadeef5842 167 ble.updateConnectionParams(params->handle, params->connectionParams);
gomihgy 5:1730064b94bd 168 }
gomihgy 5:1730064b94bd 169
gomihgy 12:880400fa5c44 170 void BLEDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 171 {
akita11 20:c3fadeef5842 172 if(led_mode == MODE_ON) {
gomihgy 6:bc960e6fd1ed 173 ble.startAdvertising();
gomihgy 5:1730064b94bd 174 }
gomihgy 5:1730064b94bd 175 }
gomihgy 5:1730064b94bd 176
gomihgy 12:880400fa5c44 177 void BLERadioNotificationCallback(bool radio_active)
gomihgy 12:880400fa5c44 178 {
akita11 20:c3fadeef5842 179 if (radio_active == false) {
akita11 20:c3fadeef5842 180 if(led_mode == MODE_ON) {
gomihgy 12:880400fa5c44 181 }
gomihgy 12:880400fa5c44 182 }
gomihgy 12:880400fa5c44 183 }
gomihgy 12:880400fa5c44 184
akita11 20:c3fadeef5842 185 void BleInitialize(void)
akita11 20:c3fadeef5842 186 {
akita11 20:c3fadeef5842 187
gomihgy 6:bc960e6fd1ed 188 uint8_t advertiseServiceID[16];
akita11 20:c3fadeef5842 189
gomihgy 5:1730064b94bd 190 // Initialize
gomihgy 5:1730064b94bd 191 ble.init();
akita11 20:c3fadeef5842 192
gomihgy 5:1730064b94bd 193 // Event Set
gomihgy 5:1730064b94bd 194 ble.onConnection(&BLEConnectionCallback);
gomihgy 5:1730064b94bd 195 ble.onDisconnection(&BLEDisconnectionCallback);
gomihgy 12:880400fa5c44 196 ble.onRadioNotification(&BLERadioNotificationCallback);
akita11 20:c3fadeef5842 197
gomihgy 5:1730064b94bd 198 ble.getPreferredConnectionParams(&connectionParams);
gomihgy 6:bc960e6fd1ed 199 connectionParams.maxConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 200 connectionParams.minConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 201 connectionParams.connectionSupervisionTimeout = CONNTIMEOUT_3000MSEC;
gomihgy 6:bc960e6fd1ed 202 connectionParams.slaveLatency = 2;
gomihgy 5:1730064b94bd 203 ble.setPreferredConnectionParams(&connectionParams);
akita11 20:c3fadeef5842 204
gomihgy 5:1730064b94bd 205 ble.setTxPower(BLE_TXPOWER_4DBM);
akita11 20:c3fadeef5842 206
akita11 20:c3fadeef5842 207 for(int i=0; i<16; i++) {
gomihgy 6:bc960e6fd1ed 208 advertiseServiceID[i] = UUID_HACARUS_WEIGHT_SERVICE[16 - 1 - i];
gomihgy 6:bc960e6fd1ed 209 }
gomihgy 6:bc960e6fd1ed 210
gomihgy 5:1730064b94bd 211 ble.accumulateAdvertisingPayload((GapAdvertisingData::Flags)(GapAdvertisingData::LE_GENERAL_DISCOVERABLE | GapAdvertisingData::BREDR_NOT_SUPPORTED));
gomihgy 5:1730064b94bd 212 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
akita11 20:c3fadeef5842 213 (const uint8_t *)DEVICE_NAME,
akita11 20:c3fadeef5842 214 strlen(DEVICE_NAME));
gomihgy 5:1730064b94bd 215 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
gomihgy 6:bc960e6fd1ed 216 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
gomihgy 6:bc960e6fd1ed 217 (const uint8_t *)advertiseServiceID, sizeof(advertiseServiceID));
akita11 20:c3fadeef5842 218
gomihgy 12:880400fa5c44 219 ble.setAdvertisingInterval(INTERVAL_500MSEC);
gomihgy 5:1730064b94bd 220 ble.setAdvertisingTimeout(ADV_TIMEOUT); /* 0 is disable the advertising timeout. */
akita11 20:c3fadeef5842 221
gomihgy 6:bc960e6fd1ed 222 ble.addService(HWS);
gomihgy 5:1730064b94bd 223 ble.addService(DIS);
gomihgy 23:ca1806081f0c 224 DFUService dfu(ble);
gomihgy 5:1730064b94bd 225 }
gomihgy 5:1730064b94bd 226
masaaki_makabe 29:09406be35ef4 227 //DigitalOut _reg_ps(P0_1, 1); // 1=normal, 0=power_save
masaaki_makabe 29:09406be35ef4 228 //DigitalOut _adc_rate(P0_6, 1); // 0=10Hz, 1=80Hz (HX711's RATE pin)
masaaki_makabe 29:09406be35ef4 229
akita11 0:08c8325a21ec 230 int main()
akita11 0:08c8325a21ec 231 {
akita11 24:c6ef55535900 232 float weight_s;
akita11 24:c6ef55535900 233 int Navg = 5;
akita11 24:c6ef55535900 234 int sample = 0;
gomihgy 5:1730064b94bd 235 #ifdef UART_DEBUG
gomihgy 5:1730064b94bd 236 pc.baud(UART_BAUD_RATE);
masaaki_makabe 29:09406be35ef4 237 // for checking SPI configuration (SPI1 is used_)
masaaki_makabe 29:09406be35ef4 238 // pc.printf("SPI->PSELSCK = %x\r\n", NRF_SPI0->PSELSCK); // will be 15 (P0_15)
masaaki_makabe 29:09406be35ef4 239 // pc.printf("SPI->PSELMISO = %x\r\n", NRF_SPI0->PSELMISO); // will be 13 (P0_13)
masaaki_makabe 29:09406be35ef4 240 // pc.printf("SPI->PSELMOSI = %x\r\n", NRF_SPI0->PSELMOSI); // will be 14 (P0_14): dummy
masaaki_makabe 29:09406be35ef4 241 // pc.printf("SPI->PSELSCK = %x\r\n", NRF_SPI1->PSELSCK); // will be 15 (P0_15)
masaaki_makabe 29:09406be35ef4 242 // pc.printf("SPI->PSELMISO = %x\r\n", NRF_SPI1->PSELMISO); // will be 13 (P0_13)
masaaki_makabe 29:09406be35ef4 243 // pc.printf("SPI->PSELMOSI = %x\r\n", NRF_SPI1->PSELMOSI); // will be 14 (P0_14): dummy
gomihgy 5:1730064b94bd 244 #endif
akita11 21:ab5b55d1947d 245 #ifdef PCB_VER3
akita11 10:95c1e5a218d5 246 // set XTAL=32MHz for TaiyoYuden's module
akita11 11:be439189e3f7 247 // is moved to mbed-src/targets/cmsis/TARGET_NORDIC/TARGET_MCU_NRF51822/system_nrf51.c
akita11 11:be439189e3f7 248 DEBUG("UICR->XTALFREQ=%x\r\n", NRF_UICR->XTALFREQ); // this should be 0xffffff00, not 0xffffffff
akita11 10:95c1e5a218d5 249 #endif
akita11 10:95c1e5a218d5 250
akita11 10:95c1e5a218d5 251 BleInitialize();
gomihgy 16:fc66feb533d0 252 AppInit();
gomihgy 28:d8c652994988 253
akita11 20:c3fadeef5842 254 led_mode = MODE_OFF;
akita11 27:8c3c29b3f704 255 #ifdef DISPLAY_DEMO
akita11 27:8c3c29b3f704 256 uint16_t d = 0;
akita11 27:8c3c29b3f704 257 uint8_t demo_count = 0;
akita11 27:8c3c29b3f704 258 led_mode = MODE_START; // for debug mode
akita11 27:8c3c29b3f704 259 #endif
gomihgy 6:bc960e6fd1ed 260 for (;; ) {
gomihgy 14:81347f8f0bda 261 // 100msec waitForEvent
gomihgy 14:81347f8f0bda 262 t.reset();
akita11 20:c3fadeef5842 263 while(t.read_ms() < LED_INTERVAL_MSEC) {
gomihgy 16:fc66feb533d0 264 t.start();
gomihgy 14:81347f8f0bda 265 ble.waitForEvent();
gomihgy 16:fc66feb533d0 266 t.stop();
gomihgy 14:81347f8f0bda 267 }
akita11 20:c3fadeef5842 268 switch(led_mode) {
gomihgy 14:81347f8f0bda 269 case MODE_OFF:
akita11 20:c3fadeef5842 270 io.analog_pow(0);
akita11 20:c3fadeef5842 271 io.display(0);
akita11 20:c3fadeef5842 272 if(io.get_switch()) {
gomihgy 14:81347f8f0bda 273 led_mode = MODE_START;
gomihgy 14:81347f8f0bda 274 }
akita11 20:c3fadeef5842 275 break;
gomihgy 14:81347f8f0bda 276 case MODE_START:
akita11 20:c3fadeef5842 277 io.analog_pow(1);
akita11 24:c6ef55535900 278 io.power_save_mode(0);
gomihgy 14:81347f8f0bda 279 led_brightness += BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 280 io.display(led_brightness);
akita11 20:c3fadeef5842 281 if(led_brightness >= BRIGHTNESS_MAXVALUE) {
gomihgy 14:81347f8f0bda 282 update_counter = 0;
gomihgy 16:fc66feb533d0 283 io.calibrate_weight();
akita11 20:c3fadeef5842 284 #if defined(PCB_VER1) || defined(PCB_VER2)
gomihgy 16:fc66feb533d0 285 SWInit();
akita11 20:c3fadeef5842 286 #endif
gomihgy 16:fc66feb533d0 287 ble.startAdvertising();
gomihgy 14:81347f8f0bda 288 led_mode = MODE_ON;
akita11 24:c6ef55535900 289 weight_s = 0.0;
akita11 24:c6ef55535900 290 sample = 0;
gomihgy 14:81347f8f0bda 291 }
akita11 20:c3fadeef5842 292 break;
gomihgy 14:81347f8f0bda 293 case MODE_ON:
akita11 24:c6ef55535900 294 #ifdef UART_DEBUG
masaaki_makabe 29:09406be35ef4 295 pc.printf("%d %d %.2f\r\n", io.get_switch(), io.get_weight_raw(), io.get_weight());
akita11 24:c6ef55535900 296 #endif
akita11 20:c3fadeef5842 297 io.analog_pow(1);
akita11 27:8c3c29b3f704 298 #ifdef DISPLAY_DEMO
akita11 27:8c3c29b3f704 299 demo_count++;
gomihgy 28:d8c652994988 300 if (demo_count == 10) {
akita11 27:8c3c29b3f704 301 demo_count = 0;
akita11 27:8c3c29b3f704 302 io.display_value = d++; // increment display value for every 1s in demo mode
gomihgy 28:d8c652994988 303 weight_data = quick_ieee11073_from_float(d);
gomihgy 28:d8c652994988 304 ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
gomihgy 28:d8c652994988 305 (uint8_t *)&weight_data,
gomihgy 28:d8c652994988 306 sizeof(weight_data));
akita11 27:8c3c29b3f704 307 }
akita11 27:8c3c29b3f704 308 #else
akita11 20:c3fadeef5842 309 if(io.get_switch()) {
gomihgy 14:81347f8f0bda 310 led_mode = MODE_END;
akita11 20:c3fadeef5842 311 if(ble.getGapState().connected) {
gomihgy 14:81347f8f0bda 312 ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
akita11 20:c3fadeef5842 313 } else {
gomihgy 14:81347f8f0bda 314 ble.stopAdvertising();
gomihgy 14:81347f8f0bda 315 }
akita11 20:c3fadeef5842 316 } else {
gomihgy 18:d1d15ec580fa 317 scale++;
gomihgy 18:d1d15ec580fa 318 ble.updateCharacteristicValue(WeightScale.getValueAttribute().getHandle(),
akita11 20:c3fadeef5842 319 (uint8_t *)&scale,
akita11 20:c3fadeef5842 320 sizeof(scale));
akita11 20:c3fadeef5842 321
akita11 24:c6ef55535900 322 weight_s += io.get_weight();
akita11 24:c6ef55535900 323 sample++;
gomihgy 28:d8c652994988 324 if (sample == Navg) {
akita11 24:c6ef55535900 325 weight = weight_s / (float)Navg;
akita11 24:c6ef55535900 326 io.display_value = (uint16_t)weight;
akita11 24:c6ef55535900 327 weight_s = 0.0;
akita11 24:c6ef55535900 328 sample = 0;
akita11 24:c6ef55535900 329 }
akita11 24:c6ef55535900 330 // pc.printf("weight=%.1f\r\n", weight);
akita11 20:c3fadeef5842 331 // io.display_value = 8888; // for LED soldering check
akita11 20:c3fadeef5842 332 #ifdef UART_DEBUG
akita11 21:ab5b55d1947d 333 // pc.printf("%d\r\n", io._get_adc_raw(0));
akita11 20:c3fadeef5842 334 // pc.printf("weight=%f %d / %d\r\n", weight, io.display_value, io._adc0);
akita11 20:c3fadeef5842 335 #endif
akita11 20:c3fadeef5842 336 if(++update_counter >= 5) {
akita11 20:c3fadeef5842 337 weight_data = quick_ieee11073_from_float(weight);
akita11 20:c3fadeef5842 338 ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
akita11 20:c3fadeef5842 339 (uint8_t *)&weight_data,
akita11 20:c3fadeef5842 340 sizeof(weight_data));
akita11 20:c3fadeef5842 341 update_counter = 0;
gomihgy 14:81347f8f0bda 342 }
gomihgy 14:81347f8f0bda 343 }
akita11 27:8c3c29b3f704 344 #endif
akita11 20:c3fadeef5842 345 break;
gomihgy 14:81347f8f0bda 346 case MODE_END:
gomihgy 14:81347f8f0bda 347 led_brightness -= BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 348 io.display(led_brightness);
akita11 20:c3fadeef5842 349 if(led_brightness <= BRIGHTNESS_MINVALUE) {
akita11 20:c3fadeef5842 350 #if defined(PCB_VER1) || defined(PCB_VER2)
gomihgy 16:fc66feb533d0 351 SWInit();
akita11 20:c3fadeef5842 352 #endif
gomihgy 14:81347f8f0bda 353 led_mode = MODE_OFF;
akita11 24:c6ef55535900 354 io.power_save_mode(1);
gomihgy 14:81347f8f0bda 355 }
akita11 20:c3fadeef5842 356 break;
gomihgy 14:81347f8f0bda 357 }
akita11 0:08c8325a21ec 358 }
akita11 0:08c8325a21ec 359 }