HC-SR04 與 pulseIn() 的問題-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 600|回复: 4

[已解决] HC-SR04 與 pulseIn() 的問題

[复制链接]
发表于 2021-11-29 13:58 | 显示全部楼层 |阅读模式
本帖最后由 三斑家文 于 2021-11-29 14:01 编辑

各位前輩大家好, 有一個疑問, 想了3,4 天, 想不出來...
關於 Arduino, HC-SR04 超聲波感測器, 使用 pulseIn() 的問題, 我的基本理解是: 對 CH-SR04 的 Trig pin 發出 HIGH 10us 的指令, CH-SR04 因此會在發射端在 10us 內發出 8 個 40KHz 脈衝, 並立即執行 pulseIn(pin, HIGH), 超聲波脈衝撞到物體後反彈, CH-SR04 收到後在 Echo pin 輸出 HIGH, 一旦 HIGH 結束, pulseIn 就停止計時, pulseIn 傳回的時間經過計算就能得到距離.
我的問題在 pulseIn() 是何時開始計時?
1.        我的理解是 pulseIn(Trigpin, HIGH) 開始執行時就開始計時, HIGH 結束後停止.
2.        按 arduino.cc 的 DOCUMENTATION 查詢該函式, 寫的是 if value is HIGH, pulseIn() waits for the pin to go from LOW to HIGH, starts timing, then waits for the pin to go LOW and stops timing. 我的翻譯是... 是訊號 LOW 變 HIGH 開始計時, HIGH 結束時停止.
*** 我認為是 1. 比較正確, 因該是 Tring 8 pulse 發出後, 收到 8 個 pulse 回波的時間才是正確, 但是官網與大部分書籍都是 2. 的說法. 因為我認為: 回波的 8 個 pulse 也是會在 10us 內, 測回波 8 pulse 長度怎會是正確?


前天做了一個測試,test_2, 物體放在感測器前 10cm 位置, 在 pulseIn(EchoPin, HIGH) 前加了一個 delayMicroseconds(4cm_us_time), 發現程式測距還是 10cm, 可見真的是只測回波 8 pulse 寬度, 心裡想在一個長水槽內做一個波, 回波的波長應該是不變的呀, 如果會變那大部分的星星應該都是紅色的吧~,
再想會不會 pulseIN() 測的是回波的反射再回波,於是在進行下一個測試. test_3, 連續用 3 個變數d1, d2, d3收連續 3 個 pulseIn(), 如果是測回波的回波, 那 d2 估計還有回波, 結果發現 d2, d3 都是 0 cm,
而 pulseIn() , 依翻譯 " 是訊號 LOW 變 HIGH 開始計時, HIGH 結束時停止" , 那在 8 個脈衝的第一個就結束計時了? 除非八個脈衝的輸出都是在 HIGH 的範圍的脈衝!
发表于 2021-11-29 14:37 | 显示全部楼层
第二种说的意思,如果pulsein执行之前,引脚就是高电平,就会忽略掉。如果之前没有出现高电平,就直接开始计时
发表于 2021-11-29 15:16 | 显示全部楼层
发表于 2021-11-29 15:22 | 显示全部楼层
本帖最后由 sangshu 于 2021-11-29 15:25 编辑

我觉得可能有两种模块,一种是,发射完就。等一下t拉高echo,此时使用pulsein(HIGH)还是为低,t到时候,检测到高,开始计时
另一种是,发射完,等一下t,echo拉低,,使用pulse(LOW)时候,还是高,t到的时候,(表示检测到低,开始计时)
发表于 2021-11-29 16:48 | 显示全部楼层
调用就会开始计时,pulseIn内部是个循环,就是一直等着这个引脚电平变化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 19:43 , Processed in 0.077208 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表