控制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屏幕上的光标移动和点击操作和滚轮,行使电脑鼠标的功能
四.实现的功能及图片展示
在lcd屏幕上进行菜单选择(利用摇杆及按钮)
进入PC mode 可通过usb端口利用姿态传感器和按键摇杆进行操作电脑
进入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进行学习