micropython驱动 黑莓轨迹球

本文介绍了黑莓手机中轨迹球的工作原理及自制驱动的实现过程。通过检测方向控制引脚的电平变化来判断轨迹球的移动方向,并通过消除按钮抖动的方法实现了优雅的按钮驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

黑莓轨迹球,很冷门的硬件,可能年轻小伙子们都没见过黑莓手机,我上学那会谁用黑莓都属于黑科技了,不知道网上有没有现成驱动,不难,我自己写了一个。
长这样:
在这里插入图片描述
别看一大堆引脚特别唬人,有一堆贼简单的,上面四个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))
    


        
    

滚了滚,挺好使,优雅,在手机用机械按钮为主、触屏还是用笔点的电阻屏时代,轨迹球是个新鲜产物,好玩,不过随着时代发展,最终这种方式被触屏所淘汰,感慨一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值