test publish
Dependencies: BLE_API nRF51822 mbed
Fork of KS7 by
exio.h@33:d7b53d548c33, 2016-08-10 (annotated)
- Committer:
- masaaki_makabe
- Date:
- Wed Aug 10 06:56:36 2016 +0000
- Branch:
- KS3
- Revision:
- 33:d7b53d548c33
- Parent:
- 31:b5e19d153db4
1.BLE????????????????; 2.Timer??????????????LED??????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
masaaki_makabe | 31:b5e19d153db4 | 1 | /*------------------------------------------------------------ |
masaaki_makabe | 31:b5e19d153db4 | 2 | exio.h |
masaaki_makabe | 31:b5e19d153db4 | 3 | 拡張内容 |
masaaki_makabe | 31:b5e19d153db4 | 4 | ・スイッチ長押し/通常押しの区別 |
masaaki_makabe | 31:b5e19d153db4 | 5 | ・秒をHH:MM表示する。 |
masaaki_makabe | 31:b5e19d153db4 | 6 | ・HH:MMをLED表示する。 |
masaaki_makabe | 31:b5e19d153db4 | 7 | -------------------------------------------------------------*/ |
masaaki_makabe | 31:b5e19d153db4 | 8 | #ifndef __EXIO_H__ |
masaaki_makabe | 31:b5e19d153db4 | 9 | #define __EXIO_H__ |
masaaki_makabe | 31:b5e19d153db4 | 10 | |
masaaki_makabe | 31:b5e19d153db4 | 11 | #include "mbed.h" |
masaaki_makabe | 31:b5e19d153db4 | 12 | #include "io.h" |
masaaki_makabe | 31:b5e19d153db4 | 13 | #include "app_util.h" |
masaaki_makabe | 31:b5e19d153db4 | 14 | #include <time.h> |
masaaki_makabe | 31:b5e19d153db4 | 15 | #include "ble_date_time.h" |
masaaki_makabe | 31:b5e19d153db4 | 16 | #include "common.h" |
masaaki_makabe | 31:b5e19d153db4 | 17 | |
masaaki_makabe | 31:b5e19d153db4 | 18 | class exio : public io |
masaaki_makabe | 31:b5e19d153db4 | 19 | { |
masaaki_makabe | 31:b5e19d153db4 | 20 | protected: |
masaaki_makabe | 31:b5e19d153db4 | 21 | /*単位の表示*/ |
masaaki_makabe | 31:b5e19d153db4 | 22 | virtual void display_unit(void) |
masaaki_makabe | 31:b5e19d153db4 | 23 | { |
masaaki_makabe | 31:b5e19d153db4 | 24 | // [row6] D56-D49 |
masaaki_makabe | 31:b5e19d153db4 | 25 | // [row7] D64-D57 |
masaaki_makabe | 31:b5e19d153db4 | 26 | // |
masaaki_makabe | 31:b5e19d153db4 | 27 | // D53 D54 D55 * * * |
masaaki_makabe | 31:b5e19d153db4 | 28 | // D56 D57 D58 * |
masaaki_makabe | 31:b5e19d153db4 | 29 | // D59 D60 D61 * |
masaaki_makabe | 31:b5e19d153db4 | 30 | // D62 D63 D64 * |
masaaki_makabe | 31:b5e19d153db4 | 31 | // |
masaaki_makabe | 31:b5e19d153db4 | 32 | if(_mode == M_SCALE){ // (SCALE) G |
masaaki_makabe | 31:b5e19d153db4 | 33 | _row_out[6] |= 0xf0; |
masaaki_makabe | 31:b5e19d153db4 | 34 | _row_out[7] |= 0xf4; |
masaaki_makabe | 31:b5e19d153db4 | 35 | _cnt = 0; |
masaaki_makabe | 31:b5e19d153db4 | 36 | } else if(_mode == M_WATCHTIMER && _state == S_WATCH){ // (WATCH) .(period) |
masaaki_makabe | 31:b5e19d153db4 | 37 | if(_cnt < 5){ |
masaaki_makabe | 31:b5e19d153db4 | 38 | L001: |
masaaki_makabe | 31:b5e19d153db4 | 39 | _row_out[6] |= 0x00; // 単位表示 |
masaaki_makabe | 31:b5e19d153db4 | 40 | _row_out[7] |= 0x20; |
masaaki_makabe | 31:b5e19d153db4 | 41 | } else if(_cnt < 10){ |
masaaki_makabe | 31:b5e19d153db4 | 42 | _row_out[6] &= 0x0f; // 単位消去 |
masaaki_makabe | 31:b5e19d153db4 | 43 | _row_out[7] &= 0x00; |
masaaki_makabe | 31:b5e19d153db4 | 44 | } else { |
masaaki_makabe | 31:b5e19d153db4 | 45 | _cnt = 0; |
masaaki_makabe | 31:b5e19d153db4 | 46 | goto L001; |
masaaki_makabe | 31:b5e19d153db4 | 47 | } |
masaaki_makabe | 31:b5e19d153db4 | 48 | } else if(_mode == M_WATCHTIMER && _state == S_TIMER){ // (TIME) T |
masaaki_makabe | 31:b5e19d153db4 | 49 | _row_out[6] |= (0x10 + 0x20 + 0x40); |
masaaki_makabe | 31:b5e19d153db4 | 50 | _row_out[7] |= (0x01 + 0x08 + 0x40); |
masaaki_makabe | 31:b5e19d153db4 | 51 | _cnt = 0; |
masaaki_makabe | 31:b5e19d153db4 | 52 | } |
masaaki_makabe | 31:b5e19d153db4 | 53 | } |
masaaki_makabe | 33:d7b53d548c33 | 54 | /*void display_unitT(void) |
masaaki_makabe | 33:d7b53d548c33 | 55 | { |
masaaki_makabe | 33:d7b53d548c33 | 56 | // 単位T表示 |
masaaki_makabe | 33:d7b53d548c33 | 57 | _row_out[6] |= (0x10 + 0x20 + 0x40); |
masaaki_makabe | 33:d7b53d548c33 | 58 | _row_out[7] |= (0x01 + 0x08 + 0x40); |
masaaki_makabe | 33:d7b53d548c33 | 59 | _cnt = 0; |
masaaki_makabe | 33:d7b53d548c33 | 60 | }*/ |
masaaki_makabe | 33:d7b53d548c33 | 61 | protected: |
masaaki_makabe | 31:b5e19d153db4 | 62 | /*100msec処理*/ |
masaaki_makabe | 31:b5e19d153db4 | 63 | virtual void TickerCallback(void) |
masaaki_makabe | 31:b5e19d153db4 | 64 | { |
masaaki_makabe | 31:b5e19d153db4 | 65 | _cnt++; |
masaaki_makabe | 31:b5e19d153db4 | 66 | // スイッチ状態を定期的に見る |
masaaki_makabe | 31:b5e19d153db4 | 67 | uint8_t sw = _sw->read(); |
masaaki_makabe | 31:b5e19d153db4 | 68 | if(sw == 1 && !_swFlag){// スイッチ押されたとき |
masaaki_makabe | 31:b5e19d153db4 | 69 | _counter = 0; |
masaaki_makabe | 31:b5e19d153db4 | 70 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 71 | _swFlag = true; |
masaaki_makabe | 31:b5e19d153db4 | 72 | |
masaaki_makabe | 31:b5e19d153db4 | 73 | } else if(sw == 0 && _swFlag){// スイッチ離されたとき |
masaaki_makabe | 31:b5e19d153db4 | 74 | _swFlag = false; |
masaaki_makabe | 31:b5e19d153db4 | 75 | if(_swState == None){ // スイッチ状態未決定の場合 |
masaaki_makabe | 31:b5e19d153db4 | 76 | if(_counter >= 10){ /*1sec*/ |
masaaki_makabe | 31:b5e19d153db4 | 77 | _swState = LongPressed; |
masaaki_makabe | 31:b5e19d153db4 | 78 | //printf("LongPressed\r\n"); |
masaaki_makabe | 33:d7b53d548c33 | 79 | } else { |
masaaki_makabe | 31:b5e19d153db4 | 80 | _swState = Pressed; |
masaaki_makabe | 31:b5e19d153db4 | 81 | //printf("Pressed\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 82 | } |
masaaki_makabe | 31:b5e19d153db4 | 83 | } |
masaaki_makabe | 31:b5e19d153db4 | 84 | } else { |
masaaki_makabe | 31:b5e19d153db4 | 85 | _counter++; |
masaaki_makabe | 33:d7b53d548c33 | 86 | // スイッチ押された状態で1sec経過したらコールバック |
masaaki_makabe | 33:d7b53d548c33 | 87 | if(_swFlag && _counter >= 10 && !_callFlag){ |
masaaki_makabe | 33:d7b53d548c33 | 88 | _callback.call(); |
masaaki_makabe | 33:d7b53d548c33 | 89 | _callFlag = true; // 1回コールすれば用済み |
masaaki_makabe | 33:d7b53d548c33 | 90 | } |
masaaki_makabe | 31:b5e19d153db4 | 91 | } |
masaaki_makabe | 31:b5e19d153db4 | 92 | _lastSW = sw; |
masaaki_makabe | 31:b5e19d153db4 | 93 | #ifdef UART_DEBUG |
masaaki_makabe | 33:d7b53d548c33 | 94 | //pc.printf("%d", sw); |
masaaki_makabe | 31:b5e19d153db4 | 95 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 96 | } |
masaaki_makabe | 31:b5e19d153db4 | 97 | |
masaaki_makabe | 31:b5e19d153db4 | 98 | public: |
masaaki_makabe | 31:b5e19d153db4 | 99 | /*コンストラクタ*/ |
masaaki_makabe | 31:b5e19d153db4 | 100 | exio() : io(P0_15, P0_13) |
masaaki_makabe | 31:b5e19d153db4 | 101 | { |
masaaki_makabe | 33:d7b53d548c33 | 102 | _callFlag = false; |
masaaki_makabe | 31:b5e19d153db4 | 103 | _cnt = 0; |
masaaki_makabe | 31:b5e19d153db4 | 104 | _swFlag = false; |
masaaki_makabe | 31:b5e19d153db4 | 105 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 106 | _ticker.attach(this, &exio::TickerCallback, 0.1); |
masaaki_makabe | 31:b5e19d153db4 | 107 | } |
masaaki_makabe | 31:b5e19d153db4 | 108 | |
masaaki_makabe | 31:b5e19d153db4 | 109 | /*スイッチ状態*/ |
masaaki_makabe | 31:b5e19d153db4 | 110 | typedef enum { |
masaaki_makabe | 31:b5e19d153db4 | 111 | None = 0, |
masaaki_makabe | 31:b5e19d153db4 | 112 | Pressed, |
masaaki_makabe | 31:b5e19d153db4 | 113 | LongPressed, |
masaaki_makabe | 31:b5e19d153db4 | 114 | } Switch_t; |
masaaki_makabe | 31:b5e19d153db4 | 115 | |
masaaki_makabe | 31:b5e19d153db4 | 116 | /*スイッチ状態の取得 ==> スーパークラスのものを上書き*/ |
masaaki_makabe | 31:b5e19d153db4 | 117 | virtual uint8_t get_switch() |
masaaki_makabe | 31:b5e19d153db4 | 118 | { |
masaaki_makabe | 31:b5e19d153db4 | 119 | return _swState; |
masaaki_makabe | 31:b5e19d153db4 | 120 | } |
masaaki_makabe | 31:b5e19d153db4 | 121 | |
masaaki_makabe | 31:b5e19d153db4 | 122 | /*スイッチ状態のリセット*/ |
masaaki_makabe | 31:b5e19d153db4 | 123 | void switch_reset(void) |
masaaki_makabe | 31:b5e19d153db4 | 124 | { |
masaaki_makabe | 31:b5e19d153db4 | 125 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 126 | _lastSW = 0; |
masaaki_makabe | 31:b5e19d153db4 | 127 | } |
masaaki_makabe | 31:b5e19d153db4 | 128 | |
masaaki_makabe | 31:b5e19d153db4 | 129 | /*秒をHH:MM表示する*/ |
masaaki_makabe | 31:b5e19d153db4 | 130 | void displaySeconds(int value) |
masaaki_makabe | 31:b5e19d153db4 | 131 | { |
masaaki_makabe | 31:b5e19d153db4 | 132 | // 4-digit convert |
masaaki_makabe | 31:b5e19d153db4 | 133 | // 40s->0040 100s->0140 |
masaaki_makabe | 31:b5e19d153db4 | 134 | int a = value / 60; |
masaaki_makabe | 31:b5e19d153db4 | 135 | int b = value % 60; |
masaaki_makabe | 31:b5e19d153db4 | 136 | value = 100 * a + b; |
masaaki_makabe | 31:b5e19d153db4 | 137 | display_value = value; |
masaaki_makabe | 31:b5e19d153db4 | 138 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 139 | pc.printf("[%04d]\r\n", value); |
masaaki_makabe | 31:b5e19d153db4 | 140 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 141 | } |
masaaki_makabe | 31:b5e19d153db4 | 142 | |
masaaki_makabe | 31:b5e19d153db4 | 143 | /*HH:MMをLED表示する*/ |
masaaki_makabe | 31:b5e19d153db4 | 144 | void displayHHMM(ble_date_time_t &dt) |
masaaki_makabe | 31:b5e19d153db4 | 145 | { |
masaaki_makabe | 31:b5e19d153db4 | 146 | // 4-digit convert |
masaaki_makabe | 31:b5e19d153db4 | 147 | // 10:50->1050 23:59->2359 |
masaaki_makabe | 31:b5e19d153db4 | 148 | int value = dt.hours * 100 + dt.minutes; |
masaaki_makabe | 31:b5e19d153db4 | 149 | display_value = value; |
masaaki_makabe | 31:b5e19d153db4 | 150 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 151 | pc.printf("[%04d][%d/%d/%d %02d:%02d:%02d]\r\n", |
masaaki_makabe | 31:b5e19d153db4 | 152 | value, dt.year, dt.month, dt.day, dt.hours, dt.minutes, dt.seconds); |
masaaki_makabe | 31:b5e19d153db4 | 153 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 154 | } |
masaaki_makabe | 31:b5e19d153db4 | 155 | |
masaaki_makabe | 33:d7b53d548c33 | 156 | void attach(void (*func)(void)) |
masaaki_makabe | 33:d7b53d548c33 | 157 | { |
masaaki_makabe | 33:d7b53d548c33 | 158 | _callback.attach(func); |
masaaki_makabe | 33:d7b53d548c33 | 159 | } |
masaaki_makabe | 33:d7b53d548c33 | 160 | /*template<typename T> |
masaaki_makabe | 33:d7b53d548c33 | 161 | void attach(T *obj, void (T::*member)(void)) |
masaaki_makabe | 33:d7b53d548c33 | 162 | { |
masaaki_makabe | 33:d7b53d548c33 | 163 | _callback.attach(obj, member); |
masaaki_makabe | 33:d7b53d548c33 | 164 | }*/ |
masaaki_makabe | 33:d7b53d548c33 | 165 | void CallFlagClear() |
masaaki_makabe | 33:d7b53d548c33 | 166 | { |
masaaki_makabe | 33:d7b53d548c33 | 167 | _callFlag = false; |
masaaki_makabe | 33:d7b53d548c33 | 168 | } |
masaaki_makabe | 33:d7b53d548c33 | 169 | |
masaaki_makabe | 31:b5e19d153db4 | 170 | private: |
masaaki_makabe | 31:b5e19d153db4 | 171 | bool _swFlag; |
masaaki_makabe | 31:b5e19d153db4 | 172 | Switch_t _swState; |
masaaki_makabe | 31:b5e19d153db4 | 173 | uint8_t _lastSW; |
masaaki_makabe | 31:b5e19d153db4 | 174 | Ticker _ticker; |
masaaki_makabe | 31:b5e19d153db4 | 175 | int _counter; |
masaaki_makabe | 31:b5e19d153db4 | 176 | int _cnt; |
masaaki_makabe | 33:d7b53d548c33 | 177 | FunctionPointer _callback; |
masaaki_makabe | 33:d7b53d548c33 | 178 | bool _callFlag; |
masaaki_makabe | 31:b5e19d153db4 | 179 | |
masaaki_makabe | 31:b5e19d153db4 | 180 | }; |
masaaki_makabe | 31:b5e19d153db4 | 181 | |
masaaki_makabe | 31:b5e19d153db4 | 182 | #endif /*__EXIO_H__*/ |