test publish

Dependencies:   BLE_API nRF51822 mbed

Fork of KS7 by masaaki makabe

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?

UserRevisionLine numberNew 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__*/