![](/img/trans.png)
[英]Why does my python serial code not work, while sending the same data from the arduino serial monitor does?
[英]How to make my Python code behave like arduino serial monitor?
我正在与Arduino Leonardo
使用serial communication
。
当我使用串行监视器进行测试时,它似乎工作正常。 当我输入“ 1 500 500”时,鼠标倾向于按预期方式移动。
但是,当我使用python测试时,鼠标似乎没有移动,结果为"Num : 1"
如何使Python表现得像arduino串行监视器 ?
以下是我的python代码:
import serial
ser = serial.Serial(
port='COM10',
baudrate=9600,
)
num = str.encode('1')
ser.write(num)
ser.write(b'500')
ser.write(b'500')
while True:
cnt = 0
if ser.readable():
cnt = cnt+1
print("Num :", cnt)
res = ser.readline()
res = res.decode()
print(res)
Arduino代码
#include "Keyboard.h" // Keyboard library
#include "Mouse.h" // Mouse library
#include <MouseTo.h>
int inNum;
int inX;
int inY;
// Procedure of pressing key and moving mouse
void procedure();
void setup() {
Serial.begin(9600);
Keyboard.begin();
Mouse.begin();
MouseTo.setCorrectionFactor(0.5);
MouseTo.setScreenResolution(1920, 1080);
}
void loop() {
if(Serial.available())
{
inNum = Serial.parseInt();
procedure(inNum);
}
}
void procedure(int num){
switch (num)
{
case 1:
inX = Serial.parseInt();
inY = Serial.parseInt();
MouseTo.setTarget(inX, inY);
while(!MouseTo.move()){};
Mouse.click(MOUSE_LEFT);
delay(200);
MouseTo.setTarget(0, 0);
while(!MouseTo.move()){};
Serial.write("Done");
break;
case 2:
MouseTo.setTarget(960, 540);
while(!MouseTo.move()){};
break;
default:
//MouseTo.setTarget(1920, 1080);
//while(!MouseTo.move()){};
Serial.write("default");
Serial.write(num);
break;
}
}
您有两个问题阻止您获得想要的东西。
首先,在Arduino代码上解析整数的方式期望使用分隔符。 它会读取直到找到不是数字的东西。 要解决此问题,只需在您发送的字符串或冒号或任何您喜欢的字符串上添加空格。 否则Serial.parseInt()
将无法读取任何内容,因为您仅从Python发送数字。
其次,你不能用Python读serial.readline()
如果你使用原始的写( Serial.write()
从Arduino的。 同样,Python期望行终止caharcter。 要解决此问题,请将\\r\\n
添加到您发送的字符串中,或者改用Serial.println()
。 如果不想添加这些终止字符,则可以循环读取字节,直到缓冲区为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.