LoginSignup
2
2

More than 5 years have passed since last update.

(問題) 2秒のあいだにボタンが3回押されたかで、真・偽を返す関数を実装してください。

Last updated at Posted at 2018-03-15

概要

  • よくありがちな処理を実装してみよう。
  • とりあえず、Cで。
  • 採用の面接とかで、使えないかな?(どのくらい時間かかるかな?)

質問

  • 問題

    2秒のあいだにボタンが3回押されたかで、真・偽を返す関数を実装してください。
    
  • 具体的に..

    Is_Button_Pressed_3times_In_2sec()の中を実装してください.
    #include <stdint.h>
    #include <stdbool.h>
    
    //以下の2つの関数と、定数が処理系により与えられます。
    bool     IsButtonPressed(void);     //呼び出し時、ボタンが押されている場合true、押されていない場合falseが返る.
    uint32_t GetTickCount(void);    //ハードウェアのタイマーカウンターの値を取得。電源が入った時点から、カウントされる.
    extern const uint32_t ulTicksInMilliSec;    // 1ミリ秒に対する、ハードウェアカウンターの値.
    
    //こいつを実装. 例です。
    bool Is_Button_Pressed_3times_In_2sec(void)
    {
        bool bRet;
    
        // ... うまい処理を書く ...
    
        return bRet;
    }
    
    int main(int ac, char *av[])
    {
        bool bRet;
    
        bRet = Is_Button_Pressed_3times_In_2sec(); //2秒間返ってこない可能性がある。
    
        if (bRet)
        {
            // 条件成立時の処理
        }
        else
        {
            // 条件不成立時の処理
        }
    }
    
    
  • ついでの質問

    • チャタリング防止したいんだけど、どうしたらいいかな?
    • 割り込み処理で、おこなう場合は、どんな感じになる?
    • ボタンが複数あって、特定のパターンに、一致したら、trueを返す、という機能の場合はどうする?
      (例: ↑ ↑ ↓ ↓ ← → ← → B A)

補足 :

  1. 関数やら、グローバル変数とか、使っていい。その辺は自由に。
    かっこいいのができたら、教えてください。

  2. 全般的な質問、誤字脱字、または、この質問自体がおかしい.. などは コメントへ.

  3. 仕様が不明瞭な点がある?(面接では質問者に尋ねるだろうけど...)
    ここでは、実装者が指摘して、どのようにするか、記述して、実装してみよう.

    • 例: 3回押す => ボタンのカウントは、押した時点で+1か、押して離した時点で+1か? => 後者で実装!
  4. やる人(いるのか!?)は、自分のとこで記述お願いします。(このエントリのコメント、、だと、荒れるよね??)

  5. 参考:STM32のHAL使用すると、与えられる関数は、こんな感じ?

    STM32のHAL
    bool IsButtonPressed(void)
    {   //LOWでPressed / HighでReleased.
        return (HAL_GPIO_ReadPin(GPIO_BUTTON_GPIO_Port, GPIO_BUTTON_Pin) == GPIO_PIN_RESET) ? true : false;
    }
    
    uint32_t GetTickCount(void)
    {
        return HAL_GetTick();
    }
    
    const uint32_t ulTicksInMilliSec = 1;
    

コメント

  • @shiracamusさん、ありがとうございます。タイトルから誤字があったとは。。。
2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2