// ตัวอย่าง การเขียนโปรแกรมบอร์ด Multi Function - Arduino uno r3
// LAB30 HC-SR04 & OLED SSD1306
// ครูวิบูลย์ กัมปนาวราวรรณ เสารร์ 29 มิถุนายน 2567
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
const int trig = 5; // ประกาศขา trig
const int echo = 4; // ประกาศขา echo
int led = 13; // ตั้งค่าขา LED
int buzzer = 12; // ตั้งค่าขา Buzzer
long duration, distance; // ประกาศตัวแปรเก็บค่าระยะ
// สร้างวัตถุสำหรับจอแสดงผล OLED ที่เชื่อมต่อผ่าน I2C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
pinMode(echo, INPUT); // สั่งให้ขา echo ใช้งานเป็น input
pinMode(trig, OUTPUT); // สั่งให้ขา trig ใช้งานเป็น output
pinMode(led, OUTPUT); // สั่งให้ขา led ใช้งานเป็น output
pinMode(buzzer, OUTPUT); // สั่งให้ขา buzzer ใช้งานเป็น output
// เริ่มต้นการทำงานของจอแสดงผล OLED ที่ address 0x3C สำหรับ 128x64
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (true);
}
delay(2000); // รอให้การเริ่มต้นเสร็จสิ้น
oled.clearDisplay(); // ล้างจอแสดงผล
oled.setTextSize(2); // ขนาดข้อความ
oled.setTextColor(WHITE); // สีข้อความ
oled.setCursor(0, 10); // ตำแหน่งที่จะเริ่มแสดงผล
}
void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW); // ใช้งานขา trig
duration = pulseIn(echo, HIGH); // อ่านค่าของ echo
distance = (duration / 2) / 29.1; // คำนวณเป็น centimeters
Serial.print(distance);
Serial.print(" cm\n");
// แสดงค่าระยะทางบนจอ OLED
oled.clearDisplay();
oled.setCursor(0, 0);
oled.print("Distance: ");
oled.print(distance);
oled.print(" cm");
oled.display();
// ควบคุม LED และ Buzzer ตามระยะทางที่วัดได้
if (distance > 30) {
digitalWrite(led, HIGH); // LED สว่างเมื่อระยะทางมากกว่า 30 เซนติเมตร
tone(buzzer, 1000); // Buzzer ส่งเสียง
} else {
digitalWrite(led, LOW); // LED ดับเมื่อระยะทางน้อยกว่าหรือเท่ากับ 30 เซนติเมตร
noTone(buzzer); // Buzzer เงียบ
}
delay(300);
}