test

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

Committer:
gomihgy
Date:
Thu Jan 14 02:12:19 2016 +0000
Revision:
18:d1d15ec580fa
Parent:
17:994c1f037198
Child:
19:05526fe9365e
add scale characteristic update for test

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 18:d1d15ec580fa 18 #define FIRMWARE_REVISION_STRING "v1.00.008@rev0018" // 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 16:fc66feb533d0 22 #define WEIGHT_COEFFICIENT (8.64)
gomihgy 6:bc960e6fd1ed 23
gomihgy 16:fc66feb533d0 24 // Switch
gomihgy 14:81347f8f0bda 25 #define SW_THRESHOLD (0.5)
gomihgy 14:81347f8f0bda 26 #define SW_SAMPLECOUNT (3)
gomihgy 5:1730064b94bd 27
gomihgy 6:bc960e6fd1ed 28 // Mode
gomihgy 6:bc960e6fd1ed 29 #define MODE_OFF (0) // LED OFF
gomihgy 6:bc960e6fd1ed 30 #define MODE_START (1) // LED OFF -> ON
gomihgy 6:bc960e6fd1ed 31 #define MODE_ON (2) // LED ON
gomihgy 6:bc960e6fd1ed 32 #define MODE_END (3) // LED ON -> OFF
gomihgy 6:bc960e6fd1ed 33
gomihgy 6:bc960e6fd1ed 34 // Led
gomihgy 16:fc66feb533d0 35 #define LED_INTERVAL_MSEC (100)
gomihgy 6:bc960e6fd1ed 36 #define BRIGHTNESS_ADDVALUE (0.1)
gomihgy 7:9ebf125e405f 37 #define BRIGHTNESS_MINVALUE (0.0)
gomihgy 6:bc960e6fd1ed 38 #define BRIGHTNESS_MAXVALUE (1.0)
gomihgy 6:bc960e6fd1ed 39
gomihgy 6:bc960e6fd1ed 40 // Properties
gomihgy 6:bc960e6fd1ed 41 io io;
gomihgy 9:a7bd5ae66d6d 42 uint32_t weight_data;
gomihgy 9:a7bd5ae66d6d 43 float32_t weight = 0.0;
gomihgy 6:bc960e6fd1ed 44 uint32_t scale = 0;
gomihgy 6:bc960e6fd1ed 45 int update_counter = 0;
gomihgy 14:81347f8f0bda 46 float sw_data[SW_SAMPLECOUNT];
gomihgy 14:81347f8f0bda 47 uint8_t sw_count = 0;
gomihgy 6:bc960e6fd1ed 48 int led_mode = MODE_OFF;
gomihgy 6:bc960e6fd1ed 49 float led_brightness = BRIGHTNESS_MINVALUE;
akita11 4:edd6e262de9e 50
gomihgy 14:81347f8f0bda 51 Timer t;
gomihgy 14:81347f8f0bda 52
akita11 10:95c1e5a218d5 53 // UART for debug
akita11 10:95c1e5a218d5 54
akita11 10:95c1e5a218d5 55 #ifdef UART_DEBUG
akita11 10:95c1e5a218d5 56 Serial pc(P0_9, P0_8);// TX=P0_9
akita11 10:95c1e5a218d5 57 #define UART_BAUD_RATE (9600UL)
akita11 10:95c1e5a218d5 58 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
akita11 10:95c1e5a218d5 59 #else
akita11 10:95c1e5a218d5 60 #define DEBUG(...) {}
akita11 10:95c1e5a218d5 61 #endif
akita11 10:95c1e5a218d5 62
gomihgy 6:bc960e6fd1ed 63 // BLE
gomihgy 12:880400fa5c44 64 BLE ble;
gomihgy 5:1730064b94bd 65 Gap::ConnectionParams_t connectionParams;
gomihgy 5:1730064b94bd 66
gomihgy 5:1730064b94bd 67 /* Complete list of 16-bit Service IDs */
gomihgy 6:bc960e6fd1ed 68 uint16_t uuid16_list[] = {GattService::UUID_DEVICE_INFORMATION_SERVICE};
gomihgy 5:1730064b94bd 69
gomihgy 5:1730064b94bd 70 /* Weight Scale Service */
gomihgy 6:bc960e6fd1ed 71 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 72 GattCharacteristic WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight_data, sizeof(weight_data), sizeof(weight_data),
gomihgy 6:bc960e6fd1ed 73 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
gomihgy 6:bc960e6fd1ed 74 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 75 GattCharacteristic WeightScale (UUID(UUID_HACARUS_SCALE_CHAR), (uint8_t *)&scale, sizeof(scale), sizeof(scale),
gomihgy 6:bc960e6fd1ed 76 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE);
gomihgy 6:bc960e6fd1ed 77 GattCharacteristic *Chars[] = {&WeightMeasurement,&WeightScale};
gomihgy 6:bc960e6fd1ed 78 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 79 GattService HWS = GattService(UUID(UUID_HACARUS_WEIGHT_SERVICE), Chars, sizeof(Chars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 80
gomihgy 5:1730064b94bd 81 /* Device Information Service */
gomihgy 5:1730064b94bd 82 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 83 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 84 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 85 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 86 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 87 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 5:1730064b94bd 88 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 89 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
gomihgy 6:bc960e6fd1ed 90 GattCharacteristic *DISChars[] = {&ManuName, &ModelNum, &SerialNum, &FWVersion};
gomihgy 5:1730064b94bd 91 GattService DIS(GattService::UUID_DEVICE_INFORMATION_SERVICE , DISChars, sizeof(DISChars) / sizeof(GattCharacteristic *));
gomihgy 5:1730064b94bd 92
akita11 17:994c1f037198 93 // to confirm joystick
gomihgy 7:9ebf125e405f 94 bool check_joystick(){
akita11 17:994c1f037198 95 /*
gomihgy 14:81347f8f0bda 96 float sum_data = 0;
gomihgy 6:bc960e6fd1ed 97
gomihgy 14:81347f8f0bda 98 // ジョイスティックXのADC値(0〜1.0換算)が0.5以上ならON、0.5未満ならOFF
gomihgy 14:81347f8f0bda 99 sw_data[sw_count] = io.get_x();
gomihgy 14:81347f8f0bda 100
gomihgy 14:81347f8f0bda 101 if(++sw_count >= SW_SAMPLECOUNT){
gomihgy 14:81347f8f0bda 102 sw_count = 0;
gomihgy 7:9ebf125e405f 103 }
gomihgy 7:9ebf125e405f 104
gomihgy 14:81347f8f0bda 105 for(int count = 0;count < SW_SAMPLECOUNT;count++){
gomihgy 14:81347f8f0bda 106 sum_data += sw_data[count];
akita11 0:08c8325a21ec 107 }
gomihgy 6:bc960e6fd1ed 108
gomihgy 14:81347f8f0bda 109 return ((sum_data / SW_SAMPLECOUNT) >= SW_THRESHOLD);
akita11 17:994c1f037198 110 */
akita11 17:994c1f037198 111 return(io.get_switch());
gomihgy 7:9ebf125e405f 112 }
gomihgy 7:9ebf125e405f 113
gomihgy 9:a7bd5ae66d6d 114 uint32_t quick_ieee11073_from_float(float data)
gomihgy 9:a7bd5ae66d6d 115 {
gomihgy 9:a7bd5ae66d6d 116 uint8_t exponent = 0xFE; //exponent is -2
gomihgy 9:a7bd5ae66d6d 117 uint32_t mantissa = (uint32_t)(data*100);
gomihgy 9:a7bd5ae66d6d 118
gomihgy 9:a7bd5ae66d6d 119 return ( ((uint32_t)exponent) << 24) | mantissa;
gomihgy 9:a7bd5ae66d6d 120 }
gomihgy 9:a7bd5ae66d6d 121
gomihgy 16:fc66feb533d0 122 void SWInit(void){
gomihgy 16:fc66feb533d0 123 // SW Initialize
gomihgy 16:fc66feb533d0 124 for(int count = 0;count < SW_SAMPLECOUNT;count++){
gomihgy 16:fc66feb533d0 125 sw_data[count] = 0;
gomihgy 16:fc66feb533d0 126 }
gomihgy 16:fc66feb533d0 127 }
akita11 10:95c1e5a218d5 128
gomihgy 16:fc66feb533d0 129 void AppInit(void){
gomihgy 16:fc66feb533d0 130
gomihgy 16:fc66feb533d0 131 SWInit();
gomihgy 16:fc66feb533d0 132 io.analog_pow(1);
gomihgy 16:fc66feb533d0 133
akita11 10:95c1e5a218d5 134 /*
gomihgy 16:fc66feb533d0 135 if(NRF_UICR->XTALFREQ == 0xFFFFFF00){
gomihgy 16:fc66feb533d0 136 io.display_value = 3232;
gomihgy 16:fc66feb533d0 137 }else if(NRF_UICR->XTALFREQ == 0xFFFFFFFF){
gomihgy 16:fc66feb533d0 138 io.display_value = 1616;
akita11 10:95c1e5a218d5 139 }
akita11 10:95c1e5a218d5 140 */
akita11 0:08c8325a21ec 141 }
akita11 0:08c8325a21ec 142
gomihgy 5:1730064b94bd 143 /*
gomihgy 5:1730064b94bd 144 * BLE CallBacks
gomihgy 5:1730064b94bd 145 */
gomihgy 12:880400fa5c44 146 void BLEConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 147 {
gomihgy 12:880400fa5c44 148 ble.updateConnectionParams(params->handle, params->connectionParams);
gomihgy 5:1730064b94bd 149 }
gomihgy 5:1730064b94bd 150
gomihgy 12:880400fa5c44 151 void BLEDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
gomihgy 5:1730064b94bd 152 {
gomihgy 6:bc960e6fd1ed 153 if(led_mode == MODE_ON){
gomihgy 6:bc960e6fd1ed 154 ble.startAdvertising();
gomihgy 5:1730064b94bd 155 }
gomihgy 5:1730064b94bd 156 }
gomihgy 5:1730064b94bd 157
gomihgy 12:880400fa5c44 158 void BLERadioNotificationCallback(bool radio_active)
gomihgy 12:880400fa5c44 159 {
gomihgy 12:880400fa5c44 160 if (radio_active == false)
gomihgy 12:880400fa5c44 161 {
gomihgy 12:880400fa5c44 162 if(led_mode == MODE_ON){
gomihgy 12:880400fa5c44 163 }
gomihgy 12:880400fa5c44 164 }
gomihgy 12:880400fa5c44 165 }
gomihgy 12:880400fa5c44 166
gomihgy 5:1730064b94bd 167 void BleInitialize(void){
gomihgy 5:1730064b94bd 168
gomihgy 6:bc960e6fd1ed 169 uint8_t advertiseServiceID[16];
gomihgy 6:bc960e6fd1ed 170
gomihgy 5:1730064b94bd 171 // Initialize
gomihgy 5:1730064b94bd 172 ble.init();
gomihgy 5:1730064b94bd 173
gomihgy 5:1730064b94bd 174 // Event Set
gomihgy 5:1730064b94bd 175 ble.onConnection(&BLEConnectionCallback);
gomihgy 5:1730064b94bd 176 ble.onDisconnection(&BLEDisconnectionCallback);
gomihgy 12:880400fa5c44 177 ble.onRadioNotification(&BLERadioNotificationCallback);
gomihgy 5:1730064b94bd 178
gomihgy 5:1730064b94bd 179 ble.getPreferredConnectionParams(&connectionParams);
gomihgy 6:bc960e6fd1ed 180 connectionParams.maxConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 181 connectionParams.minConnectionInterval = INTERVAL_500MSEC;
gomihgy 6:bc960e6fd1ed 182 connectionParams.connectionSupervisionTimeout = CONNTIMEOUT_3000MSEC;
gomihgy 6:bc960e6fd1ed 183 connectionParams.slaveLatency = 2;
gomihgy 5:1730064b94bd 184 ble.setPreferredConnectionParams(&connectionParams);
gomihgy 5:1730064b94bd 185
gomihgy 5:1730064b94bd 186 ble.setTxPower(BLE_TXPOWER_4DBM);
gomihgy 6:bc960e6fd1ed 187
gomihgy 6:bc960e6fd1ed 188 for(int i=0; i<16; i++){
gomihgy 6:bc960e6fd1ed 189 advertiseServiceID[i] = UUID_HACARUS_WEIGHT_SERVICE[16 - 1 - i];
gomihgy 6:bc960e6fd1ed 190 }
gomihgy 6:bc960e6fd1ed 191
gomihgy 5:1730064b94bd 192 ble.accumulateAdvertisingPayload((GapAdvertisingData::Flags)(GapAdvertisingData::LE_GENERAL_DISCOVERABLE | GapAdvertisingData::BREDR_NOT_SUPPORTED));
gomihgy 5:1730064b94bd 193 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
gomihgy 5:1730064b94bd 194 (const uint8_t *)DEVICE_NAME,
gomihgy 5:1730064b94bd 195 strlen(DEVICE_NAME));
gomihgy 5:1730064b94bd 196 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
gomihgy 6:bc960e6fd1ed 197 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
gomihgy 6:bc960e6fd1ed 198 (const uint8_t *)advertiseServiceID, sizeof(advertiseServiceID));
gomihgy 6:bc960e6fd1ed 199
gomihgy 12:880400fa5c44 200 ble.setAdvertisingInterval(INTERVAL_500MSEC);
gomihgy 5:1730064b94bd 201 ble.setAdvertisingTimeout(ADV_TIMEOUT); /* 0 is disable the advertising timeout. */
gomihgy 5:1730064b94bd 202
gomihgy 6:bc960e6fd1ed 203 ble.addService(HWS);
gomihgy 5:1730064b94bd 204 ble.addService(DIS);
gomihgy 5:1730064b94bd 205 }
gomihgy 5:1730064b94bd 206
akita11 0:08c8325a21ec 207 int main()
akita11 0:08c8325a21ec 208 {
gomihgy 5:1730064b94bd 209 #ifdef UART_DEBUG
gomihgy 5:1730064b94bd 210 pc.baud(UART_BAUD_RATE);
gomihgy 5:1730064b94bd 211 #endif
akita11 10:95c1e5a218d5 212 #ifndef PCB_VER1
akita11 10:95c1e5a218d5 213 // set XTAL=32MHz for TaiyoYuden's module
akita11 11:be439189e3f7 214 // is moved to mbed-src/targets/cmsis/TARGET_NORDIC/TARGET_MCU_NRF51822/system_nrf51.c
akita11 11:be439189e3f7 215 DEBUG("UICR->XTALFREQ=%x\r\n", NRF_UICR->XTALFREQ); // this should be 0xffffff00, not 0xffffffff
akita11 10:95c1e5a218d5 216 #endif
akita11 10:95c1e5a218d5 217
akita11 10:95c1e5a218d5 218 BleInitialize();
gomihgy 16:fc66feb533d0 219 AppInit();
gomihgy 14:81347f8f0bda 220
gomihgy 6:bc960e6fd1ed 221 for (;; ) {
gomihgy 14:81347f8f0bda 222 // 100msec waitForEvent
gomihgy 14:81347f8f0bda 223 t.reset();
gomihgy 16:fc66feb533d0 224 while(t.read_ms() < LED_INTERVAL_MSEC){
gomihgy 16:fc66feb533d0 225 t.start();
gomihgy 14:81347f8f0bda 226 ble.waitForEvent();
gomihgy 16:fc66feb533d0 227 t.stop();
gomihgy 14:81347f8f0bda 228 }
gomihgy 14:81347f8f0bda 229
akita11 17:994c1f037198 230 io.analog_pow(1);
gomihgy 14:81347f8f0bda 231 // ticker処理
gomihgy 14:81347f8f0bda 232 switch(led_mode){
gomihgy 14:81347f8f0bda 233 case MODE_OFF:
gomihgy 14:81347f8f0bda 234 if(check_joystick()){
gomihgy 14:81347f8f0bda 235 led_mode = MODE_START;
gomihgy 14:81347f8f0bda 236 }
gomihgy 14:81347f8f0bda 237 break;
gomihgy 14:81347f8f0bda 238 case MODE_START:
gomihgy 14:81347f8f0bda 239 led_brightness += BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 240 io.display(led_brightness);
gomihgy 14:81347f8f0bda 241 if(led_brightness >= BRIGHTNESS_MAXVALUE){
gomihgy 14:81347f8f0bda 242 update_counter = 0;
gomihgy 16:fc66feb533d0 243 io.calibrate_weight();
gomihgy 16:fc66feb533d0 244 SWInit();
gomihgy 16:fc66feb533d0 245 ble.startAdvertising();
gomihgy 14:81347f8f0bda 246 led_mode = MODE_ON;
gomihgy 14:81347f8f0bda 247 }
gomihgy 14:81347f8f0bda 248 break;
gomihgy 14:81347f8f0bda 249 case MODE_ON:
gomihgy 16:fc66feb533d0 250 if(check_joystick()){
gomihgy 14:81347f8f0bda 251 led_mode = MODE_END;
gomihgy 14:81347f8f0bda 252 if(ble.getGapState().connected){
gomihgy 14:81347f8f0bda 253 ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
gomihgy 14:81347f8f0bda 254 }else{
gomihgy 14:81347f8f0bda 255 ble.stopAdvertising();
gomihgy 14:81347f8f0bda 256 }
gomihgy 14:81347f8f0bda 257 }else{
gomihgy 18:d1d15ec580fa 258 scale++;
gomihgy 18:d1d15ec580fa 259 ble.updateCharacteristicValue(WeightScale.getValueAttribute().getHandle(),
gomihgy 18:d1d15ec580fa 260 (uint8_t *)&scale,
gomihgy 18:d1d15ec580fa 261 sizeof(scale));
gomihgy 18:d1d15ec580fa 262
akita11 17:994c1f037198 263 weight = io.get_weight_raw() / WEIGHT_COEFFICIENT;
akita11 17:994c1f037198 264 // pc.printf("w=%f\r\n", weight);
gomihgy 16:fc66feb533d0 265 if(weight < 0){
gomihgy 16:fc66feb533d0 266 weight = 0;
gomihgy 16:fc66feb533d0 267 }
gomihgy 14:81347f8f0bda 268 io.display_value = (uint16_t)weight; // dummy display
gomihgy 14:81347f8f0bda 269 if(++update_counter >= 5){
gomihgy 14:81347f8f0bda 270 weight_data = quick_ieee11073_from_float(weight);
gomihgy 14:81347f8f0bda 271 ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
gomihgy 14:81347f8f0bda 272 (uint8_t *)&weight_data,
gomihgy 14:81347f8f0bda 273 sizeof(weight_data));
gomihgy 14:81347f8f0bda 274 update_counter = 0;
gomihgy 14:81347f8f0bda 275 }
gomihgy 14:81347f8f0bda 276 }
gomihgy 14:81347f8f0bda 277 break;
gomihgy 14:81347f8f0bda 278 case MODE_END:
gomihgy 14:81347f8f0bda 279 led_brightness -= BRIGHTNESS_ADDVALUE;
gomihgy 14:81347f8f0bda 280 io.display(led_brightness);
gomihgy 14:81347f8f0bda 281 if(led_brightness <= BRIGHTNESS_MINVALUE){
gomihgy 16:fc66feb533d0 282 SWInit();
gomihgy 14:81347f8f0bda 283 led_mode = MODE_OFF;
gomihgy 14:81347f8f0bda 284 }
gomihgy 14:81347f8f0bda 285 break;
gomihgy 14:81347f8f0bda 286 }
akita11 17:994c1f037198 287 io.analog_pow(0);
akita11 0:08c8325a21ec 288 }
akita11 0:08c8325a21ec 289 }
gomihgy 6:bc960e6fd1ed 290
akita11 0:08c8325a21ec 291