test
Dependencies: BLE_API nRF51822 mbed
Fork of KS7 by
main.cpp@36:3cca74c30551, 2016-08-12 (annotated)
- Committer:
- masaaki_makabe
- Date:
- Fri Aug 12 04:07:00 2016 +0000
- Branch:
- KS3
- Revision:
- 36:3cca74c30551
- Parent:
- 33:d7b53d548c33
???????????????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
akita11 | 0:08c8325a21ec | 1 | #include "mbed.h" |
masaaki_makabe | 31:b5e19d153db4 | 2 | #include "exio.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> |
masaaki_makabe | 31:b5e19d153db4 | 8 | #include "CurrentTimeService.h" |
masaaki_makabe | 31:b5e19d153db4 | 9 | #include "MMA845x.h" |
masaaki_makabe | 31:b5e19d153db4 | 10 | #include "common.h" |
akita11 | 0:08c8325a21ec | 11 | |
akita11 | 27:8c3c29b3f704 | 12 | |
gomihgy | 6:bc960e6fd1ed | 13 | // BLE |
gomihgy | 6:bc960e6fd1ed | 14 | #define INTERVAL_500MSEC (500UL) |
gomihgy | 6:bc960e6fd1ed | 15 | #define CONNTIMEOUT_3000MSEC (3000UL) |
gomihgy | 5:1730064b94bd | 16 | #define ADV_TIMEOUT (0) |
gomihgy | 5:1730064b94bd | 17 | #define DEVICE_NAME "Kitchen Scale" |
gomihgy | 5:1730064b94bd | 18 | #define BLE_TXPOWER_4DBM (4) |
gomihgy | 5:1730064b94bd | 19 | |
gomihgy | 5:1730064b94bd | 20 | // Device Information Service (DIS) (20 character limit) |
gomihgy | 5:1730064b94bd | 21 | // https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.device_information.xml |
gomihgy | 6:bc960e6fd1ed | 22 | #define MANUFACTURER_NAME_STRING "Hacarus" // Manufacturer Name String - shall represent the name of the manufacturer of the device. |
gomihgy | 6:bc960e6fd1ed | 23 | #define MODEL_NUMBER_STRING "0001" // Model Number String - shall represent the model number that is assigned by the device vendor. |
gomihgy | 6:bc960e6fd1ed | 24 | #define SERIAL_NUMBER_STRING "000780c0ffeef00d" // Serial Number String - shall represent the serial number for a particular instance of the device. |
gomihgy | 28:d8c652994988 | 25 | #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 | 26 | |
gomihgy | 5:1730064b94bd | 27 | // Weight Scale Service (Original) |
masaaki_makabe | 31:b5e19d153db4 | 28 | //#define UUID_WEIGHT_SCALE_SERVICE (0x181D) |
gomihgy | 6:bc960e6fd1ed | 29 | |
akita11 | 20:c3fadeef5842 | 30 | #if defined(PCB_VER1) || defined(PCB_VER2) |
gomihgy | 16:fc66feb533d0 | 31 | // Switch |
gomihgy | 14:81347f8f0bda | 32 | #define SW_THRESHOLD (0.5) |
gomihgy | 14:81347f8f0bda | 33 | #define SW_SAMPLECOUNT (3) |
akita11 | 20:c3fadeef5842 | 34 | #endif |
gomihgy | 5:1730064b94bd | 35 | |
gomihgy | 6:bc960e6fd1ed | 36 | // Mode |
gomihgy | 6:bc960e6fd1ed | 37 | #define MODE_OFF (0) // LED OFF |
gomihgy | 6:bc960e6fd1ed | 38 | #define MODE_START (1) // LED OFF -> ON |
gomihgy | 6:bc960e6fd1ed | 39 | #define MODE_ON (2) // LED ON |
gomihgy | 6:bc960e6fd1ed | 40 | #define MODE_END (3) // LED ON -> OFF |
masaaki_makabe | 31:b5e19d153db4 | 41 | /*S-----------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 42 | State_t _state = S_WATCH; |
masaaki_makabe | 31:b5e19d153db4 | 43 | Mode_t _mode = M_SCALE; |
masaaki_makabe | 31:b5e19d153db4 | 44 | /*E-----------------------------------------------------------*/ |
gomihgy | 6:bc960e6fd1ed | 45 | |
gomihgy | 6:bc960e6fd1ed | 46 | // Led |
gomihgy | 16:fc66feb533d0 | 47 | #define LED_INTERVAL_MSEC (100) |
gomihgy | 6:bc960e6fd1ed | 48 | #define BRIGHTNESS_ADDVALUE (0.1) |
gomihgy | 7:9ebf125e405f | 49 | #define BRIGHTNESS_MINVALUE (0.0) |
gomihgy | 6:bc960e6fd1ed | 50 | #define BRIGHTNESS_MAXVALUE (1.0) |
gomihgy | 6:bc960e6fd1ed | 51 | |
gomihgy | 6:bc960e6fd1ed | 52 | // Properties |
akita11 | 25:da723b86c60b | 53 | //io io; |
masaaki_makabe | 31:b5e19d153db4 | 54 | /*S---------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 55 | //io io(P0_15, P0_13); // HX711's CLK & DAT |
masaaki_makabe | 31:b5e19d153db4 | 56 | exio io; |
masaaki_makabe | 36:3cca74c30551 | 57 | DFUService *p_dfu; |
masaaki_makabe | 31:b5e19d153db4 | 58 | /*E---------------------------------------------------------------*/ |
akita11 | 27:8c3c29b3f704 | 59 | //io(P0_5, P0_4); // HX711's CLK & DAT for BLEnano debug |
gomihgy | 9:a7bd5ae66d6d | 60 | uint32_t weight_data; |
gomihgy | 9:a7bd5ae66d6d | 61 | float32_t weight = 0.0; |
gomihgy | 6:bc960e6fd1ed | 62 | uint32_t scale = 0; |
gomihgy | 6:bc960e6fd1ed | 63 | int update_counter = 0; |
akita11 | 20:c3fadeef5842 | 64 | #if defined(PCB_VER1) || defined(PCB_VER2) |
gomihgy | 14:81347f8f0bda | 65 | float sw_data[SW_SAMPLECOUNT]; |
gomihgy | 14:81347f8f0bda | 66 | uint8_t sw_count = 0; |
akita11 | 20:c3fadeef5842 | 67 | #endif |
gomihgy | 6:bc960e6fd1ed | 68 | int led_mode = MODE_OFF; |
gomihgy | 6:bc960e6fd1ed | 69 | float led_brightness = BRIGHTNESS_MINVALUE; |
akita11 | 4:edd6e262de9e | 70 | |
akita11 | 10:95c1e5a218d5 | 71 | #ifdef UART_DEBUG |
akita11 | 20:c3fadeef5842 | 72 | #if defined(PCB_VER1) || defined(PCB_VER2) |
akita11 | 10:95c1e5a218d5 | 73 | Serial pc(P0_9, P0_8);// TX=P0_9 |
akita11 | 20:c3fadeef5842 | 74 | #else |
akita11 | 20:c3fadeef5842 | 75 | Serial pc(P0_9, P0_11);// TX=P0_9 |
akita11 | 20:c3fadeef5842 | 76 | #endif |
akita11 | 10:95c1e5a218d5 | 77 | #define UART_BAUD_RATE (9600UL) |
akita11 | 10:95c1e5a218d5 | 78 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
akita11 | 10:95c1e5a218d5 | 79 | #else |
akita11 | 10:95c1e5a218d5 | 80 | #define DEBUG(...) {} |
akita11 | 10:95c1e5a218d5 | 81 | #endif |
akita11 | 10:95c1e5a218d5 | 82 | |
akita11 | 20:c3fadeef5842 | 83 | Timer t; |
akita11 | 20:c3fadeef5842 | 84 | |
akita11 | 20:c3fadeef5842 | 85 | // BLE |
gomihgy | 12:880400fa5c44 | 86 | BLE ble; |
gomihgy | 5:1730064b94bd | 87 | Gap::ConnectionParams_t connectionParams; |
gomihgy | 5:1730064b94bd | 88 | |
gomihgy | 5:1730064b94bd | 89 | /* Complete list of 16-bit Service IDs */ |
gomihgy | 6:bc960e6fd1ed | 90 | uint16_t uuid16_list[] = {GattService::UUID_DEVICE_INFORMATION_SERVICE}; |
gomihgy | 5:1730064b94bd | 91 | |
gomihgy | 5:1730064b94bd | 92 | /* Weight Scale Service */ |
gomihgy | 6:bc960e6fd1ed | 93 | 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 | 94 | GattCharacteristic WeightMeasurement (UUID(UUID_HACARUS_WEIGHT_CHAR), (uint8_t *)&weight_data, sizeof(weight_data), sizeof(weight_data), |
akita11 | 20:c3fadeef5842 | 95 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE); |
gomihgy | 6:bc960e6fd1ed | 96 | 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 | 97 | GattCharacteristic WeightScale (UUID(UUID_HACARUS_SCALE_CHAR), (uint8_t *)&scale, sizeof(scale), sizeof(scale), |
akita11 | 20:c3fadeef5842 | 98 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); |
gomihgy | 6:bc960e6fd1ed | 99 | GattCharacteristic *Chars[] = {&WeightMeasurement,&WeightScale}; |
gomihgy | 6:bc960e6fd1ed | 100 | 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 | 101 | GattService HWS = GattService(UUID(UUID_HACARUS_WEIGHT_SERVICE), Chars, sizeof(Chars) / sizeof(GattCharacteristic *)); |
gomihgy | 5:1730064b94bd | 102 | |
gomihgy | 5:1730064b94bd | 103 | /* Device Information Service */ |
gomihgy | 5:1730064b94bd | 104 | 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 | 105 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
gomihgy | 5:1730064b94bd | 106 | 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 | 107 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
gomihgy | 6:bc960e6fd1ed | 108 | 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 | 109 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
gomihgy | 5:1730064b94bd | 110 | 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 | 111 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
gomihgy | 6:bc960e6fd1ed | 112 | GattCharacteristic *DISChars[] = {&ManuName, &ModelNum, &SerialNum, &FWVersion}; |
gomihgy | 5:1730064b94bd | 113 | GattService DIS(GattService::UUID_DEVICE_INFORMATION_SERVICE , DISChars, sizeof(DISChars) / sizeof(GattCharacteristic *)); |
gomihgy | 5:1730064b94bd | 114 | |
masaaki_makabe | 31:b5e19d153db4 | 115 | /*S--------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 116 | CurrentTimeService *p_CurrentTimeService; // Current Time Service |
masaaki_makabe | 31:b5e19d153db4 | 117 | MMA845x *p_MMA845x; // 加速度センサー(本体) |
masaaki_makabe | 31:b5e19d153db4 | 118 | I2C i2c(P0_17, P0_18); // 加速度センサー(I2C) |
masaaki_makabe | 31:b5e19d153db4 | 119 | /*E--------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 120 | |
akita11 | 20:c3fadeef5842 | 121 | #ifdef PCB_VER1 |
akita11 | 20:c3fadeef5842 | 122 | bool check_joystick() |
akita11 | 20:c3fadeef5842 | 123 | { |
gomihgy | 14:81347f8f0bda | 124 | float sum_data = 0; |
akita11 | 20:c3fadeef5842 | 125 | |
gomihgy | 14:81347f8f0bda | 126 | sw_data[sw_count] = io.get_x(); |
akita11 | 20:c3fadeef5842 | 127 | |
akita11 | 20:c3fadeef5842 | 128 | if(++sw_count >= SW_SAMPLECOUNT) { |
gomihgy | 14:81347f8f0bda | 129 | sw_count = 0; |
gomihgy | 7:9ebf125e405f | 130 | } |
akita11 | 20:c3fadeef5842 | 131 | |
akita11 | 20:c3fadeef5842 | 132 | for(int count = 0; count < SW_SAMPLECOUNT; count++) { |
gomihgy | 14:81347f8f0bda | 133 | sum_data += sw_data[count]; |
akita11 | 0:08c8325a21ec | 134 | } |
akita11 | 20:c3fadeef5842 | 135 | |
gomihgy | 14:81347f8f0bda | 136 | return ((sum_data / SW_SAMPLECOUNT) >= SW_THRESHOLD); |
gomihgy | 7:9ebf125e405f | 137 | } |
akita11 | 20:c3fadeef5842 | 138 | #endif |
gomihgy | 7:9ebf125e405f | 139 | |
gomihgy | 9:a7bd5ae66d6d | 140 | uint32_t quick_ieee11073_from_float(float data) |
gomihgy | 9:a7bd5ae66d6d | 141 | { |
gomihgy | 9:a7bd5ae66d6d | 142 | uint8_t exponent = 0xFE; //exponent is -2 |
gomihgy | 9:a7bd5ae66d6d | 143 | uint32_t mantissa = (uint32_t)(data*100); |
akita11 | 20:c3fadeef5842 | 144 | |
gomihgy | 9:a7bd5ae66d6d | 145 | return ( ((uint32_t)exponent) << 24) | mantissa; |
gomihgy | 9:a7bd5ae66d6d | 146 | } |
gomihgy | 9:a7bd5ae66d6d | 147 | |
akita11 | 20:c3fadeef5842 | 148 | #if defined(PCB_VER1) || defined(PCB_VER2) |
akita11 | 20:c3fadeef5842 | 149 | void SWInit(void) |
akita11 | 20:c3fadeef5842 | 150 | { |
gomihgy | 16:fc66feb533d0 | 151 | // SW Initialize |
akita11 | 20:c3fadeef5842 | 152 | for(int count = 0; count < SW_SAMPLECOUNT; count++) { |
gomihgy | 16:fc66feb533d0 | 153 | sw_data[count] = 0; |
gomihgy | 16:fc66feb533d0 | 154 | } |
gomihgy | 16:fc66feb533d0 | 155 | } |
akita11 | 20:c3fadeef5842 | 156 | #endif |
akita11 | 10:95c1e5a218d5 | 157 | |
akita11 | 20:c3fadeef5842 | 158 | void AppInit(void) |
akita11 | 20:c3fadeef5842 | 159 | { |
akita11 | 20:c3fadeef5842 | 160 | |
akita11 | 20:c3fadeef5842 | 161 | #if defined(PCB_VER1) || defined(PCB_VER2) |
gomihgy | 16:fc66feb533d0 | 162 | SWInit(); |
akita11 | 20:c3fadeef5842 | 163 | #endif |
gomihgy | 16:fc66feb533d0 | 164 | io.analog_pow(1); |
akita11 | 20:c3fadeef5842 | 165 | |
akita11 | 21:ab5b55d1947d | 166 | #ifdef PCB_VER3 |
akita11 | 21:ab5b55d1947d | 167 | // check XTALFREQ for TaiyoYuden module in PCB_VER3 |
gomihgy | 28:d8c652994988 | 168 | /* |
gomihgy | 28:d8c652994988 | 169 | if(NRF_UICR->XTALFREQ == 0xFFFFFF00){ |
gomihgy | 28:d8c652994988 | 170 | io.display_value = 3232; |
gomihgy | 28:d8c652994988 | 171 | }else if(NRF_UICR->XTALFREQ == 0xFFFFFFFF){ |
gomihgy | 28:d8c652994988 | 172 | io.display_value = 1616; |
gomihgy | 28:d8c652994988 | 173 | } |
gomihgy | 28:d8c652994988 | 174 | */ |
akita11 | 21:ab5b55d1947d | 175 | #endif |
akita11 | 0:08c8325a21ec | 176 | } |
akita11 | 0:08c8325a21ec | 177 | |
gomihgy | 5:1730064b94bd | 178 | /* |
gomihgy | 5:1730064b94bd | 179 | * BLE CallBacks |
gomihgy | 5:1730064b94bd | 180 | */ |
gomihgy | 12:880400fa5c44 | 181 | void BLEConnectionCallback(const Gap::ConnectionCallbackParams_t *params) |
gomihgy | 5:1730064b94bd | 182 | { |
akita11 | 20:c3fadeef5842 | 183 | ble.updateConnectionParams(params->handle, params->connectionParams); |
masaaki_makabe | 33:d7b53d548c33 | 184 | #ifdef UART_DEBUG |
masaaki_makabe | 33:d7b53d548c33 | 185 | pc.printf("BLEConnectionCallback \r\n"); |
masaaki_makabe | 33:d7b53d548c33 | 186 | #endif |
gomihgy | 5:1730064b94bd | 187 | } |
gomihgy | 5:1730064b94bd | 188 | |
gomihgy | 12:880400fa5c44 | 189 | void BLEDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
gomihgy | 5:1730064b94bd | 190 | { |
akita11 | 20:c3fadeef5842 | 191 | if(led_mode == MODE_ON) { |
gomihgy | 6:bc960e6fd1ed | 192 | ble.startAdvertising(); |
gomihgy | 5:1730064b94bd | 193 | } |
masaaki_makabe | 33:d7b53d548c33 | 194 | #ifdef UART_DEBUG |
masaaki_makabe | 33:d7b53d548c33 | 195 | pc.printf("BLEDisconnectionCallback \r\n"); |
masaaki_makabe | 33:d7b53d548c33 | 196 | #endif |
gomihgy | 5:1730064b94bd | 197 | } |
gomihgy | 5:1730064b94bd | 198 | |
gomihgy | 12:880400fa5c44 | 199 | void BLERadioNotificationCallback(bool radio_active) |
gomihgy | 12:880400fa5c44 | 200 | { |
akita11 | 20:c3fadeef5842 | 201 | if (radio_active == false) { |
akita11 | 20:c3fadeef5842 | 202 | if(led_mode == MODE_ON) { |
gomihgy | 12:880400fa5c44 | 203 | } |
gomihgy | 12:880400fa5c44 | 204 | } |
masaaki_makabe | 33:d7b53d548c33 | 205 | #ifdef UART_DEBUG |
masaaki_makabe | 33:d7b53d548c33 | 206 | pc.printf("BLERadioNotificationCallback \r\n"); |
masaaki_makabe | 33:d7b53d548c33 | 207 | #endif |
gomihgy | 12:880400fa5c44 | 208 | } |
gomihgy | 12:880400fa5c44 | 209 | |
masaaki_makabe | 31:b5e19d153db4 | 210 | |
masaaki_makabe | 31:b5e19d153db4 | 211 | |
akita11 | 20:c3fadeef5842 | 212 | void BleInitialize(void) |
akita11 | 20:c3fadeef5842 | 213 | { |
akita11 | 20:c3fadeef5842 | 214 | |
gomihgy | 6:bc960e6fd1ed | 215 | uint8_t advertiseServiceID[16]; |
akita11 | 20:c3fadeef5842 | 216 | |
gomihgy | 5:1730064b94bd | 217 | // Initialize |
gomihgy | 5:1730064b94bd | 218 | ble.init(); |
akita11 | 20:c3fadeef5842 | 219 | |
gomihgy | 5:1730064b94bd | 220 | // Event Set |
gomihgy | 5:1730064b94bd | 221 | ble.onConnection(&BLEConnectionCallback); |
gomihgy | 5:1730064b94bd | 222 | ble.onDisconnection(&BLEDisconnectionCallback); |
gomihgy | 12:880400fa5c44 | 223 | ble.onRadioNotification(&BLERadioNotificationCallback); |
akita11 | 20:c3fadeef5842 | 224 | |
gomihgy | 5:1730064b94bd | 225 | ble.getPreferredConnectionParams(&connectionParams); |
gomihgy | 6:bc960e6fd1ed | 226 | connectionParams.maxConnectionInterval = INTERVAL_500MSEC; |
gomihgy | 6:bc960e6fd1ed | 227 | connectionParams.minConnectionInterval = INTERVAL_500MSEC; |
gomihgy | 6:bc960e6fd1ed | 228 | connectionParams.connectionSupervisionTimeout = CONNTIMEOUT_3000MSEC; |
gomihgy | 6:bc960e6fd1ed | 229 | connectionParams.slaveLatency = 2; |
gomihgy | 5:1730064b94bd | 230 | ble.setPreferredConnectionParams(&connectionParams); |
akita11 | 20:c3fadeef5842 | 231 | |
gomihgy | 5:1730064b94bd | 232 | ble.setTxPower(BLE_TXPOWER_4DBM); |
akita11 | 20:c3fadeef5842 | 233 | |
akita11 | 20:c3fadeef5842 | 234 | for(int i=0; i<16; i++) { |
gomihgy | 6:bc960e6fd1ed | 235 | advertiseServiceID[i] = UUID_HACARUS_WEIGHT_SERVICE[16 - 1 - i]; |
gomihgy | 6:bc960e6fd1ed | 236 | } |
gomihgy | 6:bc960e6fd1ed | 237 | |
gomihgy | 5:1730064b94bd | 238 | ble.accumulateAdvertisingPayload((GapAdvertisingData::Flags)(GapAdvertisingData::LE_GENERAL_DISCOVERABLE | GapAdvertisingData::BREDR_NOT_SUPPORTED)); |
gomihgy | 5:1730064b94bd | 239 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, |
akita11 | 20:c3fadeef5842 | 240 | (const uint8_t *)DEVICE_NAME, |
akita11 | 20:c3fadeef5842 | 241 | strlen(DEVICE_NAME)); |
gomihgy | 5:1730064b94bd | 242 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
gomihgy | 6:bc960e6fd1ed | 243 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
gomihgy | 6:bc960e6fd1ed | 244 | (const uint8_t *)advertiseServiceID, sizeof(advertiseServiceID)); |
akita11 | 20:c3fadeef5842 | 245 | |
gomihgy | 12:880400fa5c44 | 246 | ble.setAdvertisingInterval(INTERVAL_500MSEC); |
gomihgy | 5:1730064b94bd | 247 | ble.setAdvertisingTimeout(ADV_TIMEOUT); /* 0 is disable the advertising timeout. */ |
akita11 | 20:c3fadeef5842 | 248 | |
masaaki_makabe | 31:b5e19d153db4 | 249 | /*S-----------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 250 | /*CurrentTimeServiceの初期化とサービス追加*/ |
masaaki_makabe | 31:b5e19d153db4 | 251 | ble_date_time_t dt; // 1970/1/1 00:00:00 以降の初期値 |
masaaki_makabe | 31:b5e19d153db4 | 252 | dt.year = 2016; |
masaaki_makabe | 31:b5e19d153db4 | 253 | dt.month = 7; |
masaaki_makabe | 31:b5e19d153db4 | 254 | dt.day = 31; |
masaaki_makabe | 31:b5e19d153db4 | 255 | dt.hours = 23; |
masaaki_makabe | 31:b5e19d153db4 | 256 | dt.minutes = 45; |
masaaki_makabe | 31:b5e19d153db4 | 257 | dt.seconds = 0; |
masaaki_makabe | 31:b5e19d153db4 | 258 | p_CurrentTimeService = new CurrentTimeService(ble, dt); |
masaaki_makabe | 31:b5e19d153db4 | 259 | /*E-----------------------------------------------------------------------*/ |
gomihgy | 6:bc960e6fd1ed | 260 | ble.addService(HWS); |
gomihgy | 5:1730064b94bd | 261 | ble.addService(DIS); |
masaaki_makabe | 36:3cca74c30551 | 262 | // DFUサービスがスタックに割り当たっていたのをヒープへ移動 |
masaaki_makabe | 36:3cca74c30551 | 263 | //DFUService dfu(ble); |
masaaki_makabe | 36:3cca74c30551 | 264 | p_dfu = new DFUService(ble); |
gomihgy | 5:1730064b94bd | 265 | } |
masaaki_makabe | 31:b5e19d153db4 | 266 | /*S---------------------------------------------------------------------*/ |
masaaki_makabe | 33:d7b53d548c33 | 267 | /*キー押されて1sec経過すればコールバックされる*/ |
masaaki_makabe | 33:d7b53d548c33 | 268 | int _key1sec = 0; |
masaaki_makabe | 33:d7b53d548c33 | 269 | bool _analog_skip = false; |
masaaki_makabe | 33:d7b53d548c33 | 270 | void KeyOn(void) |
masaaki_makabe | 33:d7b53d548c33 | 271 | { |
masaaki_makabe | 33:d7b53d548c33 | 272 | _key1sec = 1; |
masaaki_makabe | 33:d7b53d548c33 | 273 | } |
masaaki_makabe | 31:b5e19d153db4 | 274 | void AccelInit(void) |
masaaki_makabe | 31:b5e19d153db4 | 275 | { |
masaaki_makabe | 31:b5e19d153db4 | 276 | /*加速度センサー初期化*/ |
masaaki_makabe | 31:b5e19d153db4 | 277 | p_MMA845x = new MMA845x(i2c, MMA845x::SA0_VSS); |
masaaki_makabe | 31:b5e19d153db4 | 278 | //p_MMA845x->attachZAxisPulse(&zTap); |
masaaki_makabe | 31:b5e19d153db4 | 279 | |
masaaki_makabe | 31:b5e19d153db4 | 280 | const int ADR = 0x3A; |
masaaki_makabe | 31:b5e19d153db4 | 281 | char data[2], cmd = 0x0D; |
masaaki_makabe | 31:b5e19d153db4 | 282 | i2c.write(ADR, &cmd, 1, true); |
masaaki_makabe | 31:b5e19d153db4 | 283 | i2c.read(ADR, &data[0], 1); // data[0]: Who am I? |
masaaki_makabe | 31:b5e19d153db4 | 284 | |
masaaki_makabe | 31:b5e19d153db4 | 285 | //p_MMA845x->enableMotionMode(); |
masaaki_makabe | 31:b5e19d153db4 | 286 | //p_MMA845x->registerDump(); |
masaaki_makabe | 31:b5e19d153db4 | 287 | p_MMA845x->enableDataReadyMode(); |
masaaki_makabe | 33:d7b53d548c33 | 288 | |
masaaki_makabe | 33:d7b53d548c33 | 289 | io.attach(&KeyOn); |
masaaki_makabe | 31:b5e19d153db4 | 290 | } |
masaaki_makabe | 31:b5e19d153db4 | 291 | /*モード決定*/ |
masaaki_makabe | 31:b5e19d153db4 | 292 | void GetMode(void) |
masaaki_makabe | 31:b5e19d153db4 | 293 | { |
masaaki_makabe | 31:b5e19d153db4 | 294 | // 横置きなら時計タイマーモード、縦置きなら計量モード |
masaaki_makabe | 31:b5e19d153db4 | 295 | //int x = p_MMA845x->getX(); |
masaaki_makabe | 31:b5e19d153db4 | 296 | //int y = p_MMA845x->getY(); |
masaaki_makabe | 31:b5e19d153db4 | 297 | //int z = p_MMA845x->getZ(); |
masaaki_makabe | 31:b5e19d153db4 | 298 | float xx = p_MMA845x->getXX(); |
masaaki_makabe | 31:b5e19d153db4 | 299 | _mode = (xx < 0.3) ? M_SCALE : M_WATCHTIMER; |
masaaki_makabe | 31:b5e19d153db4 | 300 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 301 | pc.printf("KATAMUKI xx=%f, mode=%s\r\n", xx, (_mode == M_SCALE) ? "SCALE" : "WATCHTIMER"); |
masaaki_makabe | 31:b5e19d153db4 | 302 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 303 | } |
masaaki_makabe | 31:b5e19d153db4 | 304 | /*STATE決定*/ |
masaaki_makabe | 31:b5e19d153db4 | 305 | void GetState(int sw) |
masaaki_makabe | 31:b5e19d153db4 | 306 | { |
masaaki_makabe | 31:b5e19d153db4 | 307 | ble_date_time_t dt; |
masaaki_makabe | 31:b5e19d153db4 | 308 | // スイッチ長押しでタイマー、通常押しで時間表示 |
masaaki_makabe | 31:b5e19d153db4 | 309 | if(sw == exio::LongPressed) { |
masaaki_makabe | 31:b5e19d153db4 | 310 | p_CurrentTimeService->setCounter(0); // タイマーカウンタリセット |
masaaki_makabe | 31:b5e19d153db4 | 311 | io.displaySeconds(0); |
masaaki_makabe | 31:b5e19d153db4 | 312 | _state = S_TIMER; |
masaaki_makabe | 31:b5e19d153db4 | 313 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 314 | pc.printf("S_TIMER START\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 315 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 316 | } else if(sw == exio::Pressed){ |
masaaki_makabe | 31:b5e19d153db4 | 317 | p_CurrentTimeService->setTm(60/*sec*/); /*表示タイムアウト*/ |
masaaki_makabe | 31:b5e19d153db4 | 318 | p_CurrentTimeService->readDateTime(dt); // 時計取得 |
masaaki_makabe | 31:b5e19d153db4 | 319 | io.displayHHMM(dt); |
masaaki_makabe | 31:b5e19d153db4 | 320 | _state = S_WATCH; |
masaaki_makabe | 31:b5e19d153db4 | 321 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 322 | pc.printf("S_WATCH START\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 323 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 324 | } |
masaaki_makabe | 31:b5e19d153db4 | 325 | } |
masaaki_makabe | 31:b5e19d153db4 | 326 | int TMain(int sw) |
masaaki_makabe | 31:b5e19d153db4 | 327 | { |
masaaki_makabe | 31:b5e19d153db4 | 328 | /*下記は時計/タイマーモード*/ |
masaaki_makabe | 31:b5e19d153db4 | 329 | ble_date_time_t dt; |
masaaki_makabe | 31:b5e19d153db4 | 330 | int t; |
masaaki_makabe | 31:b5e19d153db4 | 331 | switch(_state){ |
masaaki_makabe | 31:b5e19d153db4 | 332 | case S_TIMER: |
masaaki_makabe | 31:b5e19d153db4 | 333 | /*タイマー表示の場合*/ |
masaaki_makabe | 31:b5e19d153db4 | 334 | t = p_CurrentTimeService->getCounter(); |
masaaki_makabe | 31:b5e19d153db4 | 335 | io.displaySeconds(t); // タイマー表示 |
masaaki_makabe | 31:b5e19d153db4 | 336 | // スイッチ押された場合終了 |
masaaki_makabe | 31:b5e19d153db4 | 337 | if(sw != exio::None){ |
masaaki_makabe | 31:b5e19d153db4 | 338 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 339 | pc.printf("S_TIMER EXIT\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 340 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 341 | return 1; // モード終了 |
masaaki_makabe | 31:b5e19d153db4 | 342 | } |
masaaki_makabe | 31:b5e19d153db4 | 343 | break; |
masaaki_makabe | 31:b5e19d153db4 | 344 | case S_WATCH: |
masaaki_makabe | 31:b5e19d153db4 | 345 | /*時計表示の場合*/ |
masaaki_makabe | 31:b5e19d153db4 | 346 | p_CurrentTimeService->readDateTime(dt); // 時計取得 |
masaaki_makabe | 31:b5e19d153db4 | 347 | io.displayHHMM(dt); // 時計表示 |
masaaki_makabe | 31:b5e19d153db4 | 348 | // 表示タイムアウトもしくはスイッチ押しの場合終了 |
masaaki_makabe | 31:b5e19d153db4 | 349 | if(/*p_CurrentTimeService->getTm() <= 0 ||*/ sw != exio::None){ // タイムアウトorスイッチ押し |
masaaki_makabe | 31:b5e19d153db4 | 350 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 351 | pc.printf("S_WATCH EXIT\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 352 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 353 | return 1; // モード終了 |
masaaki_makabe | 31:b5e19d153db4 | 354 | } |
masaaki_makabe | 31:b5e19d153db4 | 355 | break; |
masaaki_makabe | 31:b5e19d153db4 | 356 | default: |
masaaki_makabe | 31:b5e19d153db4 | 357 | break; |
masaaki_makabe | 31:b5e19d153db4 | 358 | } |
masaaki_makabe | 31:b5e19d153db4 | 359 | return 0; // モード継続 |
masaaki_makabe | 31:b5e19d153db4 | 360 | } |
masaaki_makabe | 31:b5e19d153db4 | 361 | /*E-----------------------------------------------------------------------*/ |
gomihgy | 5:1730064b94bd | 362 | |
masaaki_makabe | 29:09406be35ef4 | 363 | //DigitalOut _reg_ps(P0_1, 1); // 1=normal, 0=power_save |
masaaki_makabe | 29:09406be35ef4 | 364 | //DigitalOut _adc_rate(P0_6, 1); // 0=10Hz, 1=80Hz (HX711's RATE pin) |
masaaki_makabe | 29:09406be35ef4 | 365 | |
akita11 | 0:08c8325a21ec | 366 | int main() |
akita11 | 0:08c8325a21ec | 367 | { |
masaaki_makabe | 31:b5e19d153db4 | 368 | /*S----------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 369 | int sw; |
masaaki_makabe | 31:b5e19d153db4 | 370 | /*E----------------------------------------------------*/ |
akita11 | 24:c6ef55535900 | 371 | float weight_s; |
akita11 | 24:c6ef55535900 | 372 | int Navg = 5; |
akita11 | 24:c6ef55535900 | 373 | int sample = 0; |
gomihgy | 5:1730064b94bd | 374 | #ifdef UART_DEBUG |
gomihgy | 5:1730064b94bd | 375 | pc.baud(UART_BAUD_RATE); |
masaaki_makabe | 31:b5e19d153db4 | 376 | pc.printf("%s(%d): Program Start\r\n", __FILE__, __LINE__); |
masaaki_makabe | 29:09406be35ef4 | 377 | // for checking SPI configuration (SPI1 is used_) |
masaaki_makabe | 29:09406be35ef4 | 378 | // pc.printf("SPI->PSELSCK = %x\r\n", NRF_SPI0->PSELSCK); // will be 15 (P0_15) |
masaaki_makabe | 29:09406be35ef4 | 379 | // pc.printf("SPI->PSELMISO = %x\r\n", NRF_SPI0->PSELMISO); // will be 13 (P0_13) |
masaaki_makabe | 29:09406be35ef4 | 380 | // pc.printf("SPI->PSELMOSI = %x\r\n", NRF_SPI0->PSELMOSI); // will be 14 (P0_14): dummy |
masaaki_makabe | 29:09406be35ef4 | 381 | // pc.printf("SPI->PSELSCK = %x\r\n", NRF_SPI1->PSELSCK); // will be 15 (P0_15) |
masaaki_makabe | 29:09406be35ef4 | 382 | // pc.printf("SPI->PSELMISO = %x\r\n", NRF_SPI1->PSELMISO); // will be 13 (P0_13) |
masaaki_makabe | 29:09406be35ef4 | 383 | // pc.printf("SPI->PSELMOSI = %x\r\n", NRF_SPI1->PSELMOSI); // will be 14 (P0_14): dummy |
gomihgy | 5:1730064b94bd | 384 | #endif |
akita11 | 21:ab5b55d1947d | 385 | #ifdef PCB_VER3 |
akita11 | 10:95c1e5a218d5 | 386 | // set XTAL=32MHz for TaiyoYuden's module |
akita11 | 11:be439189e3f7 | 387 | // is moved to mbed-src/targets/cmsis/TARGET_NORDIC/TARGET_MCU_NRF51822/system_nrf51.c |
akita11 | 11:be439189e3f7 | 388 | DEBUG("UICR->XTALFREQ=%x\r\n", NRF_UICR->XTALFREQ); // this should be 0xffffff00, not 0xffffffff |
akita11 | 10:95c1e5a218d5 | 389 | #endif |
akita11 | 10:95c1e5a218d5 | 390 | |
akita11 | 10:95c1e5a218d5 | 391 | BleInitialize(); |
masaaki_makabe | 31:b5e19d153db4 | 392 | /*S-----------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 393 | AccelInit(); |
masaaki_makabe | 31:b5e19d153db4 | 394 | /*E-----------------------------------------------*/ |
gomihgy | 16:fc66feb533d0 | 395 | AppInit(); |
gomihgy | 28:d8c652994988 | 396 | |
akita11 | 20:c3fadeef5842 | 397 | led_mode = MODE_OFF; |
akita11 | 27:8c3c29b3f704 | 398 | #ifdef DISPLAY_DEMO |
akita11 | 27:8c3c29b3f704 | 399 | uint16_t d = 0; |
akita11 | 27:8c3c29b3f704 | 400 | uint8_t demo_count = 0; |
akita11 | 27:8c3c29b3f704 | 401 | led_mode = MODE_START; // for debug mode |
akita11 | 27:8c3c29b3f704 | 402 | #endif |
gomihgy | 6:bc960e6fd1ed | 403 | for (;; ) { |
gomihgy | 14:81347f8f0bda | 404 | // 100msec waitForEvent |
gomihgy | 14:81347f8f0bda | 405 | t.reset(); |
akita11 | 20:c3fadeef5842 | 406 | while(t.read_ms() < LED_INTERVAL_MSEC) { |
gomihgy | 16:fc66feb533d0 | 407 | t.start(); |
gomihgy | 14:81347f8f0bda | 408 | ble.waitForEvent(); |
gomihgy | 16:fc66feb533d0 | 409 | t.stop(); |
gomihgy | 14:81347f8f0bda | 410 | } |
akita11 | 20:c3fadeef5842 | 411 | switch(led_mode) { |
gomihgy | 14:81347f8f0bda | 412 | case MODE_OFF: |
akita11 | 20:c3fadeef5842 | 413 | io.analog_pow(0); |
akita11 | 20:c3fadeef5842 | 414 | io.display(0); |
masaaki_makabe | 31:b5e19d153db4 | 415 | /*S--------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 416 | sw = io.get_switch(); |
masaaki_makabe | 31:b5e19d153db4 | 417 | io.switch_reset(); |
masaaki_makabe | 31:b5e19d153db4 | 418 | if(sw != exio::None) {/*通常押しもしくは長押し*/ |
masaaki_makabe | 33:d7b53d548c33 | 419 | _key1sec = 0; |
masaaki_makabe | 33:d7b53d548c33 | 420 | io.CallFlagClear(); |
masaaki_makabe | 31:b5e19d153db4 | 421 | GetMode(); /*傾きからモード決定*/ |
masaaki_makabe | 31:b5e19d153db4 | 422 | if(_mode == M_WATCHTIMER){ |
masaaki_makabe | 31:b5e19d153db4 | 423 | GetState(sw); //WATCH or TIMER ? |
masaaki_makabe | 31:b5e19d153db4 | 424 | } |
masaaki_makabe | 31:b5e19d153db4 | 425 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 426 | pc.printf("GO MODE_START\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 427 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 428 | /*E--------------------------------------------------------------------*/ |
gomihgy | 14:81347f8f0bda | 429 | led_mode = MODE_START; |
gomihgy | 14:81347f8f0bda | 430 | } |
masaaki_makabe | 33:d7b53d548c33 | 431 | /*S---------------------------------------------------------------------------*/ |
masaaki_makabe | 33:d7b53d548c33 | 432 | else { |
masaaki_makabe | 33:d7b53d548c33 | 433 | // キー押された状態で1sec経過した場合表示のみ開始、Timerモード開始は後ほど |
masaaki_makabe | 33:d7b53d548c33 | 434 | if(_key1sec == 1){ |
masaaki_makabe | 33:d7b53d548c33 | 435 | _mode = M_WATCHTIMER; |
masaaki_makabe | 33:d7b53d548c33 | 436 | _state = S_TIMER; |
masaaki_makabe | 33:d7b53d548c33 | 437 | io.analog_pow(1); |
masaaki_makabe | 33:d7b53d548c33 | 438 | io.power_save_mode(0); |
masaaki_makabe | 33:d7b53d548c33 | 439 | _analog_skip = true; |
masaaki_makabe | 33:d7b53d548c33 | 440 | io.displaySeconds(0); |
masaaki_makabe | 33:d7b53d548c33 | 441 | //io.display_unitT(); |
masaaki_makabe | 33:d7b53d548c33 | 442 | _key1sec = 2; |
masaaki_makabe | 33:d7b53d548c33 | 443 | } else if(_key1sec == 2){ |
masaaki_makabe | 33:d7b53d548c33 | 444 | led_brightness += BRIGHTNESS_ADDVALUE; // 徐々に明るく |
masaaki_makabe | 33:d7b53d548c33 | 445 | io.display(led_brightness); |
masaaki_makabe | 33:d7b53d548c33 | 446 | if(led_brightness >= BRIGHTNESS_MAXVALUE) _key1sec = 3; |
masaaki_makabe | 33:d7b53d548c33 | 447 | } else { |
masaaki_makabe | 33:d7b53d548c33 | 448 | io.display(led_brightness); |
masaaki_makabe | 33:d7b53d548c33 | 449 | } |
masaaki_makabe | 33:d7b53d548c33 | 450 | } |
masaaki_makabe | 33:d7b53d548c33 | 451 | /*E---------------------------------------------------------------------------*/ |
akita11 | 20:c3fadeef5842 | 452 | break; |
gomihgy | 14:81347f8f0bda | 453 | case MODE_START: |
masaaki_makabe | 33:d7b53d548c33 | 454 | //if(_analog_skip) {_analog_skip=false; goto L090;} |
akita11 | 20:c3fadeef5842 | 455 | io.analog_pow(1); |
akita11 | 24:c6ef55535900 | 456 | io.power_save_mode(0); |
masaaki_makabe | 31:b5e19d153db4 | 457 | /*S----------------------------------------------------------------*/ |
masaaki_makabe | 33:d7b53d548c33 | 458 | //L090: |
masaaki_makabe | 31:b5e19d153db4 | 459 | // タイマー時はここで毎回更新 |
masaaki_makabe | 33:d7b53d548c33 | 460 | //if(_mode == M_WATCHTIMER && _state == S_TIMER){ |
masaaki_makabe | 33:d7b53d548c33 | 461 | // p_CurrentTimeService->setCounter(0); // タイマーカウンタリセット |
masaaki_makabe | 33:d7b53d548c33 | 462 | // io.displaySeconds(0); |
masaaki_makabe | 33:d7b53d548c33 | 463 | /*} else*/ if(_mode == M_SCALE){ |
masaaki_makabe | 31:b5e19d153db4 | 464 | io.display_value = 0; |
masaaki_makabe | 31:b5e19d153db4 | 465 | } |
masaaki_makabe | 31:b5e19d153db4 | 466 | /*E----------------------------------------------------------------*/ |
gomihgy | 14:81347f8f0bda | 467 | led_brightness += BRIGHTNESS_ADDVALUE; |
gomihgy | 14:81347f8f0bda | 468 | io.display(led_brightness); |
akita11 | 20:c3fadeef5842 | 469 | if(led_brightness >= BRIGHTNESS_MAXVALUE) { |
masaaki_makabe | 31:b5e19d153db4 | 470 | /*S-----------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 471 | if(_mode == M_WATCHTIMER){ |
masaaki_makabe | 31:b5e19d153db4 | 472 | ble.startAdvertising(); |
masaaki_makabe | 31:b5e19d153db4 | 473 | led_mode = MODE_ON; |
masaaki_makabe | 31:b5e19d153db4 | 474 | break; /*時間/タイマーモードはここで終了*/ |
masaaki_makabe | 31:b5e19d153db4 | 475 | } |
masaaki_makabe | 31:b5e19d153db4 | 476 | /*E-----------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 477 | /*計量モードの初期処理*/ |
gomihgy | 14:81347f8f0bda | 478 | update_counter = 0; |
masaaki_makabe | 31:b5e19d153db4 | 479 | io.calibrate_weight(); /*ここがゼロ補正*/ |
akita11 | 20:c3fadeef5842 | 480 | #if defined(PCB_VER1) || defined(PCB_VER2) |
gomihgy | 16:fc66feb533d0 | 481 | SWInit(); |
akita11 | 20:c3fadeef5842 | 482 | #endif |
gomihgy | 16:fc66feb533d0 | 483 | ble.startAdvertising(); |
gomihgy | 14:81347f8f0bda | 484 | led_mode = MODE_ON; |
akita11 | 24:c6ef55535900 | 485 | weight_s = 0.0; |
akita11 | 24:c6ef55535900 | 486 | sample = 0; |
gomihgy | 14:81347f8f0bda | 487 | } |
akita11 | 20:c3fadeef5842 | 488 | break; |
gomihgy | 14:81347f8f0bda | 489 | case MODE_ON: |
akita11 | 24:c6ef55535900 | 490 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 491 | //pc.printf("%d %d %.2f\r\n", io.get_switch(), io.get_weight_raw(), io.get_weight()); |
akita11 | 24:c6ef55535900 | 492 | #endif |
akita11 | 20:c3fadeef5842 | 493 | io.analog_pow(1); |
akita11 | 27:8c3c29b3f704 | 494 | #ifdef DISPLAY_DEMO |
akita11 | 27:8c3c29b3f704 | 495 | demo_count++; |
gomihgy | 28:d8c652994988 | 496 | if (demo_count == 10) { |
akita11 | 27:8c3c29b3f704 | 497 | demo_count = 0; |
akita11 | 27:8c3c29b3f704 | 498 | io.display_value = d++; // increment display value for every 1s in demo mode |
gomihgy | 28:d8c652994988 | 499 | weight_data = quick_ieee11073_from_float(d); |
gomihgy | 28:d8c652994988 | 500 | ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(), |
gomihgy | 28:d8c652994988 | 501 | (uint8_t *)&weight_data, |
gomihgy | 28:d8c652994988 | 502 | sizeof(weight_data)); |
akita11 | 27:8c3c29b3f704 | 503 | } |
akita11 | 27:8c3c29b3f704 | 504 | #else |
masaaki_makabe | 31:b5e19d153db4 | 505 | /*S-------------------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 506 | sw = io.get_switch(); |
masaaki_makabe | 31:b5e19d153db4 | 507 | io.switch_reset(); |
masaaki_makabe | 31:b5e19d153db4 | 508 | if(_mode == M_WATCHTIMER){ |
masaaki_makabe | 31:b5e19d153db4 | 509 | int ret = TMain(sw); // 時間/タイマー処理へ |
masaaki_makabe | 31:b5e19d153db4 | 510 | if(ret == 1){ // モード終了 |
masaaki_makabe | 31:b5e19d153db4 | 511 | goto L010; |
masaaki_makabe | 31:b5e19d153db4 | 512 | } |
masaaki_makabe | 31:b5e19d153db4 | 513 | break; // 時間/タイマーモードはここで終了 |
masaaki_makabe | 31:b5e19d153db4 | 514 | } |
masaaki_makabe | 31:b5e19d153db4 | 515 | /*下記は計量モード*/ |
masaaki_makabe | 31:b5e19d153db4 | 516 | if(sw == exio::Pressed) { |
masaaki_makabe | 31:b5e19d153db4 | 517 | L010: |
masaaki_makabe | 31:b5e19d153db4 | 518 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 519 | pc.printf("GO MODE_END\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 520 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 521 | /*E-------------------------------------------------------------------------*/ |
gomihgy | 14:81347f8f0bda | 522 | led_mode = MODE_END; |
akita11 | 20:c3fadeef5842 | 523 | if(ble.getGapState().connected) { |
gomihgy | 14:81347f8f0bda | 524 | ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION); |
akita11 | 20:c3fadeef5842 | 525 | } else { |
gomihgy | 14:81347f8f0bda | 526 | ble.stopAdvertising(); |
gomihgy | 14:81347f8f0bda | 527 | } |
akita11 | 20:c3fadeef5842 | 528 | } else { |
gomihgy | 18:d1d15ec580fa | 529 | scale++; |
gomihgy | 18:d1d15ec580fa | 530 | ble.updateCharacteristicValue(WeightScale.getValueAttribute().getHandle(), |
akita11 | 20:c3fadeef5842 | 531 | (uint8_t *)&scale, |
akita11 | 20:c3fadeef5842 | 532 | sizeof(scale)); |
akita11 | 20:c3fadeef5842 | 533 | |
akita11 | 24:c6ef55535900 | 534 | weight_s += io.get_weight(); |
akita11 | 24:c6ef55535900 | 535 | sample++; |
gomihgy | 28:d8c652994988 | 536 | if (sample == Navg) { |
akita11 | 24:c6ef55535900 | 537 | weight = weight_s / (float)Navg; |
akita11 | 24:c6ef55535900 | 538 | io.display_value = (uint16_t)weight; |
akita11 | 24:c6ef55535900 | 539 | weight_s = 0.0; |
akita11 | 24:c6ef55535900 | 540 | sample = 0; |
masaaki_makabe | 31:b5e19d153db4 | 541 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 542 | pc.printf("weight=%.1f\r\n", weight); |
masaaki_makabe | 31:b5e19d153db4 | 543 | #endif |
akita11 | 24:c6ef55535900 | 544 | } |
akita11 | 24:c6ef55535900 | 545 | // pc.printf("weight=%.1f\r\n", weight); |
akita11 | 20:c3fadeef5842 | 546 | // io.display_value = 8888; // for LED soldering check |
akita11 | 20:c3fadeef5842 | 547 | #ifdef UART_DEBUG |
akita11 | 21:ab5b55d1947d | 548 | // pc.printf("%d\r\n", io._get_adc_raw(0)); |
akita11 | 20:c3fadeef5842 | 549 | // pc.printf("weight=%f %d / %d\r\n", weight, io.display_value, io._adc0); |
akita11 | 20:c3fadeef5842 | 550 | #endif |
akita11 | 20:c3fadeef5842 | 551 | if(++update_counter >= 5) { |
akita11 | 20:c3fadeef5842 | 552 | weight_data = quick_ieee11073_from_float(weight); |
akita11 | 20:c3fadeef5842 | 553 | ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(), |
akita11 | 20:c3fadeef5842 | 554 | (uint8_t *)&weight_data, |
akita11 | 20:c3fadeef5842 | 555 | sizeof(weight_data)); |
akita11 | 20:c3fadeef5842 | 556 | update_counter = 0; |
gomihgy | 14:81347f8f0bda | 557 | } |
gomihgy | 14:81347f8f0bda | 558 | } |
akita11 | 27:8c3c29b3f704 | 559 | #endif |
akita11 | 20:c3fadeef5842 | 560 | break; |
gomihgy | 14:81347f8f0bda | 561 | case MODE_END: |
gomihgy | 14:81347f8f0bda | 562 | led_brightness -= BRIGHTNESS_ADDVALUE; |
gomihgy | 14:81347f8f0bda | 563 | io.display(led_brightness); |
akita11 | 20:c3fadeef5842 | 564 | if(led_brightness <= BRIGHTNESS_MINVALUE) { |
akita11 | 20:c3fadeef5842 | 565 | #if defined(PCB_VER1) || defined(PCB_VER2) |
gomihgy | 16:fc66feb533d0 | 566 | SWInit(); |
akita11 | 20:c3fadeef5842 | 567 | #endif |
gomihgy | 14:81347f8f0bda | 568 | led_mode = MODE_OFF; |
akita11 | 24:c6ef55535900 | 569 | io.power_save_mode(1); |
gomihgy | 14:81347f8f0bda | 570 | } |
akita11 | 20:c3fadeef5842 | 571 | break; |
gomihgy | 14:81347f8f0bda | 572 | } |
akita11 | 0:08c8325a21ec | 573 | } |
akita11 | 0:08c8325a21ec | 574 | } |