#include <LiquidCrystal_I2C.h>
//加入1602液晶顯示器的函式庫
LiquidCrystal_I2C lcd(0x27,20,4);
// set the LCD address to 0x27 for a 16 chars and 2 line display
const int trigPin = 7; // 設定超音波模組的 Trig 腳位接到 Arduino 的 7 號腳位
const int echoPin = 6; // 設定超音波模組的 Echo 腳位接到 Arduino 的 6 號腳位
const int relayPin = 2; // 設定繼電器模組的控制輸入腳位接到 Arduino 的 2 號腳位
long duration;
int distance;
const int ledPin = 10; // 在 Arduino 上使用 LED 腳位(Pin 10)
const int buzzerPin = 9; //蜂鳴器Buzzer您可以選擇不同的腳位,此處為 Pin 9
void setup() {
Serial.begin(9600); // 初始化串口通信速率為 9600
pinMode(trigPin, OUTPUT); // 設定 trigPin 為輸出
pinMode(echoPin, INPUT); // 設定 echoPin 為輸入
pinMode(relayPin, OUTPUT); // 設定 relayPin 為輸出
pinMode(ledPin, OUTPUT); // 設置 LED 接腳為輸出模式
pinMode(buzzerPin, OUTPUT); // 設置蜂鳴器接腳為輸出模式
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Hello World");
}
void loop() {
digitalWrite(trigPin, LOW); // 將 trigPin 設為低電平
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // 將 trigPin 設為高電平
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // 將 trigPin 設回低電平
duration = pulseIn(echoPin, HIGH); // 讀取 echoPin 的脈衝信號時間
distance = duration * 0.034 / 2; // 將時間轉換為距離,速度為音速的一半
if(distance<=30) //距離小於30公分,繼電器動作強制煞車
{ digitalWrite(relayPin, HIGH);delay(200);}
else {digitalWrite(relayPin, LOW);delay(200);}
if(distance<=50) //距離小於50公分
{
digitalWrite(ledPin, HIGH); // 開啟 LED ON
tone(buzzerPin, 1000); // 發出 1000Hz 的聲音
delay(30); // 持續 0.03秒
noTone(buzzerPin); // 停止聲音
delay(30); // 停止 0.03秒
}
else if((distance>50) && (distance<=150)) //距離大於50公分且小於150公分
{digitalWrite(ledPin, HIGH); // 開啟 LED
delay(200); // 延遲 0.2 秒(LED 亮 0.2 秒)
digitalWrite(ledPin, LOW); // 關閉 LED
delay(200); // 延遲 0.2 秒(LED 暗 0.2 秒)
tone(buzzerPin, 1000); // 發出 1000Hz 的聲音
delay(200); // 持續 0.2 秒
noTone(buzzerPin); // 停止聲音
delay(200); // 停止 0.2 秒
}
else {
digitalWrite(ledPin, LOW); // 關閉LED OFF
noTone(buzzerPin); // 停止聲音
digitalWrite(relayPin, LOW);
//lcd.clear();
}
Serial.print("Distance: ");// 在下面的串列監視器顯示距離
Serial.print(distance);
Serial.println(" cm");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distance(cm):");
lcd.setCursor(7,1);
lcd.print(distance);
delay(300); // 延遲0.3秒後再次測量距離
//lcd.clear();
}