/*可控LED腳位與數量*/
const int triggerPin = A0; // 超音波觸發腳位(發射端),使用模擬腳 A0const int echoPin = A1; // 超音波回聲腳位(接收端),使用模擬腳 A1
const int ledStartPin = 3; // 第一顆LED的腳位(數位腳3)const int ledCount = 10; // 總共使用10顆LED燈
// 函式:讀取超音波模組的距離long readUltrasonicDistance() { digitalWrite(triggerPin, LOW); // 先將觸發腳設為低電位,確保乾淨訊號 delayMicroseconds(2); // 等待2微秒 digitalWrite(triggerPin, HIGH); // 發送超音波觸發訊號,拉高腳位10微秒 delayMicroseconds(10); digitalWrite(triggerPin, LOW); // 觸發腳位拉低,結束觸發訊號
// 讀取回聲腳的高電位時間(聲波傳回的時間,單位為微秒) return pulseIn(echoPin, HIGH);}
void setup() { pinMode(triggerPin, OUTPUT); // 設定觸發腳為輸出腳位 pinMode(echoPin, INPUT); // 設定回聲腳為輸入腳位
// 初始化10顆LED腳位為輸出,並預設關閉LED(低電位) for (int i = ledStartPin; i < ledStartPin + ledCount; i++) { pinMode(i, OUTPUT); digitalWrite(i, LOW); }}
// 函式:根據距離調整點亮LED數量void setLEDsByDistance(float distanceCm) { // 利用 map 函式將距離映射到LED點亮數量範圍內,距離近點亮多顆,遠則少顆 int ledsOn = map(distanceCm, 0, 200, ledCount, 0); ledsOn = constrain(ledsOn, 0, ledCount); // 限制ledsOn在0~10之間
// 控制LED亮滅狀態 for (int i = 0; i < ledCount; i++) { int pin = ledStartPin + i; if (i < ledsOn) { digitalWrite(pin, HIGH); // 低於點亮數量的LED全部開啟 } else { digitalWrite(pin, LOW); // 其餘LED關閉 } }}
void loop() { long duration = readUltrasonicDistance(); // 取得聲波回傳時間(微秒) float distanceCm = duration * 0.01723; // 換算成距離(公分)
setLEDsByDistance(distanceCm); // 根據距離調整LED狀態
delay(100); // 每100毫秒讀取一次,避免過度讀取}