簡體   English   中英

我想知道我是否有任何錯誤?

[英]I want to know if I any mistakes?

我對 Jsn-sr04t 防水超聲波傳感器有疑問,知道樹莓派零 W1 中的連接做得很好,因為它已激活,但讀數完全錯誤,引腳輸入正確,但這個似乎有數據輸入錯誤。 我在同一個傳感器 model 上使用了 python 中的幾個程序

PD:我知道這是可行的,因為我在 arduino mega 上對其進行了測試,並且傳感器工作正常

import RPi.GPIO as GPIO
import os
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO_TRIGGER = 10
GPIO_ECHO = 8

TRIGGER_TIME = 0.00001
MAX_TIME = 0.004  # max time waiting for response in case something is missed
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)  # Trigger
GPIO.setup(GPIO_ECHO, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # Echo

GPIO.output(GPIO_TRIGGER, False)

def measure():
    # Pulse the trigger/echo line to initiate a measurement
    GPIO.output(GPIO_TRIGGER, True)
    time.sleep(TRIGGER_TIME)
    GPIO.output(GPIO_TRIGGER, False)

    # ensure start time is set in case of very quick return
    start = time.time()
    timeout = start + MAX_TIME

    while GPIO.input(GPIO_ECHO) == 0 and start <= timeout:
        start = time.time()

    if(start > timeout):
        return -1

    stop = time.time()
    timeout = stop + MAX_TIME
    # Wait for end of echo response
    while GPIO.input(GPIO_ECHO) == 1 and stop <= timeout:
        stop = time.time()

    if(stop <= timeout):
        elapsed = stop-start
        distance = float(elapsed * 34300)/2.0
    else:
        return -1
    return distance


if __name__ == '__main__':
    try:
        while True:
            distance = measure()
            if(distance > -1):
                print("Measured Distance = %.1f cm" % distance)
            else:
                print("#")
            time.sleep(0.5)

    except KeyboardInterrupt:
        print("Measurement stopped by User")
        GPIO.cleanup()

不斷 OUTPUT:“#”

似乎是 GPIO 設置的問題或時序問題,因為相同的設置適用於 Arduino。

  1. 嘗試更高的觸發時間(可能是 20us)
  2. 經過計算后,在屏幕上打印經過時間並檢查實際值

如果它仍然不起作用,那么您還可以查看備用 output 選項,如串行 UART、PWM 等。您可以在此處獲取更多詳細信息 -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM