- 2024-2-5
- ブログ, 電気工作
- 7 comments

注意点について動画で説明していますので、使用については自己責任でお願いします。
CHCNAVのバージョンアップでフリスクスイッチがスムーズに使えるようになりました。
フリスクスイッチの作製手順について説明しています。
ファームウエアをダウンロード https://circuitpython.org/board/raspberry_pi_pico/ 25/4/4追記 動画作成時から、ファームウエアバージョンがアップデートしています。 CircuitPython用HIDライブラリとバージョンを合わせてRP2040にコピーして下さい。
MuEditorのダウンロード https://codewith.mu/en/download
CircuitPython用HIDライブラリをダウンロード https://circuitpython.org/libraries 25/4/4追記 動画作成時から、ファームウエアバージョンがアップデートしています。 ファームウエアとバージョンを合わせてRP2040にコピーして下さい。
プログラムコード
code.py
x
40
40
1
import time, board, digitalio, usb_hid
2
from adafruit_hid.mouse import Mouse
3
4
5
tactA = digitalio.DigitalInOut(board.GP0)
6
tactA.switch_to_input(pull=digitalio.Pull.DOWN)
7
8
tactB = digitalio.DigitalInOut(board.GP1)
9
tactB.switch_to_input(pull=digitalio.Pull.DOWN)
10
11
12
mouse = Mouse(usb_hid.devices)
13
14
15
beforeA = 0
16
beforeB = 0
17
18
time.sleep(15) #15秒待ちます
19
20
mouse.move(238,150) #CHCNAV510(238,150) 610(255,167) FJD(265,170) TrimbleGFX750(280,-198)
21
while True:
22
23
24
nowA = tactA.value
25
nowB = tactB.value
26
27
28
if nowA == 1 and beforeA == 0:
29
mouse.click(Mouse.LEFT_BUTTON)
30
31
32
if nowB == 1 and beforeB == 0:
33
mouse.move(0,-90) #カーソルを塗りつぶしボタンに移動
34
mouse.click(Mouse.LEFT_BUTTON)
35
time.sleep(1)
36
mouse.move(0,90) #カーソルを自動操舵ONOFFアイコンに戻す
37
38
39
beforeA = nowA
40
beforeB = nowB
19 | time .sleep(15) |
CHCNAVがフリスクスイッチを認識するまでのタイムラグの設定
10〜15秒で設定します。
34 | mouse.move(0,-90) |
座標の値を変えると、任意のボタンに移動させる事が出来ます。
例えばオートターンであれば、(-90,0)等に変更。
36 | time.sleep(1) |
次の行のコードを確実に実行させるための設定。
37 | mouse.move(0,90) |
カーソルを移動させた分戻して、自動操舵ONOFFアイコンに移動します。

