黑莓轨迹球,很冷门的硬件,可能年轻小伙子们都没见过黑莓手机,我上学那会谁用黑莓都属于黑科技了,不知道网上有没有现成驱动,不难,我自己写了一个。
长这样:
别看一大堆引脚特别唬人,有一堆贼简单的,上面四个BLU RED GRN WHT就是个灯,会改变轨迹球的颜色,别说还挺好看,原理跟点灯一样,不写了。
BTN同理就是个按钮,不过按钮也要有优雅的驱动方式,核心就是消除抖动,不然按一下显示一堆就不好玩了,所以加入到类了。
剩下四个UP DOWN LFT RHT 是核心的方向控制。只说核心原理,好像是霍尔感应,硬件我不懂,但是可以看到设计比较精巧,就是不断检测高低电平,电平有变化就是动了,就这样。。。
上代码:
from machine import Pin
import time
class TRACKBALL:
def __init__(self,pin_up,pin_down,pin_left,pin_right,pin_button):
self.pin=Pin(pin_button,Pin.IN,Pin.PULL_UP)
self.button_up=Pin(pin_up,Pin.IN,Pin.PULL_UP)
self.button_down=Pin(pin_down,Pin.IN,Pin.PULL_UP)
self.button_left=Pin(pin_left,Pin.IN,Pin.PULL_UP)
self.button_right=Pin(pin_right,Pin.IN,Pin.PULL_UP)
self.x=0
self.y=0
self.old_u=0
self.old_d=0
self.old_l=0
self.old_r=0
def clear(self):
self.x=0
self.y=0
self.old_u=0
self.old_d=0
self.old_l=0
self.old_r=0
def pressed(self, flag = 0):
last_state = self.pin.value()
if flag:
if not last_state:
return False
else:
while self.pin.value():
time.sleep_ms(10)
return True
else:
if last_state:
return False
else:
while not self.pin.value():
time.sleep_ms(10)
return True
def roll_check(self,interval=10):
u=self.button_up.value()
d=self.button_down.value()
l=self.button_left.value()
r=self.button_right.value()
if l!=self.old_l:
self.x-=1
self.old_l=l
if r!=self.old_r:
self.x+=1
self.old_r=r
if u!=self.old_u:
self.y+=1
self.old_u=u
if d!=self.old_d:
self.y-=1
self.old_d=d
time.sleep_ms(interval)
return self.x,self.y
if __name__ == '__main__':
tb=TRACKBALL(23,22,19,18,34)
while 1:
print(tb.roll_check(100))
滚了滚,挺好使,优雅,在手机用机械按钮为主、触屏还是用笔点的电阻屏时代,轨迹球是个新鲜产物,好玩,不过随着时代发展,最终这种方式被触屏所淘汰,感慨一下。