串行通信HCSR04

2024-06-17 17:03:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用HC-SR04测量距离,然后将其写入python的监视器。python显示的第一个输出是true,但是第二个输出和其他输出看起来像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);

}

Tags: 代码importecho距离pinserialusersarduino
1条回答
网友
1楼 · 发布于 2024-06-17 17:03:15

distance = arduino.read(4)行读取4个字符,但您所追求的输出实际上是5个字符,因为换行符也被计为一个字符。你知道吗

我建议改用distance = arduino.readline(),这样您就可以处理任何大小的值。你知道吗

相关问题 更多 >