基于 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】:

如果您希望 xy 的值包含在用空格分隔的 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)

如果单次读取中包含其他数据,xy 的索引可能不是 01,您可以通过检查 Arduino 文档或打印出 @987654329 来验证这一点@ 在调试期间。

【讨论】:

还有一个困扰我的问题:传感器与 Arduino 配合使用有什么要求?每个传感器是否工作或是否需要存在某些连接器/引脚/端口?

以上是关于基于 Arduino 的加速度计鼠标的 Python 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标

详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标

详解如何基于Arduino兼容板Teensy LC实现虚拟键盘与鼠标

使用Arduino和加速度计自制计步器

Arduino LM35温度计

读取 Arduino 的串口