マルチコアボードモジュール,RP2040-Zero
https://ja.aliexpress.com/item/1005005504313845.html
押しボタンスイッチ キャップ カバー付き
ユニバーサル基板
はんだメッキ線 0.6mm
参考URL
Adafruit HID ライブラリ
https://docs.circuitpython.org/projects/hid/en/latest/
CircuitPython「ディスクの不正な取り出し」の対処法
https://gadget-nest.com/raspberry-pi-pico_circuitpython/
ボタン3個以上の参考例(下記はボタン6個の場合)
検証はしていませんので、自己責任での使用をお願いします。
code.py
1
46
46
1
import time, board, digitalio, usb_hid
2
from adafruit_hid.mouse import Mouse
3
4
def move_and_click(mouse, x, y, click=True):
5
mouse.move(x, y)
6
if click:
7
mouse.click(Mouse.LEFT_BUTTON)
8
time.sleep(1)
9
10
tact_pins = [board.GP0, board.GP1, board.GP3, board.GP4, board.GP5, board.GP6]
11
tact_switches = [digitalio.DigitalInOut(pin) for pin in tact_pins]
12
for tact in tact_switches:
13
tact.switch_to_input(pull=digitalio.Pull.DOWN)
14
15
mouse = Mouse(usb_hid.devices)
16
17
time.sleep(15)
18
move_and_click(mouse, 238, 150, click=False)
19
20
before_states = [0] * len(tact_pins)
21
22
while True:
23
for i, tact in enumerate(tact_switches):
24
now_state = tact.value
25
before_state = before_states[i]
26
27
if now_state == 1 and before_state == 0:
28
if i == 0:
29
move_and_click(mouse, 0, 0)
30
elif i == 1:
31
move_and_click(mouse, 0, -90)
32
move_and_click(mouse, 0, 90, click=False)
33
elif i == 2:
34
move_and_click(mouse, -110, 0)
35
move_and_click(mouse, 110, 0, click=False)
36
elif i == 3:
37
move_and_click(mouse, -155, 0)
38
move_and_click(mouse, 155, 0, click=False)
39
elif i == 4:
40
move_and_click(mouse, -400, -90)
41
move_and_click(mouse, 400, 90, click=False)
42
elif i == 5:
43
move_and_click(mouse, -210, -110)
44
move_and_click(mouse, 210, 110, click=False)
45
46
before_states[i] = now_state
コメント
この記事へのトラックバックはありません。
こんばんは
YouTube の動画いつも参考になりありがとうございます。
自前のRTK基準局で以前質問しておせわになりました。
最終的にジオセンスさんの基盤を購入し、Ntripキャスターを使用させて頂きミニPCで稼働しています。
私は東京からUターンして佐賀県で8年前からアスパラガスの栽培しています、兄・近隣の米麦農家さんの複数のCHCVで使用してもらってます。
今回のフリスクスイッチも依頼がありRP2040-Zeroを入手して作成中です。
SWが2個以上の場合【自動操舵ON/OFF】【A/B】オートターン【左】・【右】【塗りつぶし】など
GP0・1・2・3・5に配線してプログラムに追加したつもりですがカーソルが【自動操舵】に戻りません。
当方、サラリーマン時代は理化学機器のサービスマンで電子工作とWindowsPCは大丈夫ですがこのソフトは素人です。
いろいろプログラムを書き換えて試してはいるのですがCHCNAVが手元にないので時間がかかります。
プログラムのおすすめの参考書などがあれば教えてください。
よろしくお願いいたします。
コメントありがとうございます。
カーソルが戻らないとの事でひとつ確認ですが、カーソルに戻す前のプログラムはどのようにされていますか?
プログラムコード36行目
time.sleep(1)
これを入れて一呼吸置かないと、カーソルは途中半端なところまでしか戻りません。
参考文献についてはリンク先載せておきますので、よろしくお願いします。
お世話になります。
お忙しい中対応いただきありがとうございます。
こちらにプログラムをコピーペーストできないみたいですね。
どこが間違っているかご教授いただきたかったのですが。
time.sleep(1) は入れています。
例えばBボタンを押した後一呼吸とは数秒でよろしいでしょうか?
自動操舵ON/OFFの座標を起点としてそこから座標を動かしてまた戻すようになってると思いますが
各ボタンを押してその都度直接そのアイコンにカーソールを持っていきクリックする事ができればよいのですが。
参考文献もありがとうございます、4月中旬ころには多少時間が取れるとおもいますので勉強します。
time.sleepの使い方はそれで合ってます。
それと自動操舵ボタンに戻らない原因として考えられるのは、
移動先に画面外の座標を指定してしまうとカーソルは画面内にしか移動出来ないため、
戻る座標とのズレが生じてしまい、元に戻らなくなってしまいますが、そのような事は考えられないでしょうか?
自動操舵ボタン位置にあるカーソルから、X軸-238 Y軸-150を超える座標を指定すると、自動操舵に戻らなくなります。
各ボタンを押してその都度直接そのアイコンにカーソールを持っていきクリックするためには、
カーソルの現在地座標を求めるか、次にクリックしたいアイコンの絶対座標を指定する等考えられますが、HIDライブラリにはそのようなコードは見当たらないです。
その他の方法としては意図的に画面外の座標を指定してカーソルを画面四隅のどこかに持っていき、
そこを始点として任意のボタンに持っていけばクリック出来るのではないかと思います。
一応スケッチ例を載せておきましたので、よければ参考にして下さい。
CHCNAVのオートターンに使えるかの検証はしていませんので、その点についてはご了承下さい。
こんばんは
3ボタン以上のプログラムありがとうございます。
【A/B】アイコンの座標が間違っていたんだと思います、右上部にカーソルがみえていました。
CHCNAVの最新Verでは左右のオートターンになり5ボタンを作成する事になりそうです。
自動ON/OFFのアイコンを起点として各アイコンの座標はどのようにもとめられましたか?
質問ばかりで申し訳ございません。
4ボタンのSWは作成済なので早速試してみます。
Aボタン:自動ON/OFF
Bボタン:塗りつぶし
CDボタン:オートターン左右
お疲れ様です。
使えるようになったようで良かったです。
座標はCHCNAVで実際試しながら微調整して決めています。
よろしくお願いします。
お忙しい中いろいろありがとうございます。
これからも動画など楽しみにしています。
今後ともよろしくお願いいたします。