#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
#define SW1 16
#define SW2 17
#define SW3 5
#define LED 25
int adc;
int adc8;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
}
display.display();
delay(2000);
display.clearDisplay();
// Test Draw Char
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Lab9 EEPROM");
display.setCursor(0, 16);
display.println("Embeded LAB");
display.display();
delay(2000);
pinMode(LED,OUTPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2,INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
}
void loop() {
adc = analogRead(34); //12bit(0-4095)
adc8 = (adc*255)/4095; //convert 12bit->8bit
Serial.print(adc);
Serial.print(", ");
Serial.println(adc8);
if(digitalRead(SW1)==LOW){
analogWrite(LED,0);
}else if(digitalRead(SW2)==LOW){
analogWrite(LED,30);
}else if(digitalRead(SW3)==LOW){
analogWrite(LED,255);
}
// analogWrite(25,adc8); //8bit(0-255)
}
/*โค้ดนี้เป็นโปรแกรมบนบอร์ด ESP32 ที่ใช้งาน OLED Display และ อ่านค่าจาก ADC ของ ESP32 รวมถึงมีการควบคุม LED ผ่านการกดปุ่ม (Switch) โดยมีการใช้ปุ่มทั้งหมด 3 ปุ่มเพื่อควบคุมค่าความสว่างของ LED
อธิบายโค้ด
การนำเข้าไลบรารี
SPI.h และ Wire.h: ใช้สำหรับการสื่อสารผ่านโปรโตคอล SPI และ I2C
Adafruit_GFX.h และ Adafruit_SSD1306.h: ใช้สำหรับควบคุมการแสดงผลบนจอ OLED
การกำหนดค่าจอ OLED
SCREEN_WIDTH และ SCREEN_HEIGHT: กำหนดขนาดของจอ OLED (กว้าง 128 พิกเซลและสูง 64 พิกเซล)
Adafruit_SSD1306 display: สร้างออบเจ็กต์สำหรับควบคุมจอ OLED โดยใช้การสื่อสารผ่าน I2C
การกำหนดพอร์ต
SW1, SW2, SW3: ปุ่มควบคุมเชื่อมต่อที่ขา 16, 17 และ 5 ตามลำดับ
LED: ไฟ LED เชื่อมต่อที่ขา 25 ซึ่งใช้สำหรับปรับความสว่าง
adc: ตัวแปรสำหรับเก็บค่าที่อ่านได้จาก POT (พอต หรือ ตัวต้านทานปรับค่าได้) ผ่านการอ่านค่า analogRead
adc8: ตัวแปรที่เก็บค่า ADC ที่แปลงจาก 12-bit (0-4095) เป็น 8-bit (0-255)
การทำงานของฟังก์ชัน setup()
เริ่มต้นการทำงานของ Serial Monitor ที่บอดเรต 115200
ตั้งค่า OLED Display และแสดงข้อความ "Lab9 EEPROM" และ "Embeded LAB" บนจอ OLED เป็นเวลา 2 วินาที
ตั้งค่าโหมดของขา LED ให้เป็นขาออก (OUTPUT) และขา SW1, SW2, SW3 เป็นขาเข้าพร้อมการดึงแรงดันไฟสูง (INPUT_PULLUP)
การทำงานของฟังก์ชัน loop()
อ่านค่าจาก POT ที่เชื่อมต่อกับขา 34 โดยค่าที่ได้จะอยู่ในช่วง 0-4095 (12-bit)
แปลงค่าจาก 12-bit (0-4095) ให้เป็น 8-bit (0-255) เพื่อใช้ควบคุมความสว่างของ LED
แสดงค่าที่อ่านได้จาก ADC และค่าที่ถูกแปลงเป็น 8-bit บน Serial Monitor
การควบคุม LED ด้วยปุ่ม
เมื่อกด SW1: LED จะถูกตั้งค่าความสว่างเป็น 0 (ปิดไฟ)
เมื่อกด SW2: LED จะถูกตั้งค่าความสว่างเป็น 30 (ความสว่างต่ำ)
เมื่อกด SW3: LED จะถูกตั้งค่าความสว่างเป็น 255 (ความสว่างสูงสุด)
ข้อสังเกต
โค้ดมีการเตรียมพร้อมสำหรับการควบคุมความสว่างของ LED ผ่านค่า ADC ที่อ่านได้จาก POT โดยแปลงค่าเป็น 8-bit
แต่ในลูปหลักยังไม่ได้เปิดใช้งานการควบคุมความสว่างผ่านค่า ADC นี้ (analogWrite(25, adc8) ถูกคอมเมนต์ไว้)
*/