Последовательная связь Arduino-Python HC-SR04
Я пытаюсь измерить расстояние с помощью HC-SR04, а затем записываю его на монитор python. Первый вывод, который показывает python, является верным, но второй, а остальные выходы выглядят так, будто python считывает две части значения расстояния. Я думаю, у меня есть некоторые проблемы со временем, но я попытался изменить задержки в двух из них, и это не сработало.
Когда я запускаю код, вывод выглядит так:
C:\Users\mobyr\PycharmProjects\1\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);
}
1 ответ
Линия distance = arduino.read(4)
читает 4 символа, но результат, который вы ищете, на самом деле составляет 5 символов, потому что перевод строки также считается символом.
Я бы порекомендовал использовать distance = arduino.readline()
вместо этого вы можете обрабатывать значения любого размера.