Python PC到Arduino串行通信
我对Python和Arduino都是新手。如果你需要更多的信息,告诉我 我想做的是: 我想用arduino控制一些伺服系统。我想在PClater RPi的GUI中更改伺服的角度,并通过串行通信将其发送到Arduino 我的Arduino代码如下所示:Python PC到Arduino串行通信,python,serial-port,arduino,Python,Serial Port,Arduino,我对Python和Arduino都是新手。如果你需要更多的信息,告诉我 我想做的是: 我想用arduino控制一些伺服系统。我想在PClater RPi的GUI中更改伺服的角度,并通过串行通信将其发送到Arduino 我的Arduino代码如下所示: #include <Servo.h> int angle; int pinServo1 = 5; Servo servo1; int min = 0.547; int max = 2.47; voi
#include <Servo.h>
int angle;
int pinServo1 = 5;
Servo servo1;
int min = 0.547;
int max = 2.47;
void setup()
{
Serial.begin(9600);
pinMode(pinServo1,OUTPUT);
servo1.attach(pinServo1,min,max);
}
void loop()
{
if(Serial.available() > 0)
{
Serial.read();
angle = Serial.parseInt();
servo1.write(angle);
}
}
我得到了这个错误:
Enter new angle:
90
Traceback (most recent call last):
File "C:/Users/yoogibubu/Desktop/STUDIUM/BACHELORARBEIT/GUI/send.py", line 10, in <module>
arduino.write(angle)
File "C:\Program Files (x86)\PYTHON\lib\site-packages\serial\serialwin32.py", line 283, in write
data = to_bytes(data)
File "C:\Program Files (x86)\PYTHON\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
>>>
有人能告诉我怎么了吗?提前谢谢你 serial.write需要一个字节数组数据类型参数。对于发送字符串,必须首先将其转换为字节数组,尤其是在Python3.x中,因为字符串是使用Unicode存储的,这使得事情比简单的字符数组更复杂 请尝试以下操作:
arduino.write(angle.encode())
您应该能够直接编写此循环: 但问题在于Servor1.attach。您的伺服最小值和最大值应为最小值和最大值脉冲宽度的int值,以美国为单位,而不是毫秒。这用于映射读取结果 您可能想要一些类似于:
#include <Servo.h>
int angle;
int pinServo1 = 5;
Servo servo1;
int min = 547; //in us - BTW 1000 would be safer but servo has less range
int max = 2470; //in us - BTW 2000 would be safer
void setup()
{
Serial.begin(9600);
pinMode(pinServo1, OUTPUT);
servo1.attach(pinServo1, min, max);
}
void loop()
{
if(Serial.available() > 0)
{
angle = Serial.read();
servo1.write(angle);
}
}
我正在使用python 3.4.1
arduino.write(angle.encode())
void loop()
{
if(Serial.available() > 0)
{
angle = Serial.read();
servo1.write(angle);
}
}
#include <Servo.h>
int angle;
int pinServo1 = 5;
Servo servo1;
int min = 547; //in us - BTW 1000 would be safer but servo has less range
int max = 2470; //in us - BTW 2000 would be safer
void setup()
{
Serial.begin(9600);
pinMode(pinServo1, OUTPUT);
servo1.attach(pinServo1, min, max);
}
void loop()
{
if(Serial.available() > 0)
{
angle = Serial.read();
servo1.write(angle);
}
}