基于树莓派RP2040的嵌入式系统学习平台实现能控制LCD和电脑界面的“鼠标
基于树莓派RP2040的嵌入式系统学习平台实现能控制LCD和电脑界面的“鼠标”
标签
嵌入式系统
寒假在家练
myd3
更新2022-03-08
北京理工大学
805

内容介绍

项目需求

 基于树莓派RP2040的嵌入式系统学习平台建立能控制LCD和电脑界面的“鼠标”

FuxeFcME7UxncyNQsWq3kIaldFhp

1.利用板上的四向摇杆和按键设计一款“鼠标”

2.在240*240的LCD屏幕内可以通过该鼠标进行菜单选择和参数控制(在屏幕上要有上图中图形化的箭头形状)

3.通过USB端口可以控制PC屏幕上的光标移动和点击操作,行使电脑鼠标的功能

软件:thonny(内置micro python)

硬件:rasberry pi RP2040 Game Kit

 

 

  • 设计思路:

Fv11Yo2qxis8P_AXPfsZS8HrpP0u

模拟鼠标分别需要在电脑端和树莓派上实现,创建开场动画病署名,在电脑端adc采样用摇杆电位差来实现鼠标移动,用接口函数实现左右键,用方向传感器实现滚轮,在树莓派端,用像素作图实现鼠标移动。

具体实现思路:

鼠标移动:摇杆位置由adc采集的电位与设定的中值电位的比较来判断,关联鼠标位置即给dx、dy赋值,其中使用函数是。

鼠标滚轮:通过机器自带水平仪输出的数据调整滚轮。

图形化显示:首先用新旧x、y坐标,用新坐标显示鼠标前,用旧坐标覆盖前一个坐标来达到刷新的效果。鼠标用正方形显示,,通过改变前后两矩形的色域参数来达到鼠标上色效果。

 

具体功能对应代码段:

  1. 创建开场动画病署名

FqUVf4zdjE8ROwOX-qajfvfBgyst

display = st7789.ST7789(spi0, disp_width, disp_width,
                        reset=machine.Pin(st7789_res, machine.Pin.OUT),
                        dc=machine.Pin(st7789_dc, machine.Pin.OUT),
                        xstart=0, ystart=0, rotation=0)
display.fill(st7789.BLACK)

display.text(font2, "easy mouse", 10, 50)
display.text(font2, "ZRH", 50, 100)

utime.sleep(1)
display.fill(st7789.BLACK)

 

  1. 电脑端用摇杆电位差来实现鼠标移动

FuxeFcME7UxncyNQsWq3kIaldFhp

  

if 30000<=xValue<= 35000:
        dx = 0
    else:
        dx = int(speed * (xValue -32400)/32400)
        
    if 30000<=yValue <= 35000:
        dy = 0
    else:
        dy = int(speed * (yValue -32400)/32400)

用新旧图像位置刷新鼠标移动并去除轨迹。

def m_display():
    global dplay_1
    global dplay_2
    display.fill_rect(dplay_1[0]*2, dplay_1[1]*2, 8, 8, st7789.color565(0, 0, 0))
    display.fill_rect(dplay_2[0]*2, dplay_2[1]*2, 8, 8, st7789.color565(250, 0, 0))
    display.fill_rect(dplay_2[0]*2+8, dplay_2[1]*2+8, 8, 8, st7789.color565(0, 0, 0))
    dplay_1 = dplay_2[:]
    return dplay_1

 

3.用方向传感器实现滚轮

FqyegIzQHkMpJ8STNBvHDGLF653F

for i in range(3):
        r[i] = twos_compliment(d[i], 6)
    if r[0] >= 20:
        dv = 2
        utime.sleep(0.01)
    elif r[0] <=-20:
        dv = -2
        utime.sleep(0.01)
    else:
        dv = 0
    dh=0
    mouse.move(dx,dy,v=dv,h=dh)

 4.实现鼠标左右键及选取

if buttonValue == 0:  
        mouse.press(2)
    else:
        mouse.release(2)
    if button_b.value() == 0:  
        mouse.press(1)
    else:
        mouse.release(1)

 

  • 遇到的主要难题

1电脑与树莓派鼠标关联。不会调用库函数,不会刷固件,后明白usb_hid的固件及函数调用,利用hid驱动实现了鼠标的移动。

2 对python语言的学习。对于python的运用缺乏熟练度,经过反复尝试实现编写。

3 鼠标移动轨迹也显示。新旧鼠标地址中,新的赋值给后者,后者则显示为背景色消去轨迹。

  • 未来的计划建议

深入对pico的了解,学习各模块工作原理,从而在编译时能够得心应手。

更加深入学习python以及更多的代码,来加强自己的计算机语言的语感,减少编译时的错误和改善代码的计算速度和简洁性。

运用rp2040来做更多的项目以及拓展与一些功能,发挥出它应有的性能。

 

附件下载

代码 百度网盘文件.docx
easy mouse.zip

团队介绍

赵蓉宏

评论

0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号