• micropython驱动 黑莓轨迹球


    黑莓轨迹球,很冷门的硬件,可能年轻小伙子们都没见过黑莓手机,我上学那会谁用黑莓都属于黑科技了,不知道网上有没有现成驱动,不难,我自己写了一个。
    长这样:
    在这里插入图片描述
    别看一大堆引脚特别唬人,有一堆贼简单的,上面四个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))
        
    
    
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

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

  • 相关阅读:
    Wlan——无线反制理论与配置讲解
    【C++】多线程的学习笔记——白话文版(bushi
    常用组合逻辑verilog实现之8-3优先编码器
    Kafka消息堆积
    AttributeError: ‘NoneType‘ object has no attribute ‘shape‘
    Kotlin | 在for、forEach循环中正确的使用break、continue
    go语言面试
    Swagger2 介绍与集成
    护眼灯对眼睛有好处吗?盘点眼科专家推荐的护眼台灯
    弘辽科技:拼多多上下架会不会影响到流量?时间如何安排?
  • 原文地址:https://blog.csdn.net/jd3096/article/details/126555553