2023年4月13日木曜日

Raspberry Pi PicoをUSBマウスとして使う(2/3)(マウスボタンのクリック・ドラッグ)



前回の続きです.

Raspberry Pi PicoをUSBマウスとして使用するにあたって,マウスボタンの実装をします.

まずボタンは物理的にはスイッチとして実装されており,Raspberry Pi PicoではON (down)かOFF (up)かの状態が瞬間ごとに読み取れます.これだけではクリックとドラッグの区別ができませんので,ソフトウェアで実装します.

ソフトウェア

まず,ONかOFFかの読み取りは定期的に行われているので,前回の状態を記憶しておいて,ON→OFFとOFF→ONの状態変化を読み取ります.OFF→ONがボタンのdown,ON→OFFがボタンのupになります.

マウスのイベントとしては,MOUSE_DOWN, MOUSE_UP, MOUSE_CLICKを発出する必要があります.MOUSE_DRAGとMOUSE_CLICKのモードを作成して,MOUSE_DRAGモードの際にはMOUSE_DOWNとMOUSE_UPのイベントを発出します.MOUSE_CLICKモードの際には,マウスボタンを離した瞬間にMOUSE_CLICKイベントを発出することにします.

さらに,MOUSE_DRAGモードとMOUSE_CLICKモードの区別は以下のようにします.downの瞬間にdownしている時間の計測を始めます.初期状態はMOUSE_CLICKにしておいて,ある閾値(ここでは0.5秒)を超えたら,MOUSE_CLICKからMOUSE_DRAGに状態変化すると同時に,ここでMOUSE_DOWNイベントを発出します.

マウスボタンがupされた時点で,現在MOUSE_DRAGモードの場合にはMOUSE_UPイベントを,MOUSE_CLICKモードの場合にMOUSE_CLICKイベントを発出します.

図示すると以下のようになります.

ハードウェア

ハードウェアの製作は以下のようになります.push buttonの片方のピンを3.3Vに接続して,もう片方のピンをGPIOにpull down接続します.今回はGP16とGP17を使いました.

配線全体は以下のようになります.


以下の写真はボタンの部分の配線です.


以下の写真はRaspberry Pi Pico側の配線です.


ダブルクリックについて

ダブルクリックが未実装です.これも時間を測って,時間の閾値を決めてその時間内にマウスボタンがON→OFF→ON→OFFされたらダブルクリックイベントを発出する必要があるみたいです.

もしくは,OSに合わせてハードウェア側でクリックの時間をある程度決めないといけないのかも知れません.

続きはここで.

0 件のコメント:

コメントを投稿