今天學(xué)習(xí)了聲音傳感器編程,并顯示距離的程序曹锨。學(xué)習(xí)內(nèi)容全在最后自己編寫的程序里:
#include<LiquidCrystal.h> ? ? ? ?//顯示頭文件
LiquidCrystal lcd(12, 11, 5, 4, 6, 7); ? ? ? ?//顯示管腳初始化
unsigned int EchoPin = 2; ? ? ? ? //觸發(fā)聲音發(fā)出管腳
unsigned int TrigPin = 3; ? ? ? ? ? ? ? //聲音返回信號接收管腳
unsigned long Time_Echo_us = 0;
unsigned long Len_mm? = 0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);? ? ? ? ? ? ? ? ? ? ? ? //Serial: output result to Serial monitor
pinMode(EchoPin, INPUT);
pinMode(TrigPin, OUTPUT);? ? ? ? ? ? ? ? ? // 發(fā)送高脈沖引腳用于觸發(fā)測量 (>10us)
Serial.print("setup ");
}
void loop() {
digitalWrite(TrigPin, HIGH);? ? ? ? ? ? ? //開始發(fā)送 高電平创南,US-100開始測量距離
delayMicroseconds(20);? ? ? ? ? ? ? ? ? ? // 設(shè)置高脈沖寬度為20us (>10us)
digitalWrite(TrigPin, LOW);? ? ? ? ? ? ? // 結(jié)束高脈沖
Time_Echo_us = pulseIn(EchoPin, HIGH);? ? // 敲擊是第一個(gè)上升沿浓恶,返回波是第二個(gè)上升沿莺债,兩沿寬度
if((Time_Echo_us < 60000) && (Time_Echo_us > 1))? ? //有效的寬度范圍 (1, 60000).
{
Len_mm = (Time_Echo_us*34/100)/2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//計(jì)算距離
lcd.clear(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清屏
tone(8, map(Len_mm, 1000, 10000,3951,131 ),250); ? ? ? ? ? ?//發(fā)出警告聲音
lcd.setCursor(0,1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//顯示定位:第0列第1行
lcd.print("Distance:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //直接輸出“Distance:”
lcd.print(Len_mm/10); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//輸出距離
lcd.print("cm");
}
delay(Len_mm/2); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//調(diào)整發(fā)出信號周期,距離越近間 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 隔時(shí)間越短
}