#include<Wire.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define led1 26 //ประกาศตัวแปรไฟ LED
#define led2 25
#define led3 33
#define led4 32
#define led5 15
#define trigPin 17 //ประกาศตัวแปร Ultrasonic Sensor
#define echoPin 16 //ประกาศตัวแปร Ultrasonic Sensor
#define speaker 4 //ประกาศตัวแปร ลำโพง
long duration;
int distance;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(echoPin,INPUT); //ตั้งค่า Ultrasonic Sensor
pinMode(trigPin,OUTPUT);
pinMode(led1,OUTPUT); //ตั้งค่า LED เป็น OUTPUT
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(speaker,OUTPUT); //ตั้งค่า ลำโพง เป็น OUTPUT
digitalWrite(led5,1); //หลอด LED ติดแสดงสถานะว่าเครื่องทำงาน
}
void loop() {
digitalWrite(trigPin,0); //ส่วนการทำงานของ Ultrasonic เพื่อวัดระยะ
delayMicroseconds(2);
digitalWrite(trigPin,1);
delayMicroseconds(10);
digitalWrite(trigPin,0);
duration = pulseIn(echoPin,1); //ระยะเวลาที่เสียงสะท้อนกลับ
distance = (duration*0.034/2)+1; //สมการแปลงระยะเป็นหน่วยเซ็นติเมตร
lcd.setCursor(0, 1); //ตั้งค่าจุดที่จะให้แสดงอักษรในจอ LCD
lcd.print(distance); //พิมพ์ค่าของ distance
if(distance >= 350){ //เมื่อระยะมากกว่าหรือเท่ากับ 350 cm ให้ทำตามคำสั่งด้านล่างนี่้
lcd.setCursor(0, 0); //ตั้งค่าจุดที่จะให้แสดงอักษรในจอ LCD
lcd.print("Distance "); //พิมพ์คำว่า Distance
digitalWrite(led4,0); //แสดงสถานะหลอด LED ไฟดับทั้งหมดยกเว้นสีเขียวที่ติด
digitalWrite(led3,0);
digitalWrite(led2,0);
digitalWrite(led1,0);
}else if(distance < 350 && distance >= 250){ //เมื่อระยะห่างอยู่ระหว่าง 349 - 250 cm ให้ทำตามคำสั่งด้านล่างนี่้
lcd.setCursor(0, 0);
lcd.print("Distance ");
digitalWrite(led4,1); //แสดงสถานะหลอด LED ไฟติดหลอด เขียว และ เหลืองหลอดที่ 1
digitalWrite(led3,0);
digitalWrite(led2,0);
digitalWrite(led1,0);
tone(speaker, NOTE_A4, 100); //เล่นเสียงคีย์ A4 0.1 วินาที
delay(900);
}else if(distance < 250 && distance >= 150){ //เมื่อระยะห่างอยู่ระหว่าง 249 - 150 cm ให้ทำตามคำสั่งด้านล่างนี่้
lcd.setCursor(0, 0);
lcd.print("Distance ");
digitalWrite(led4,1); //แสดงสถานะหลอด LED ไฟติดหลอด เขียว ,เหลืองหลอดที่ 1 และ 2
digitalWrite(led3,1);
digitalWrite(led2,0);
digitalWrite(led1,0);
tone(speaker, NOTE_B4, 100); //เล่นเสียงคีย์ B4 0.1 วินาที
delay(400);
}else if(distance < 150 && distance >= 50){ //เมื่อระยะห่างอยู่ระหว่าง 149 - 50 cm ให้ทำตามคำสั่งด้านล่างนี่้
digitalWrite(led4,1); //แสดงสถานะหลอด LED ไฟติดหลอด เขียว และเหลืองทุกหลอด
digitalWrite(led3,1);
digitalWrite(led2,1);
digitalWrite(led1,0);
tone(speaker, NOTE_C4, 50); //เล่นเสียงคีย์ C4 0.05 วินาที
lcd.setCursor(0, 0);
lcd.print("Critical Dist"); //พิมพ์คำว่า Critical Dist
delay(150);
if(distance < 100){
lcd.setCursor(2, 1);
lcd.print(" "); //ลบตัวเลขส่วนเกิน
}
}else if(distance < 50){ //เมื่อระยะห่างน้อยกว่า 50 cm ให้ทำตามคำสั่งด้านล่างนี่้
digitalWrite(led4,1); //แสดงสถานะหลอด LED ไฟติดหลอด เขียว ,เหลืองทุกหลอด และแดง
digitalWrite(led3,1);
digitalWrite(led2,1);
digitalWrite(led1,1);
lcd.setCursor(2, 1);
lcd.print(" "); //ลบตัวเลขส่วนเกิน
lcd.setCursor(0, 0);
lcd.print("Critical Dist");
tone(speaker, NOTE_C4, 250); //เล่นเสียงคีย์ C4 0.25 วินาที ซึ่งนานกว่าระยะเวลา delay ของ loop ทั้งหมด เพราะฉนั้นจึงเป็นเสียงติดค้าง
delay(100);
digitalWrite(led1,0); //ทำให้หลอด LED แดงดับเพราะทำสัญญาณไฟกระพริบ
lcd.setCursor(0, 0);
lcd.print(" "); //ลบ Critical Dist เพื่อทำให้เกิดการกระพริบ
if(distance < 10){
lcd.setCursor(1, 1);
lcd.print(" "); //ลบตัวเลขส่วนเกิน
}
}
lcd.setCursor(4, 1);
lcd.print("cm"); //พิมพ์คำว่า cm
delay(100);
}