python3.x pyserial通信与arduino uno(伺服控制)

2024-09-29 21:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

串行通信(python3.x->;arduino uno)有问题。 当我在Python2.5中运行这段代码时

-------python 2.5-------
import serial
usbport = 'COM3'
ser = serial.Serial(usbport, 9600, timeout=1)
def move(servo, angle):
    if (0 <= angle <= 180):
    ser.write(chr(255))
    ser.write(chr(servo))
    ser.write(chr(angle))
else:
    print("angle : between 0 and 180 \n")

当我简单地输入“move(1,40)”时,servo1(连接在pin9中)将移动到40个角度。在

但是当我在Python3.6中运行相同的代码时,会出现一个错误。 错误意味着我不能写类。 所以我把'255'、'servo'、'angle'编码成'utf-8'

^{pr2}$

但伺服不动。在

这是一个arduino代码

------arduino uno------- 
#include <Servo.h>
Servo servo1;
int minPulse = 600;
int maxPulse = 2400;
int userInput[3];
int startbyte;
int servo;
int pos;   
int i;
void setup() 
{ 
 servo1.attach(9, minPulse, maxPulse);
 pinMode(ledPin, OUTPUT);
 Serial.begin(9600);
} 

void loop() 
{ 
if (Serial.available() > 2) {
// Read the first byte
startbyte = Serial.read();
// If it is really the startbyte (255) ...
if (startbyte == 255) {
  for (i=0;i<2;i++) {
    userInput[i] = Serial.read();
  }
  servo = userInput[0];
  pos = userInput[1];
  if (pos == 255) { servo = 255; }
  switch (servo) {
    case 1:
      servo1.write(pos);    // move servo1 to 'pos'
      break;

    case 99:
      if (pos == 180) {
        if (pinState == LOW) { pinState = HIGH; }
        else { pinState = LOW; }
      }
      if (pos == 0) {
        pinState = LOW;
      }
      digitalWrite(ledPin, pinState);
      break;
   }
  }
 }
}

Tags: 代码posmoveifserialarduinoserwrite
1条回答
网友
1楼 · 发布于 2024-09-29 21:36:07

“有一个错误。错误意味着我必须编写类not“你能提供错误消息吗?粗略地说,代码不会直接从python2运行到3,除非你从导入PySerial库中进行修改,因为python运行并找到库,但它不能用于python3,这就是为什么他们为PySerial创建了2个库。在

相关问题 更多 >

    热门问题