test publish
Dependencies: BLE_API nRF51822 mbed
Fork of KS7 by
exio.h@31:b5e19d153db4, 2016-07-28 (annotated)
- Committer:
- masaaki_makabe
- Date:
- Thu Jul 28 07:46:56 2016 +0000
- Branch:
- KS3
- Revision:
- 31:b5e19d153db4
- Child:
- 33:d7b53d548c33
Watch and Timer added
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 | 31:b5e19d153db4 | 54 | /*100msec処理*/ |
masaaki_makabe | 31:b5e19d153db4 | 55 | virtual void TickerCallback(void) |
masaaki_makabe | 31:b5e19d153db4 | 56 | { |
masaaki_makabe | 31:b5e19d153db4 | 57 | _cnt++; |
masaaki_makabe | 31:b5e19d153db4 | 58 | // スイッチ状態を定期的に見る |
masaaki_makabe | 31:b5e19d153db4 | 59 | uint8_t sw = _sw->read(); |
masaaki_makabe | 31:b5e19d153db4 | 60 | if(sw == 1 && !_swFlag){// スイッチ押されたとき |
masaaki_makabe | 31:b5e19d153db4 | 61 | _counter = 0; |
masaaki_makabe | 31:b5e19d153db4 | 62 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 63 | _swFlag = true; |
masaaki_makabe | 31:b5e19d153db4 | 64 | |
masaaki_makabe | 31:b5e19d153db4 | 65 | } else if(sw == 0 && _swFlag){// スイッチ離されたとき |
masaaki_makabe | 31:b5e19d153db4 | 66 | _swFlag = false; |
masaaki_makabe | 31:b5e19d153db4 | 67 | if(_swState == None){ // スイッチ状態未決定の場合 |
masaaki_makabe | 31:b5e19d153db4 | 68 | if(_counter >= 10){ /*1sec*/ |
masaaki_makabe | 31:b5e19d153db4 | 69 | _swState = LongPressed; |
masaaki_makabe | 31:b5e19d153db4 | 70 | //printf("LongPressed\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 71 | } else { |
masaaki_makabe | 31:b5e19d153db4 | 72 | _swState = Pressed; |
masaaki_makabe | 31:b5e19d153db4 | 73 | //printf("Pressed\r\n"); |
masaaki_makabe | 31:b5e19d153db4 | 74 | } |
masaaki_makabe | 31:b5e19d153db4 | 75 | } |
masaaki_makabe | 31:b5e19d153db4 | 76 | } else { |
masaaki_makabe | 31:b5e19d153db4 | 77 | _counter++; |
masaaki_makabe | 31:b5e19d153db4 | 78 | } |
masaaki_makabe | 31:b5e19d153db4 | 79 | _lastSW = sw; |
masaaki_makabe | 31:b5e19d153db4 | 80 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 81 | //pc.printf("*"); |
masaaki_makabe | 31:b5e19d153db4 | 82 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 83 | } |
masaaki_makabe | 31:b5e19d153db4 | 84 | |
masaaki_makabe | 31:b5e19d153db4 | 85 | public: |
masaaki_makabe | 31:b5e19d153db4 | 86 | /*コンストラクタ*/ |
masaaki_makabe | 31:b5e19d153db4 | 87 | exio() : io(P0_15, P0_13) |
masaaki_makabe | 31:b5e19d153db4 | 88 | { |
masaaki_makabe | 31:b5e19d153db4 | 89 | _cnt = 0; |
masaaki_makabe | 31:b5e19d153db4 | 90 | _swFlag = false; |
masaaki_makabe | 31:b5e19d153db4 | 91 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 92 | _ticker.attach(this, &exio::TickerCallback, 0.1); |
masaaki_makabe | 31:b5e19d153db4 | 93 | } |
masaaki_makabe | 31:b5e19d153db4 | 94 | |
masaaki_makabe | 31:b5e19d153db4 | 95 | /*スイッチ状態*/ |
masaaki_makabe | 31:b5e19d153db4 | 96 | typedef enum { |
masaaki_makabe | 31:b5e19d153db4 | 97 | None = 0, |
masaaki_makabe | 31:b5e19d153db4 | 98 | Pressed, |
masaaki_makabe | 31:b5e19d153db4 | 99 | LongPressed, |
masaaki_makabe | 31:b5e19d153db4 | 100 | } Switch_t; |
masaaki_makabe | 31:b5e19d153db4 | 101 | |
masaaki_makabe | 31:b5e19d153db4 | 102 | /*スイッチ状態の取得 ==> スーパークラスのものを上書き*/ |
masaaki_makabe | 31:b5e19d153db4 | 103 | virtual uint8_t get_switch() |
masaaki_makabe | 31:b5e19d153db4 | 104 | { |
masaaki_makabe | 31:b5e19d153db4 | 105 | return _swState; |
masaaki_makabe | 31:b5e19d153db4 | 106 | } |
masaaki_makabe | 31:b5e19d153db4 | 107 | |
masaaki_makabe | 31:b5e19d153db4 | 108 | /*スイッチ状態のリセット*/ |
masaaki_makabe | 31:b5e19d153db4 | 109 | void switch_reset(void) |
masaaki_makabe | 31:b5e19d153db4 | 110 | { |
masaaki_makabe | 31:b5e19d153db4 | 111 | _swState = None; |
masaaki_makabe | 31:b5e19d153db4 | 112 | _lastSW = 0; |
masaaki_makabe | 31:b5e19d153db4 | 113 | } |
masaaki_makabe | 31:b5e19d153db4 | 114 | |
masaaki_makabe | 31:b5e19d153db4 | 115 | /*秒をHH:MM表示する*/ |
masaaki_makabe | 31:b5e19d153db4 | 116 | void displaySeconds(int value) |
masaaki_makabe | 31:b5e19d153db4 | 117 | { |
masaaki_makabe | 31:b5e19d153db4 | 118 | // 4-digit convert |
masaaki_makabe | 31:b5e19d153db4 | 119 | // 40s->0040 100s->0140 |
masaaki_makabe | 31:b5e19d153db4 | 120 | int a = value / 60; |
masaaki_makabe | 31:b5e19d153db4 | 121 | int b = value % 60; |
masaaki_makabe | 31:b5e19d153db4 | 122 | value = 100 * a + b; |
masaaki_makabe | 31:b5e19d153db4 | 123 | display_value = value; |
masaaki_makabe | 31:b5e19d153db4 | 124 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 125 | pc.printf("[%04d]\r\n", value); |
masaaki_makabe | 31:b5e19d153db4 | 126 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 127 | } |
masaaki_makabe | 31:b5e19d153db4 | 128 | |
masaaki_makabe | 31:b5e19d153db4 | 129 | /*HH:MMをLED表示する*/ |
masaaki_makabe | 31:b5e19d153db4 | 130 | void displayHHMM(ble_date_time_t &dt) |
masaaki_makabe | 31:b5e19d153db4 | 131 | { |
masaaki_makabe | 31:b5e19d153db4 | 132 | // 4-digit convert |
masaaki_makabe | 31:b5e19d153db4 | 133 | // 10:50->1050 23:59->2359 |
masaaki_makabe | 31:b5e19d153db4 | 134 | int value = dt.hours * 100 + dt.minutes; |
masaaki_makabe | 31:b5e19d153db4 | 135 | display_value = value; |
masaaki_makabe | 31:b5e19d153db4 | 136 | #ifdef UART_DEBUG |
masaaki_makabe | 31:b5e19d153db4 | 137 | pc.printf("[%04d][%d/%d/%d %02d:%02d:%02d]\r\n", |
masaaki_makabe | 31:b5e19d153db4 | 138 | value, dt.year, dt.month, dt.day, dt.hours, dt.minutes, dt.seconds); |
masaaki_makabe | 31:b5e19d153db4 | 139 | #endif |
masaaki_makabe | 31:b5e19d153db4 | 140 | } |
masaaki_makabe | 31:b5e19d153db4 | 141 | |
masaaki_makabe | 31:b5e19d153db4 | 142 | private: |
masaaki_makabe | 31:b5e19d153db4 | 143 | bool _swFlag; |
masaaki_makabe | 31:b5e19d153db4 | 144 | Switch_t _swState; |
masaaki_makabe | 31:b5e19d153db4 | 145 | uint8_t _lastSW; |
masaaki_makabe | 31:b5e19d153db4 | 146 | Ticker _ticker; |
masaaki_makabe | 31:b5e19d153db4 | 147 | int _counter; |
masaaki_makabe | 31:b5e19d153db4 | 148 | int _cnt; |
masaaki_makabe | 31:b5e19d153db4 | 149 | |
masaaki_makabe | 31:b5e19d153db4 | 150 | }; |
masaaki_makabe | 31:b5e19d153db4 | 151 | |
masaaki_makabe | 31:b5e19d153db4 | 152 | #endif /*__EXIO_H__*/ |