BLE switch interface using micro:bit with 3 tact switches or 3 Makey Makey sensors

Dependencies:   microbit

Revision:
3:d8fd4efb63cc
Parent:
2:8e2e6c6658be
--- a/main.cpp	Sat Jun 08 04:40:57 2019 +0000
+++ b/main.cpp	Tue Jun 11 18:08:53 2019 +0000
@@ -7,7 +7,7 @@
 //    The MIT License (MIT)   Copyright (c) 2019 Masatomo Kojima
 //---------------------------------
 
-#define VERSION     "3SW-190608"
+#define VERSION     "3SW-190612"
 #define NO_DEBUG
 
 #include "microbit_switch_if_3sw.h"
@@ -26,7 +26,6 @@
 int  State;                       // 状態遷移
 char DispChar = DISP_NO_MESSAGE;  // LEDに表示する文字コード
 char DispCharLast = 0;            // 最後に表示した文字コード
-bool TurnOffMode = false;         // LED非表示モードのフラグ
 int  Cnt = 0;                     // カウンター
 
 /** ----------
@@ -42,6 +41,13 @@
     }
 }
 
+/** ----------
+ * @brief 一定期間後に表示をOFFにする
+ */
+static void turnOff() {
+    display.disable();
+}
+ 
 //---------------------------------
 //  Flash Memory
 //---------------------------------
@@ -86,13 +92,13 @@
 bool Setting_enter;         // 設定値を入力
 bool Setting_next;          // 次の設定値に移動
 
-KeyValueInt kviKeyCode1("keycode1",DISP_SETTING_FREQ, 1, 1, NUM_GROUP1, true);
+KeyValueInt kviKeyCode1("keycode1",DISP_SETTING_FREQ, 1, 1, NUM_GROUP_3SW, true);
 
 /** ----------  
  * @brief   1つのパラメータの表示と変更
  * @param   storage  不揮発メモリインスタンス
  * @param   para     パラメータのキーと値の組
- * @param   change   変更する時 true
+ * @param   change   変更する時        true
  * @param   disp     今の値を表示する時 true
  * @return  bool true : Success    false : Failed
  */
@@ -127,7 +133,7 @@
 /** ----------  
  * @brief  よく変更するパラメータの表示と変更
  * @param  change   true:変更する時
- * @return  char 0 : Success    'e' : Failed
+ * @return  char 0 : Success    DISP_BLE_ERROR_WRITEDDATA : Failed
  */
 static char paraSettingFreq(bool change=false)
 {
@@ -135,13 +141,13 @@
 
     kviKeyCode1.set(FlashGet(storage, kviKeyCode1.key, 1));
     if (paraSettingOne(storage, &kviKeyCode1, change, true)) return 0;
-    else return 'e';
+    else return DISP_BLE_ERROR_WRITEDDATA;
 }
 
 /** ----------  
  * @brief  デバイス固有のパラメータの表示と変更
  * @param  change   true:変更する時
- * @return  char 0 : Success    'e' : Failed
+ * @return  char 0 : Success    DISP_BLE_ERROR_WRITEDDATA : Failed
  */
 static char paraSettingSpec(bool change=false)
 {
@@ -151,10 +157,10 @@
 
     if(State == STATE_SETTING_DEVICE) {
 //        if (paraSettingOne(storage, &kviStickDirec, true , true)) return 0;
-//        else return 'e';
+//        else return DISP_BLE_ERROR_WRITEDDATA;
     } else  {
 //        if (paraSettingOne(storage, &kviStickDirec, false , false)) return 0;
-//        else return 'e';
+//        else return DISP_BLE_ERROR_WRITEDDATA;
     }
 }
 //---------------------------------
@@ -304,13 +310,9 @@
 MicroBitMessageBus bus;
 MicroBitButton buttonA(MICROBIT_PIN_BUTTON_A, MICROBIT_ID_BUTTON_A);
 MicroBitButton buttonB(MICROBIT_PIN_BUTTON_B, MICROBIT_ID_BUTTON_B);
-//MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_ALL);
-//MicroBitPin P1(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_ALL);
-//MicroBitPin P2(MICROBIT_ID_IO_P2, MICROBIT_PIN_P2, PIN_CAPABILITY_ALL);
-
-MicroBitButton button0(MICROBIT_PIN_P0, MICROBIT_ID_IO_P0, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
-MicroBitButton button1(MICROBIT_PIN_P1, MICROBIT_ID_IO_P1, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
-MicroBitButton button2(MICROBIT_PIN_P2, MICROBIT_ID_IO_P2, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
+MicroBitButton P0(MICROBIT_PIN_P0, MICROBIT_ID_IO_P0, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
+MicroBitButton P1(MICROBIT_PIN_P1, MICROBIT_ID_IO_P1, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
+MicroBitButton P2(MICROBIT_PIN_P2, MICROBIT_ID_IO_P2, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
 
 /** ----------  
  * @brief  キーコードを送信する
@@ -478,8 +480,7 @@
 //----- Display
     display.setDisplayMode(DISPLAY_MODE_BLACK_AND_WHITE);
     display.clear();
-    Timer dispTime;         // 連続表示タイマー
-    dispTime.start();
+	Timeout dispTime;
 
 //----- Button
     bus.listen(MICROBIT_ID_ANY, MICROBIT_BUTTON_EVT_DOWN, onButtonDown);
@@ -496,7 +497,7 @@
     display.clear();
 
 //----- Wait to connect
-    display.printChar('W');
+    display.printChar(DISP_BLE_WAIT);
     while (BleMessage != BLE_CONNECTED) {
         wait(0.15);
         ble.waitForEvent();        // BLEイベントを待つ
@@ -535,18 +536,13 @@
 		}
 
         if (DispChar != DispCharLast) {  // 表示文字が変更
-            TurnOffMode = false;
-            dispTime.reset();
             display.enable(); 
             if (DispChar) display.printChar(DispChar);
             else          display.clear();
-        }
-        if (!TurnOffMode) {
-            if (dispTime.read() > TIME_TURN_OFF) {  // 長時間表示
-                TurnOffMode = true;
-                display.disable();
-            }
+            dispTime.detach();
+			dispTime.attach(&turnOff, TIME_TURN_OFF);    // 一定時間後に表示をOFF
         }
         DispCharLast = DispChar;
     }
 }
+