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

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
わーいいなー!
つくってみたい!
コメント