#define PIN_TRIG 12 // กำหนดพินสำหรับส่งสัญญาณ Trigger (Trig Pin) ของเซ็นเซอร์อัลตราโซนิก
#define PIN_ECHO 14 // กำหนดพินสำหรับรับสัญญาณ Echo (Echo Pin) ของเซ็นเซอร์อัลตราโซนิก
#define LOWLED 17 // กำหนดพินสำหรับ LED แสดงสถานะระดับต่ำ
#define MIDLED 5 // กำหนดพินสำหรับ LED แสดงสถานะระดับกลาง
#define HIGHLED 18 // กำหนดพินสำหรับ LED แสดงสถานะระดับสูง
#define MOTOR 13 // กำหนดพินสำหรับมอเตอร์
unsigned int level = 0; // ตัวแปรเก็บค่าระยะทางที่วัดได้จากเซ็นเซอร์
void setup() {
// ตั้งค่าพินสำหรับ LED และมอเตอร์เป็น OUTPUT
pinMode(LOWLED, OUTPUT);
pinMode(MIDLED, OUTPUT);
pinMode(HIGHLED, OUTPUT);
pinMode(MOTOR, OUTPUT);
// เริ่มต้นค่า LED ทั้งหมดให้เปิด (HIGH) และมอเตอร์ให้ปิด (LOW)
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
digitalWrite(MOTOR, LOW);
// เริ่มต้นการสื่อสารกับ Serial Monitor
Serial.begin(115200);
// ตั้งค่าพิน TRIG เป็น OUTPUT และพิน ECHO เป็น INPUT สำหรับการใช้งานเซ็นเซอร์อัลตราโซนิก
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
}
void loop() {
// เริ่มการวัดระยะทางโดยการส่งสัญญาณ HIGH ไปที่พิน TRIG เพื่อเริ่มการสะท้อนเสียง
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10); // รอเวลา 10 ไมโครวินาที
digitalWrite(PIN_TRIG, LOW); // ส่งสัญญาณ LOW เพื่อให้เซ็นเซอร์รับสัญญาณ Echo กลับมา
// อ่านค่าสัญญาณ Echo ที่กลับมาจากเซ็นเซอร์ (เวลาในการเดินทางของเสียง)
int duration = pulseIn(PIN_ECHO, HIGH); // วัดเวลาที่ Echo ใช้ในการเดินทาง
// แสดงระยะทางที่วัดได้ในหน่วยเซนติเมตรและนิ้ว
Serial.print("Distance in CM: ");
Serial.println(duration / 58); // คำนวณระยะทางในเซนติเมตร
Serial.print("Distance in inches: ");
Serial.println(duration / 148); // คำนวณระยะทางในนิ้ว
// คำนวณระดับระยะทางเป็นเซนติเมตร
level = duration / 58;
// กำหนดการแสดงผลตามระยะทางที่วัดได้
if (level < 100) { // ถ้าระยะทางน้อยกว่า 100 เซนติเมตร
digitalWrite(LOWLED, LOW); // ปิด LED ต่ำ
digitalWrite(HIGHLED, HIGH); // เปิด LED สูง
digitalWrite(MIDLED, HIGH); // เปิด LED กลาง
digitalWrite(MOTOR, HIGH); // เปิดมอเตอร์
}
else if ((level > 200) && (level < 400)) { // ถ้าระยะทางระหว่าง 200-400 เซนติเมตร
digitalWrite(LOWLED, LOW); // ปิด LED ต่ำ
digitalWrite(MIDLED, LOW); // ปิด LED กลาง
digitalWrite(HIGHLED, HIGH); // เปิด LED สูง
digitalWrite(MOTOR, HIGH); // เปิดมอเตอร์
}
else if (level >= 400) { // ถ้าระยะทางมากกว่า 400 เซนติเมตร
digitalWrite(HIGHLED, LOW); // ปิด LED สูง
digitalWrite(MIDLED, HIGH); // เปิด LED กลาง
digitalWrite(LOWLED, HIGH); // เปิด LED ต่ำ
digitalWrite(MOTOR, LOW); // ปิดมอเตอร์
}
delay(1000); // หน่วงเวลา 1 วินาที ก่อนที่จะวัดระยะทางใหม่
}