内容介绍
内容介绍
项目总结报告 一、项目介绍
该项目基于树莓派RP2040的嵌入式系统,使用micropython编写,实现鼠标的功能。其功能如下:
- 实现LCD交互页面,有速度调整页面,显示当前按键状态,模拟鼠标移动方向界面
- 利用摇杆控制鼠标的移动方向,按键A、B来模拟鼠标的左右键的功能,以及不同的按键下不同的灯效
- 通过usb端口实现与电脑的连接,映射板上的按键实现信息的传递
二、设计思路
- 通过ADC来获取摇杆的电位变化来决定鼠标的位移量,通过映射来使鼠标进行移动
- 通过按键触发后电位的变化来决定左右键的触发,通过映射实现鼠标的左右键
- 通过LCD的打印函数来实现交互界面的设计
三、硬件介绍
树莓派Pico核心芯片RP2040:
- 双核Arm Cortex M0+内核,可以运行到133MHz
- 264KB内存
- 性能强大、高度灵活的可编程IO可用于告诉数字接口
- 片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps、12位精度
板上功能:
1、240*240分辨率的色彩IPS LCD
- 四向摇杆+2个轻触按键+一个三轴姿态传感器MMA7660用做输入控制
- 有红外接受管+一个红外发射器
- 一个三轴姿态传感器MMA7660
- 一个蜂鸣器
- 双排16Pin连接器,有SPI、I2C以及两路模拟信号输入
四、实现功能 1、主菜单
def M():
display.fill_rect(195,66,29,29,st7789.WHITE)
time.sleep_ms(200)
display.fill_rect(195,66,29,29,st7789.BLACK)
time.sleep_ms(200)
def S():
display.fill_rect(133,136,29,29,st7789.WHITE)
time.sleep_ms(200)
display.fill_rect(133,136,29,29,st7789.BLACK)
time.sleep_ms(200)
def main():
global b
b = 1
display.fill(st7789.BLACK)
display.fill_rect(17,63,164,36,st7789.BLUE)
display.text(font2, "MOUSE MODE",20,65,st7789.WHITE,st7789.BLUE)
display.fill_rect(17,133,102,36,st7789.RED)
display.text(font2, "SELECT",20,135,st7789.WHITE,st7789.RED)
while True :
x = joy_x.read_u16()
a=int ((x - 32000)/28000)
print(a)
if a<0 :
b = 1
if a>0 :
b = -1
if b == 1 :
M()
if b == -1:
S()
if key_a.value() == 0 :
if b == 1:
mousemode_simple()
if b == -1:
SELECT()
这是主界面的函数,以及闪烁待选的两个函数,通过摇杆来更改b的值来进行对上下两项进行选中,按键a用来确定
2、速度选择
def SELECT():
global b
global speed
b = speed
display.fill(st7789.BLACK)
display.text(font1, "SELECT",20,20,st7789.WHITE)
display.text(font2, "speed",77,50,st7789.WHITE)
display.text(font2, "1",30,100,st7789.WHITE)
display.text(font2, "2",30,145,st7789.WHITE)
display.text(font2, "3",30,190,st7789.WHITE)
display.text(font2, "4",100,100,st7789.WHITE)
display.text(font2, "5",100,145,st7789.WHITE)
display.text(font2, "6",100,190,st7789.WHITE)
display.text(font2, "7",170,100,st7789.WHITE)
display.text(font2, "8",170,145,st7789.WHITE)
display.text(font2, "9",170,190,st7789.WHITE)
while True:
x = joy_x.read_u16()
y = joy_y.read_u16()
a=int ((x - 32000)/28000)
c=int ((y - 32000)/28000)
if b<=0:
b=1
if b>=9:
b=9
if a>0:
b=b+1
if a<0:
b=b-1
if c>0:
b=b+3
if c<0:
b=b-3
select_speed(b)
if key_a.value() == 0:
speed = b
display.text(font1, "SUCCESSFUL",150,20,st7789.WHITE)
time.sleep_ms(400)
display.fill_rect(80,20,150,20,st7789.BLACK)
if key_b.value() == 0 :
main ()
通过摇杆来改变b、c的值进行对速度的待选
def select_speed(num):
numbers = {
1 : one,
2 : two,
3 : three,
4 : four,
5 : five,
6 : six,
7 : seven,
8 : eight,
9 : nine
}
method = numbers.get(num)
if method:
method()
这个选择函数,通过传入的数值,进行对几个待选闪烁函数的调用
def nine():
display.fill_rect(197,190,29,29,st7789.WHITE)
time.sleep_ms(200)
display.fill_rect(197,190,29,29,st7789.BLACK)
time.sleep_ms(200)
这个大致的闪烁待选函数
3、显示模式
def mousemode_simple():
global b
b = 0
display.fill(st7789.BLACK)
display.text(font2, "Mode:",80,80,st7789.WHITE)
display.text(font2, "CLICK",77,130,st7789.WHITE)
while True:
x = joy_x.read_u16()
y = joy_y.read_u16()
dx = int (speed * (x - 32000)/28000)
dy = int (speed * (y - 32000)/28000)
mouse.move(dy,dx,0,0)
if key_a.value () == 0:
global flag1
time.sleep_ms(200)
if key_a.value() == 1:
if flag1 == 0 :
led.toggle()
display.text(font2, "CLICK",77,130,st7789.WHITE)
mouse.click(mouse.BUTTON_LEFT)
time.sleep_ms(100)
led.toggle()
if flag1 == 1 :
tim1.init(mode=machine.Timer.ONE_SHOT, period=70, callback=Hold)
display.text(font2, "CLICK",77,130,st7789.WHITE)
if key_a.value() == 0 :
mouse.press(mouse.BUTTON_LEFT)
led.toggle()
display.fill_rect(75,130,100,35,st7789.BLACK)
display.text(font2, "HOLD",85,130,st7789.WHITE)
time.sleep_ms(200)
if key_b.value () == 0:
time.sleep_ms(200)
if key_b.value () == 0:
global flag2
flag2=1
led.toggle()
display.text(font2, "SLIDE",77,130,st7789.WHITE)
while key_b.value () == 0 :
x = joy_x.read_u16()
y = joy_y.read_u16()
dh = int ((x - 32000)/30000)
dv = int ((y - 32000)/30000)
mouse.move(0,0,dh,dv)
tim2.init(mode=machine.Timer.ONE_SHOT, period=70, callback=Slide)
display.text(font2, "CLICK",77,130,st7789.WHITE)
if key_b.value () == 1 and flag2 == 0:
led.toggle()
display.text(font2, "CLICK",77,130,st7789.WHITE)
mouse.click(mouse.BUTTON_RIGHT)
time.sleep_ms(100)
led.toggle()
if key_select.value () == 0:
SELECT()
if key_star.value () == 0:
mousemode_super()
这是显示模式下的整个函数,其中用adc来获取电位的变化,从而使鼠标进行移动,然后是模式上,单击a,b键是单击模式,映射鼠标的左右键,然后长按一段时间的a键然后松开,会进入hold模式,相当于鼠标左键的长按,这时可以进行拖动选择,再次单击a键可以回到点击模式,然后是长按b键会进入slide模式,相当于鼠标滚轮的作用,这时可以进行上下的滚动,松开b键回到单击模式,select键会快速进入到速度的选择模式,然后star键会进入鼠标模拟模式
4、模拟模式
def mousemode_super ():
display.fill(st7789.BLACK)
while True :
x = joy_x.read_u16()
y = joy_y.read_u16()
dx = int (speed * (x - 32000)/28000)
dy = int (speed * (y - 32000)/28000)
display.fill_rect(115+dy*12,115+dx*12,10,10,st7789.WHITE)
mouse.move(dy,dx,0,0)
time.sleep_ms(10)
display.fill_rect(115+dy*12,115+dx*12,10,10,st7789.BLACK)
dx=0
dy=0
if key_a.value () == 0:
global flag1
time.sleep_ms(200)
if key_a.value() == 1:
if flag1 == 0 :
led.toggle()
mouse.click(mouse.BUTTON_LEFT)
time.sleep_ms(100)
led.toggle()
if flag1 == 1 :
tim1.init(mode=machine.Timer.ONE_SHOT, period=70, callback=Hold)
if key_a.value() == 0 :
led.toggle()
mouse.press(mouse.BUTTON_LEFT)
time.sleep_ms(200)
if key_b.value () == 0:
time.sleep_ms(200)
if key_b.value () == 0:
global flag2
flag2=1
led.toggle()
while key_b.value () == 0 :
x = joy_x.read_u16()
y = joy_y.read_u16()
dh = int ((x - 32000)/30000)
dv = int ((y - 32000)/30000)
mouse.move(0,0,dh,dv)
tim2.init(mode=machine.Timer.ONE_SHOT, period=70, callback=Slide)
if key_b.value () == 1 and flag2 == 0:
led.toggle()
mouse.click(mouse.BUTTON_RIGHT)
time.sleep_ms(200)
led.toggle()
if key_select.value () == 0:
SELECT()
if key_star.value () == 0:
mousemode_simple()
模拟模式与显示模式的代码大致相同,将显示模式的代码部分进行了删除,添加了闪烁的光标,通过摇杆的电位变化,鼠标移动的同时,lcd上会显示鼠标移动的方向,伪模拟鼠标的移动
五、遇到的问题
- 不熟悉python编程语言
解决方法:去学习了一些相关的基础知识
- 对单片机原理和编程不太了解
解决方法:简单了学习51单片机的一些基础
- 对于一些设计的想法没法实现
解决方法:在已有能力与基础上转换可以实现的方案
六、未来设计
- 完善界面设计
- 通过学习将之前的方案实现
软硬件
元器件
附件下载
main.py
项目总结报告.docx
mouse.rar
团队介绍
戴雨豪 河北科技大学
评论
0 / 100
查看更多
猜你喜欢
用树莓派RP2040实现鼠标功能和lcd画板本项目是基于树莓派RP2040设计的一款鼠标和lcd画板,可以正常驱动电脑鼠标,以及可以在lcd屏幕上画画,写字等。
DH蜡笔
1903
用基于树莓派RP2040的嵌入式系统学习板制作鼠标本次是用基于树莓派RP2040的嵌入式系统学习板制作鼠标,运用其上的240*240分辨率的彩色IPS LCD,SPI接口,ST7789控制器,四向摇杆和2个轻触按键等实现模拟鼠标点击滑动等功能。
JJGong
1481
基于硬禾学堂树莓派rp2040制作的模拟鼠标本项目基于硬禾学堂的树莓派rp2040 Game kit硬件平台实现与电脑通信控制电脑鼠标以及LCD屏幕控制及参数调整。
NEFU-hjx
1811