Последовательная связь Arduino-Python HC-SR04 - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь измерить расстояние, используя 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 Ответ

0 голосов
/ 12 февраля 2019

В строке distance = arduino.read(4) читается 4 символа, но на самом деле вы выводите 5 символов, потому что перевод строки также считается символом.

Я бы рекомендовал вместо этого использовать distance = arduino.readline(), тогда выможет обрабатывать значения любого размера.

...