基于 Arduino 的加速度计鼠标的 Python 脚本不起作用
Posted
技术标签:
【中文标题】基于 Arduino 的加速度计鼠标的 Python 脚本不起作用【英文标题】:Python script for Arduino based accelerometer mouse is not working 【发布时间】:2020-04-19 14:25:54 【问题描述】:几天前,我想出了用加速度计和 Arduino Leonardo 控制 Windows 10 PC 鼠标光标的想法。
我的 Arduino 设置如下:ADXL335 加速度计连接到 Arduino Leonardo,一个简短的 Python 程序从 Leonardo 上的 Arduino 程序获取一些串行输入,并控制我的 Windows 10 PC 上的鼠标光标。
问题是 Python 抛出了一个错误(见下文)。
首先是Arduino代码(编译上传成功):
const int x=A0;
const int y=A1;
int xh, yh;
int xcord, ycord;
void setup()
pinMode(x,INPUT);
pinMode(y,INPUT);
Serial.begin(9600);
void loop()
xh=analogRead(x);
yh=analogRead(y);
xcord=map(xh,286,429,100,999);
ycord=map(yh,282,427,100,800);
Serial.print(xcord);
Serial.print(" ");
Serial.print(ycord);
Serial.println();
delay(4000);
现在,Python 程序:
import serial
import pyautogui
ser=serial.Serial('com7',9600)
while 1:
k=ser.read(8)
cursor=k[:6]
x=cursor[:3]
y=cursor[3:]
xcor=int(x.decode('UTF-8'))
ycor=int(y.decode('UTF-8'))
pyautogui.moveTo(xcor,ycor)
还有错误:
File "C:\Users\User\Downloads\test.py", line 10, in <module>
ycor=int(y.decode('UTF-8'))
ValueError: invalid literal for int() with base 10: '7 3'
你有什么建议吗?我需要你的帮助。
谢谢。
祝你好运,
迈克尔
【问题讨论】:
如果你有一个 Leonardo,那么你真的不需要 Python 程序。莱昂纳多本身可以成为一只老鼠。如果我没记错的话,IDE 中甚至还包含一个库。 【参考方案1】:如果您希望 x
和 y
的值包含在用空格分隔的 k
中,您可以这样做:
import serial
import pyautogui
ser=serial.Serial('com7',9600)
while 1:
k=ser.read(8).decode()
cursor_list = k.split()
xcor=int(cursor_list[0])
ycor=int(cursor_list[1])
pyautogui.moveTo(xcor,ycor)
如果单次读取中包含其他数据,x
和 y
的索引可能不是 0
和 1
,您可以通过检查 Arduino 文档或打印出 @987654329 来验证这一点@ 在调试期间。
【讨论】:
还有一个困扰我的问题:传感器与 Arduino 配合使用有什么要求?每个传感器是否工作或是否需要存在某些连接器/引脚/端口?以上是关于基于 Arduino 的加速度计鼠标的 Python 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章
详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标