使用 python arduino 移动伺服
Moving servo with python arduino
我在这里尝试使用 Tkinter 制作的滑块 GUI 来控制我的 sg90 伺服,并通过串行将滑块的当前值发送到 Arduino。现在的问题是,无论何时说,我将滑块从 72 快速移动到 77,它在串行监视器中显示的值是 7374757677。
这里是 python 代码:
from tkinter import *
screen = Tk()
screen.geometry("400x400")
#some commands for arduino
import serial
uno = serial.Serial('/dev/ttyACM0', 9600)
def servocontrol(var):
uno.write(str(servo.get()).encode())
#defining the widget
servo = Scale(screen, from_=0, to=180, orient=HORIZONTAL, command=servocontrol)
#packing the widget
servo.pack()
#running the loop
screen.mainloop()
这里是 Arduino 代码:
#include <Servo.h>
Servo myservo;
String pypos;
int pos = 0;
void setup()
{
myservo.attach(9);
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0) {
pypos = Serial.readString();
Serial.println("Angle: " + pypos);
Serial.println('\n');
int pyposint = pypos.toInt();
myservo.write(pyposint);
Serial.flush();
delay(15);
}
}
现在看看输出,
我不知道出了什么问题。如果有人能帮助我,那将是一个很大的帮助。
如果有人也在寻找这个问题的答案,我找到了解决方法,我就是这样做的,
我没有通过编码将数据作为 字符串 发送,而是将数据作为 字节 格式的整数发送。
uno.write(bytes([var]))
之后一切正常。
我在这里尝试使用 Tkinter 制作的滑块 GUI 来控制我的 sg90 伺服,并通过串行将滑块的当前值发送到 Arduino。现在的问题是,无论何时说,我将滑块从 72 快速移动到 77,它在串行监视器中显示的值是 7374757677。
这里是 python 代码:
from tkinter import *
screen = Tk()
screen.geometry("400x400")
#some commands for arduino
import serial
uno = serial.Serial('/dev/ttyACM0', 9600)
def servocontrol(var):
uno.write(str(servo.get()).encode())
#defining the widget
servo = Scale(screen, from_=0, to=180, orient=HORIZONTAL, command=servocontrol)
#packing the widget
servo.pack()
#running the loop
screen.mainloop()
这里是 Arduino 代码:
#include <Servo.h>
Servo myservo;
String pypos;
int pos = 0;
void setup()
{
myservo.attach(9);
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0) {
pypos = Serial.readString();
Serial.println("Angle: " + pypos);
Serial.println('\n');
int pyposint = pypos.toInt();
myservo.write(pyposint);
Serial.flush();
delay(15);
}
}
现在看看输出,
我不知道出了什么问题。如果有人能帮助我,那将是一个很大的帮助。
如果有人也在寻找这个问题的答案,我找到了解决方法,我就是这样做的,
我没有通过编码将数据作为 字符串 发送,而是将数据作为 字节 格式的整数发送。
uno.write(bytes([var]))
之后一切正常。