来自python的arduino自动伺服运动信号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自python的arduino自动伺服运动信号相关的知识,希望对你有一定的参考价值。
我如何更改arduino中的if语句以便将伺服移动与python中随机化的程度相同?
首先他是python代码:
import serial
import time
import random
arduinoData = serial.Serial('com4',9600)
while True:
low = 0; high = 180
ran_number = random.randint(low, high)
print ran_number
time.sleep(1)
arduinoData.write(ran_number)
python代码与其他东西很好。
现在arduino代码,解决这个问题:
#include <Servo.h>
Servo myservo;
int data;
int pin=9;
int pos = 0;
void setup() {
myservo.attach(9);
pinMode(pin, OUTPUT);
digitalWrite (pin, LOW);
Serial.begin(9600);
}
void loop() {
while (Serial.available()){
data = Serial.read();
}
if statement here.....
}
}
答案
您正在寻找的是ParseInt方法。 read
不是在循环中使用Serial.ParseInt
而是构建你的数字,而是为你完成。
正确的代码是:
#include <Servo.h>
Servo myservo;
int pin = 9;
void setup() {
myservo.attach(9);
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
Serial.setTimeout(100);
Serial.begin(9600);
}
void loop() {
int number;
if (Serial.available()) {
number = Serial.parseInt();
myservo.write(number);
delay(0.5);
}
}
请注意,我将串行超时时间设置为100毫秒。这是为了防止parseInt
在决定它已读取整个int之前等待太多;否则,当收到一个值(比如42)时,它会等待大约1秒等待一些其他数字。
Python脚本也有一两个问题。首先,您应该在建立连接后稍等一下,因为每次打开串口时Arduino都会重置,因此它不会读取前几个值。您还可以通过在准备好时打印Arduino中的一些字符串(例如,作为setup
函数的最后一条指令)来获得更清晰的解决方案,并在qzxswpoi的Python脚本中等待它。
其次,readLine
将一个字节数组作为输入,而传递一个int。您需要以字节为单位编码此类int,首先将其转换为带有arduinoData.write
的字符串,然后使用str
对其进行编码。
我得到了以下程序:
encode
以上是关于来自python的arduino自动伺服运动信号的主要内容,如果未能解决你的问题,请参考以下文章