Arduino-Python串口通讯HC-SR04
Arduino-Python Serial Communication HC-SR04
我正在尝试使用 HC-SR04 测量距离,然后将其写入 python 的显示器。 python 显示的第一个输出是真实的,但第二个和其他输出看起来像 python 读取了距离值的两个部分。我想,我遇到了一些时间问题,但我试图改变其中两个的延迟,但没有奏效。
当我 运行 代码输出如下所示:
C:\Users\mobyr\PycharmProjects\venv\Scripts\python.exe C:/Users/mobyr/Desktop/mesafeolc.py
distance 2.18 m
distance
2. m
distance 18
m
Process finished with exit code 0
我得到了真正的价值观
Arduino 的串行监视器
2.18
2.19
2.18
2.17
2.17
2.17
2.18
2.20
2.17
Python 代码:
import serial
import time
arduino = serial.Serial('COM3', 9600)
def Measure():
distance = arduino.read(4)
time.sleep(1)
print ("distance "+distance+" m")
return float(distance)
while True:
output = Measure()
if output > 5:
break
Arduino 代码:
const int echo_pin = 9;
const int trig_pin = 10;
void setup() {
Serial.begin(9600);
pinMode(echo_pin, INPUT);
pinMode(trig_pin, OUTPUT);
}
void loop() {
double period, distance;
digitalWrite(trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
period = pulseIn(echo_pin, HIGH);
distance = (period / 2) / 29.1;
distance = distance / 100; //to convert cm to m
delay(500);
Serial.println(distance);
}
第distance = arduino.read(4)
行读取了4个字符,但您之后的输出实际上是5个字符,因为换行符也算作一个字符。
我建议改用 distance = arduino.readline()
,这样您就可以处理任何大小的值。
我正在尝试使用 HC-SR04 测量距离,然后将其写入 python 的显示器。 python 显示的第一个输出是真实的,但第二个和其他输出看起来像 python 读取了距离值的两个部分。我想,我遇到了一些时间问题,但我试图改变其中两个的延迟,但没有奏效。
当我 运行 代码输出如下所示:
C:\Users\mobyr\PycharmProjects\venv\Scripts\python.exe C:/Users/mobyr/Desktop/mesafeolc.py
distance 2.18 m
distance
2. m
distance 18
m
Process finished with exit code 0
我得到了真正的价值观 Arduino 的串行监视器
2.18
2.19
2.18
2.17
2.17
2.17
2.18
2.20
2.17
Python 代码:
import serial
import time
arduino = serial.Serial('COM3', 9600)
def Measure():
distance = arduino.read(4)
time.sleep(1)
print ("distance "+distance+" m")
return float(distance)
while True:
output = Measure()
if output > 5:
break
Arduino 代码:
const int echo_pin = 9;
const int trig_pin = 10;
void setup() {
Serial.begin(9600);
pinMode(echo_pin, INPUT);
pinMode(trig_pin, OUTPUT);
}
void loop() {
double period, distance;
digitalWrite(trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
period = pulseIn(echo_pin, HIGH);
distance = (period / 2) / 29.1;
distance = distance / 100; //to convert cm to m
delay(500);
Serial.println(distance);
}
第distance = arduino.read(4)
行读取了4个字符,但您之后的输出实际上是5个字符,因为换行符也算作一个字符。
我建议改用 distance = arduino.readline()
,这样您就可以处理任何大小的值。