基于树莓派RP2040实现能控制LCD和电脑界面的“鼠标”
本项目使用了硬禾学堂针对"2022年寒假在家一起练"开发的"基于RP2040的嵌入式系统学习平台",通过软件编程(使用MicroPython),以Thonny为工具,实现可以实时控制LCD和电脑界面的“鼠标。
标签
嵌入式系统
显示
USB
2022寒假在家练
noahall
更新2022-03-04
燕山大学
781

控制LCD和电脑界面的“鼠标”

一.项目介绍

本项目使用了硬禾学堂针对"2022年寒假在家一起练"开发的"基于RP2040的嵌入式系统学习平台",通过软件编程(使用MicroPython),以Thonny为工具,实现可以实时控制LCD和电脑界面的“鼠标。

二.硬件介绍

树莓派Pico核心芯片RP2040

240*240分辨率的彩色IPS LCD,SPI接口,控制器为ST7789

四向摇杆 + 2个轻触按键

一个三轴姿态传感器MMA7660

USB Type C连接器

三.项目设计思路

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

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

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

四.实现的功能及图片展示

Fi0LVV77dPF_Hj9R2QVhppXghMHw                                          在lcd屏幕上进行菜单选择(利用摇杆及按钮

 FuHA2A7kU0xmZCVXZgfrkI2CbZm8                        进入PC mode 可通过usb端口利用姿态传感器和按键摇杆进行操作电脑

FjIikiU2x130Pp4MHeCyJsJPjS8j                                  进入lcd mode 可以操作指针移动 可切换模式

五.主要代码片段及说明

while choose == False:
    if input.y()==1:
        display.rect(30,70,180,30,st7789.color565(45,200,45))
        display.rect(30,140,180,30,st7789.color565(255,255,255))
        mode='LCD'
    elif input.y()==-1:
        display.rect(30,70,180,30,st7789.color565(255,255,255))
        display.rect(30,140,180,30,st7789.color565(45,200,45))
        mode='PC'
    if input.A():        
        choose=True

                                菜单选择界面,上下移动摇杆进行选择

 while True:
      acc.getSample(d)
      xValue = xAxis.read_u16()
      yValue = yAxis.read_u16()
      buttonValue = button.value()
      button_bValue = button_b.value()

      startValue = start.value()
      selectValue = select.value()
      if 30000<=xValue<= 35000:
         dx = 0
      else:
         dx = dx = int(speed * (xValue -32400)/32400)       
      if 30000<=yValue <= 35000:
         dy = 0
      else:
         dy = int(speed * (yValue -32400)/32400)
      begin[0] +=dx
      begin[1] +=dy                        
      if buttonValue == 0:
         mouse.press(2)
      else:
         mouse.release(2)
      if button_b.value()==0:
         mouse.press(1)
      else:
         mouse.release(1)
      for i in range(3):
         r[i] = twos_compliment(d[i], 6)
    # 竖向    
      if r[0] >= 16:
        dv = 1
        utime.sleep(0.01)
      elif r[0] <=-16:
        dv = -1
        utime.sleep(0.01)
      else:
        dv = 0   
    # 横向   
      if r[1] >= 16:
        dh = 1
        utime.sleep(0.01)
      elif r[1] <=-16:
        dh = -1
        utime.sleep(0.01)
      else:
        dh = 0
      mouse.move(dx,dy,v=dv,h=dh)

                                           控制鼠标移动及其按键

begin[0] +=dx
      begin[1] +=dy
      print(begin[0],begin[1])
      display.blit_buffer(buf, begin[0], begin[1], 24, 24)
      display.fill_rect(begin[0],begin[1],24,24,st7789.BLACK)

                                    通过刷新屏幕显示移动的鼠标指针

 六.遇到的主要难题及解决方法

1.控制lcd图像移动-----------------------通过在群里进行询问以及网络搜索,了解了帧缓冲的使用方法

2.姿态传感器的调用----------------------翻阅数据手册和其他example

3.鼠标卡顿-------------------------------简化源代码

未来的计划与建议

继续利用rp2040进行学习

附件下载
code.zip
团队介绍
燕山大学
团队成员
noahall
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号