本文主要是介绍micropython驱动 黑莓轨迹球,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
黑莓轨迹球,很冷门的硬件,可能年轻小伙子们都没见过黑莓手机,我上学那会谁用黑莓都属于黑科技了,不知道网上有没有现成驱动,不难,我自己写了一个。
长这样:
别看一大堆引脚特别唬人,有一堆贼简单的,上面四个BLU RED GRN WHT就是个灯,会改变轨迹球的颜色,别说还挺好看,原理跟点灯一样,不写了。
BTN同理就是个按钮,不过按钮也要有优雅的驱动方式,核心就是消除抖动,不然按一下显示一堆就不好玩了,所以加入到类了。
剩下四个UP DOWN LFT RHT 是核心的方向控制。只说核心原理,好像是霍尔感应,硬件我不懂,但是可以看到设计比较精巧,就是不断检测高低电平,电平有变化就是动了,就这样。。。
上代码:
from machine import Pin
import timeclass 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=0self.y=0self.old_u=0self.old_d=0self.old_l=0self.old_r=0def clear(self):self.x=0self.y=0self.old_u=0self.old_d=0self.old_l=0self.old_r=0def pressed(self, flag = 0):last_state = self.pin.value()if flag:if not last_state:return Falseelse:while self.pin.value():time.sleep_ms(10)return Trueelse:if last_state:return Falseelse:while not self.pin.value():time.sleep_ms(10)return Truedef 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-=1self.old_l=lif r!=self.old_r:self.x+=1self.old_r=rif u!=self.old_u:self.y+=1self.old_u=uif d!=self.old_d:self.y-=1self.old_d=dtime.sleep_ms(interval)return self.x,self.yif __name__ == '__main__':tb=TRACKBALL(23,22,19,18,34)while 1:print(tb.roll_check(100))
滚了滚,挺好使,优雅,在手机用机械按钮为主、触屏还是用笔点的电阻屏时代,轨迹球是个新鲜产物,好玩,不过随着时代发展,最终这种方式被触屏所淘汰,感慨一下。
这篇关于micropython驱动 黑莓轨迹球的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!