
ジェームズ
それではプログラムを書いていきましょう

Makoto
わーい

ジェームズ
少し長いですがこのような形でどうでしょうか?
モードごとにキーが入れ替わるので
キーごとにマクロを設定しています。
from board import * import board import os import time import busio import usb_hid import rotaryio import digitalio import microcontroller import adafruit_ssd1306 from digitalio import DigitalInOut, Pull from board import * from adafruit_hid.keyboard import Keyboard from adafruit_hid.mouse import Mouse from adafruit_hid.keycode import Keycode from adafruit_hid.consumer_control import ConsumerControl from adafruit_hid.consumer_control_code import ConsumerControlCode led0 = board.GP7 led1 = board.GP8 led2 = board.GP9 led0 = digitalio.DigitalInOut(led0) led1 = digitalio.DigitalInOut(led1) led2 = digitalio.DigitalInOut(led2) led0.direction = digitalio.Direction.OUTPUT led1.direction = digitalio.Direction.OUTPUT led2.direction = digitalio.Direction.OUTPUT CLK_PIN = board.GP2 DT_PIN = board.GP3 SW_PIN = board.GP4 clk_last = None count = 0 totalMode = 3 currentMode = 0 pressTime = 0 SW1_PIN = board.GP28 SW2_PIN = board.GP20 SW3_PIN = board.GP17 SW4_PIN = board.GP14 SW5_PIN = board.GP27 SW6_PIN = board.GP21 SW7_PIN = board.GP18 SW8_PIN = board.GP15 SW9_PIN = board.GP26 SW10_PIN = board.GP22 SW11_PIN = board.GP19 SW12_PIN = board.GP16 cc = ConsumerControl(usb_hid.devices) mouse = Mouse(usb_hid.devices) keyboard = Keyboard(usb_hid.devices) key = 0 fs_stat = os.statvfs('/') i2c = busio.I2C(GP1, GP0) display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c) print('start') t0 = time.monotonic() one = 'ALT' two = 'NONE' three = [ 'Zoom','Volume','Scroll'] enc = rotaryio.IncrementalEncoder(CLK_PIN, DT_PIN) last_position = 0 sw = digitalio.DigitalInOut(SW_PIN) sw.direction = digitalio.Direction.INPUT sw.pull = digitalio.Pull.UP sw1 = digitalio.DigitalInOut(SW1_PIN) sw1.direction = digitalio.Direction.INPUT sw1.pull = digitalio.Pull.UP sw2 = digitalio.DigitalInOut(SW2_PIN) sw2.direction = digitalio.Direction.INPUT sw2.pull = digitalio.Pull.UP sw3 = digitalio.DigitalInOut(SW3_PIN) sw3.direction = digitalio.Direction.INPUT sw3.pull = digitalio.Pull.UP sw4 = digitalio.DigitalInOut(SW4_PIN) sw4.direction = digitalio.Direction.INPUT sw4.pull = digitalio.Pull.UP sw5 = digitalio.DigitalInOut(SW5_PIN) sw5.direction = digitalio.Direction.INPUT sw5.pull = digitalio.Pull.UP sw6 = digitalio.DigitalInOut(SW6_PIN) sw6.direction = digitalio.Direction.INPUT sw6.pull = digitalio.Pull.UP sw7 = digitalio.DigitalInOut(SW7_PIN) sw7.direction = digitalio.Direction.INPUT sw7.pull = digitalio.Pull.UP sw8 = digitalio.DigitalInOut(SW8_PIN) sw8.direction = digitalio.Direction.INPUT sw8.pull = digitalio.Pull.UP sw9 = digitalio.DigitalInOut(SW9_PIN) sw9.direction = digitalio.Direction.INPUT sw9.pull = digitalio.Pull.UP sw10 = digitalio.DigitalInOut(SW10_PIN) sw10.direction = digitalio.Direction.INPUT sw10.pull = digitalio.Pull.UP sw11 = digitalio.DigitalInOut(SW11_PIN) sw11.direction = digitalio.Direction.INPUT sw11.pull = digitalio.Pull.UP sw12 = digitalio.DigitalInOut(SW12_PIN) sw12.direction = digitalio.Direction.INPUT sw12.pull = digitalio.Pull.UP def led(): if (currentMode == 0): led2.value = False led0.value = True elif (currentMode == 1): led0.value = False led1.value = True elif (currentMode == 2): led1.value = False led2.value = True def millis(): return time.monotonic() * 1000 def ccw(): print("反時計回り") if (currentMode == 0): # 画面縮小 keyboard.press(Keycode.CONTROL) mouse.move(wheel=-1) keyboard.release(Keycode.CONTROL) elif(currentMode == 1): # ボリューム下げる cc.send(ConsumerControlCode.VOLUME_DECREMENT) elif(currentMode ==2): # 水平スクロール右 keyboard.press(Keycode.SHIFT) mouse.move(wheel=-1) keyboard.release(Keycode.SHIFT) def cw(): print("時計回り") global three if (currentMode == 0): # 画面拡大 keyboard.press(Keycode.CONTROL) mouse.move(wheel=1) keyboard.release(Keycode.CONTROL) elif(currentMode == 1): # ボリューム上げる cc.send(ConsumerControlCode.VOLUME_INCREMENT) elif(currentMode ==2): # 水平スクロール左 keyboard.press(Keycode.SHIFT) mouse.move(wheel=1) keyboard.release(Keycode.SHIFT) def sw1f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F1) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F1' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F1) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F1' elif(currentMode ==2): # Skype Mute ON/OFF keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.M) keyboard.release_all() one = 'MODE:Skype' two = 'Key:Mute ON/OFF' def sw2f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F2) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F2' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F2) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F2' elif(currentMode ==2): # Skype Movie ON/OFF keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.K) keyboard.release_all() one = 'MODE:Skype' two = 'Key:Movie ON/OFF' def sw3f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F3) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F3' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F3) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F3' elif(currentMode ==2): # スナップショット keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.S) keyboard.release_all() one = 'MODE:Skype' two = 'Key:SnapShot' def sw4f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F4) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F4' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F4) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F4' elif(currentMode ==2): # ファイル送信 keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.F) keyboard.release_all() one = 'MODE:Skype' two = 'Key:Send File' def sw5f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F5) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F5' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F5) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F5' elif(currentMode ==2): # DISCORD MUTE keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.M) keyboard.release_all() one = 'MODE:DisCord' two = 'Key:Mute ON/OFF' def sw6f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F6) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F6' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F6) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F6' elif(currentMode ==2): # 未読チャンネルを切り替えます keyboard.press(Keycode.ALT) keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.UP_ARROW) keyboard.release_all() one = 'MODE:DisCord' two = 'Unread Channel' def sw7f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F7) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F7' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F7) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F7' elif(currentMode ==2): # DISCORD 未読チャンネルを切り替えます keyboard.press(Keycode.ALT) keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.DOWN_ARROW) keyboard.release_all() one = 'MODE:DisCord' two = 'Unread Channel' def sw8f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F8) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F8' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F8) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F8' elif(currentMode ==2): # 一番古い未読メッセージ keyboard.press(Keycode.SHIFT) keyboard.press(Keycode.PAGE_UP) keyboard.release_all() one = 'MODE:DisCord' two = 'Unread Massage' def sw9f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F9) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F9' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F9) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F9' elif(currentMode ==2): # Windows ショートカット 1 keyboard.press(Keycode.WINDOWS) keyboard.press(Keycode.ONE) keyboard.release_all() one = 'MODE:Windows' two = 'Short Cut 1' def sw10f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F10) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F10' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F10) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F10' elif(currentMode ==2): # Windows ショートカット 2 keyboard.press(Keycode.WINDOWS) keyboard.press(Keycode.TWO) keyboard.release_all() one = 'MODE:Windows' two = 'Short Cut 2' def sw11f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F11) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F11' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F11) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F11' elif(currentMode ==2): # Windows ショートカット 3 keyboard.press(Keycode.WINDOWS) keyboard.press(Keycode.THREE) keyboard.release_all() one = 'MODE:Windows' two = 'Short Cut 3' def sw12f(): global one global two if (currentMode == 0): # ALT keyboard.press(Keycode.ALT) keyboard.press(Keycode.F12) keyboard.release_all() one = 'MODE:ALT' two = 'Key:F12' elif(currentMode == 1): # Ctrl keyboard.press(Keycode.LEFT_CONTROL) keyboard.press(Keycode.F12) keyboard.release_all() one = 'MODE:Ctrl' two = 'Key:F12' elif(currentMode ==2): # Windows ショートカット 4 keyboard.press(Keycode.WINDOWS) keyboard.press(Keycode.FOUR) keyboard.release_all() one = 'MODE:Windows' two = 'Short Cut 4' def long_press(): #スリープ: Ctrl+Shift+Alt+End keyboard.press(Keycode.CONTROL, Keycode.SHIFT,Keycode.ALT,Keycode.END) keyboard.release_all() def displayTxT(): display.fill(0) txt = 'Key Pro system!' display.text(txt, 5, 10, 1) txt = 'CPU Temp is ' + str(round(microcontroller.cpu.temperature,1)) + 'C' display.text(txt, 5, 20, 1) txt = one display.text(txt, 5, 30, 1) txt = two display.text(txt, 5, 40, 1) txt = 'Rotaly = ' + three[currentMode] display.text(txt, 5, 50, 1) display.show() while(1): led() position = enc.position keylist = [sw1.value, sw2.value, sw3.value, sw4.value, sw5.value, sw6.value, sw7.value, sw8.value, sw9.value, sw10.value, sw11.value, sw12.value] if position != last_position: print(position) print(last_position) displayTxT() if(last_position < position): cw() else: ccw() last_position = position if False in keylist: print(keylist.index(False) + 1) key = keylist.index(False) + 1 globals()['sw'+str(key)+'f']() displayTxT() continue if (sw.value == 0): pressTime = millis() longPress = False while(sw.value == 0): if(millis() - pressTime > 1000 and not longPress): print("longPress") longPress = True long_press() if (not longPress): currentMode += 1 currentMode %= totalMode print("Mode: " + str(currentMode)) displayTxT()

Makoto
def sw2fとかの中身を好きに変えればいいんだよね?

ジェームズ
そうです。
使いたいキーはここを見るとわかりやすいですよ

Makoto
おおー
マウス操作も行けるんだね!
自作トラックボールとかも作れそう>ω<

ジェームズ
そうですねトラックボール付きのキーボードとか夢がありますね

Makoto
わーいいなー!
つくってみたい!
コメント