【发布时间】:2020-12-23 07:14:10
【问题描述】:
好吧,如果我再花一点时间在这上面,我可能会发疯。我已经阅读了许多不同的其他问题和其他网站,试图做我想做的事,但我做不到。
当前场景:我有一个在我的 Pi 上运行的程序,它从图像和 OpenCV 计算几个值。其中两个值是“脉冲计数”,我想发送到带有步进驱动器的 Arduino。
我刚刚为我的 Pi 运行了一个小测试代码
import serial
YpulseCalc = 200
serial1 = serial.Serial('/dev/ttyACM0', 9600)
serial1.flush()
YpulseCalc = str(YpulseCalc)
YpulseEncode = YpulseCalc.encode()
while True:
if(serial1.in_waiting > 0):
serial1.write(YpulseEncode)
我的arduino代码如下
// Initialize values needed
int yPulseCalc = 0;
int xPulseCalc = 0;
// defines pins numbers
//Front left wheel
const int stepX = 2;
const int dirX = 5;
//Front right wheel
const int stepY = 3;
const int dirY = 6;
//Back left wheel
const int stepZ = 4;
const int dirZ = 7;
//Back right wheel
const int stepA = 12;
const int dirA = 13;
const int enPin = 8;
void setup() {
Serial.begin(9600);
// Sets the two pins as Outputs
pinMode(stepX, OUTPUT);
pinMode(dirX, OUTPUT);
pinMode(stepY, OUTPUT);
pinMode(dirY, OUTPUT);
pinMode(stepZ, OUTPUT);
pinMode(dirZ, OUTPUT);
pinMode(enPin, OUTPUT);
digitalWrite(enPin, LOW);
digitalWrite(dirX, HIGH);
digitalWrite(dirY, LOW);
digitalWrite(dirZ, HIGH);
digitalWrite(dirA, HIGH);
}
void loop() {
if (Serial.available() > 0) {
yPulseCalc = Serial.read();
xPulseCalc = Serial.read();
Serial.print("yPulseCalc: ");
Serial.println(yPulseCalc);
delay(5000);
//Serial.print("xPulseCalc: ");
//Serial.println(xPulseCalc);
}
}
我不明白的一件事是,当我为 arduino 拉起串行监视器时,它是空白的,直到我单击“发送”按钮一次,即使输入框是空白的。然后它开始接收各种值,12、50、48、48、48 等......不是我发送的“200”。谁能解释一下?
我将发送的值范围从 -500 到 500。不确定这是否会改变任何编写方法。
【问题讨论】:
-
你对这一行的理解是什么
serial1.in_waiting > 0 -
你用的是哪个arduino?
-
使用
Serial.parseInt()从串口读取字符串并将其转换为数字。
标签: python arduino raspberry-pi pyserial