//esp8266 อัลตราโซนิค แสดงบน lcd
#include <Wire.h> // เป็นการประการการทำงานขาต่างเฉพาะของ esp
#include <LiquidCrystal_I2C.h> // libery ของ จอlcd
//ประกาศขาของ อัลตราโซนิค กำหนดขาแนะนำเป็น D ตามด้วยตัวเลข
#define TRIG_PIN 2 // เช่น D4
#define ECHO_PIN 4 // เช่น D5
//ประกาศขาของ led
#define LED1_PIN 14 // เช่น D6 สำหรับ LED1
#define LED2_PIN 27 // เช่น D7 สำหรับ LED2
LiquidCrystal_I2C lcd(0x27, 16, 2); // ขาของ lcd ถูกกำหนดไว้แล้ว ถ้าเป็น esp8266 SDA จะอยู่ขา D2 SCL จะอยู่ขา D1
void setup() {
Serial.begin(115200); // เปิดการทำงานซีเรียลมอนิเตอร์
lcd.init(); // เปิดการทำงานของ จอ lcd ถ้า ใช้ init แล้วยังไม่ติด ลอง lcd.begin();
lcd.backlight(); // เปิดไฟของจอlcd
pinMode(TRIG_PIN, OUTPUT); //กำหนด ขา ด้านบนที่ define ไว้
pinMode(ECHO_PIN, INPUT);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
lcd.setCursor(0, 0); // เป็นการกำหนดตำแหน่งของ เคอร์เซอร์ของจอ lcd เลขก่อน , จะเป็นเลขแถวแนวตั้ง และเลขหลัง , จะเป็นเลขแถวแนวนอน
lcd.print("Distance: "); // แสดงข้อความ อย่าลืม ข้อความจะต้องมี "" เสมอ
}
void loop() {
//โปรแกรมการทำงารของ อัลตราโซนิค {
long duration, distance; //ประกาศตัวแปร distance ไว้สำหรับเก็บๆค่าระยะทาง เพื่อไปแสดง
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration * 0.034) / 2;
//} จบโปรแกรมของอัลตราโซนิค
//การแสดงระยะของ อัลตราโซนิคในซีเรียลมอนิเตอร์
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
//การแสดงระยะของ อัลตราโซนิคบนจอ lcd
lcd.setCursor(10, 0); //กำหนดตำแหน่ง ตัวที่ 9 บรรทัดที่ 1
lcd.print(" "); //ทำให้พื้่นที่ตรง ตัวที่ 9 (0-15) เป็นพื้นที่ว่าง(ลบข้อความทิ้ง)
lcd.setCursor(10, 0); //กำหนดตำแหน่ง ตัวที่ 9 บรรทัดที่ 1
lcd.print(distance); //แสดงเลขระยทางที่เก็บค่าไว้
lcd.print(" cm"); //แสดงหน่วยของระยะต่อจากเลข
//การทำ if else ในการแสดงการทำงานของ led
if (distance <= 10) {
digitalWrite(LED1_PIN, HIGH); // เปิด LED1 ค้างเมื่อระยะ < 10 cm
digitalWrite(LED2_PIN, LOW); // ปิด LED2
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("FULL");
}
else if (distance > 10 && distance <= 20) {
// กระพริบ LED1 เมื่อระยะอยู่ระหว่าง 10-20 cm
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, LOW); // ปิด LED2
delay(500);
digitalWrite(LED1_PIN, LOW);
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("PARKING");
}
else {
digitalWrite(LED1_PIN, LOW); // ปิด LED1
digitalWrite(LED2_PIN, HIGH); // เปิด LED2 ค้างเมื่อระยะ > 20 cm
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("EMPTY");
}
delay(500); // หน่วงเวลา
}