前提・実現したいこと
市販のワンボタンキーボードを購入してauduinoIDEにてプログラミングしています。
実現したいことは、押す回数に応じてキーボードの異なるキーを押し、なおかつ任意のタイミングで
長押しするとRキーを押すという機能の実装です。
発生している問題・エラーメッセージ
任意のタイミングで長押しするとRキーを押す、という機能が上手く働いてくれません。
押したタイミングで、どうしても単押しの判定へ行ってしまいます。
200ms経過した時点で単押しの条件分岐に入ってしまうのは理解できますが、
長押しも機能させるためには、どのような条件を付け足すべきでしょうか。
該当のソースコード
#include "Keyboard.h" #define PIN_KEYSW(9) int prevKeyState; int currKeyState; int numPush; int numloop; unsigned long prevPushTime; const unit32_THREHOLD = 3*1000; bool KeySetDone = false; void setup(){ pinMode(PIN_KEYSW,INPUT_PULLUP); prevKeyState = HIGH; currKeyState = HIGH; Keyboard.begin(); numloop = 1; numPush = 0; PrevPushTime = millis(); } void loop(){ currKeyState = digitalRead(PIN_KEYSW); //キーが押された if((prevKeyState == HIGH)&&(currKeyState == LOW)){ numPush++; prevPushTime = millis(); KeySendDone = false; } //長押しの判定 if(currKeyState == LOW){ if(millis() - prevPushTime > THRESHOLD) if(KeySendDone = false){ Keyboard.press('r'); delay(10); Keyboard.releaseAll(); KeySendDone = true; } } } //単押しの場合、回数に応じて押されるキーが変わる if(numPush != 0){ if(millis() -prevPushTime > 200){ switch(numloop){ case:1 Keyboard.press('a'); break; case:2 Keyboard.press('s'); break; case:3 Keyboard.press('d'); break; default: Keyboard.press('f'); break; } delay(10); Keyboard.releaseAll(); numloop++; numPush = 0; } } if(numloop >= 4){ numloop = 0; } prevKeyState = currKeyState; delay(10);
補足情報(FW/ツールのバージョンなど)
arduinoIDE1.8.13
Arduino Leonardo 互換機
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。