繁体   English   中英

如何使我的Python代码像arduino串行监视器一样工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM