ตัวอย่างโปรแกรมสำหรับ ESP32:

C++
const int potPin = 6; // VR ต่อที่ขา ADC เช่น GPIO6
const int ledPin[] = {15, 23, 21, 18, 9}; // LED ต่อขา PWM เช่น GPIO14, 27 ฯลฯ
void setup() {
for(int i=0; i<5; i++) {
pinMode(ledPin[i], OUTPUT);
}
Serial.begin(115200);
}
void loop() {
int potValue = analogRead(potPin); // อ่านค่า VR (0-4095)
int level = map(potValue, 0, 4095, 0, 5); // แปลงช่วงค่า (ESP32 ให้ค่า 0–4095)
for(int i=0;i<5;i++){
digitalWrite(ledPin[i], (i < level) ? HIGH : LOW); // ให้ LED ติดตามช่วงค่า
}
delay(50);
}
โปรแกรมนี้ใช้ไมโครคอนโทรลเลอร์ ESP32 เพื่อควบคุมจำนวน LED ที่สว่างตามค่าจาก VR/Potentiometer ที่ต่อกับขา ADC (เช่น GPIO11)
ส่วนประกอบของโปรแกรม
potPin =6: ระบุขาที่ต่อกับ VR สำหรับอ่านค่ายังอนาล็อก (ต้องเป็นขาที่รองรับ ADC ของ ESP32ledPin[] = {15, 23, 21, 18, 9}: กำหนดขาสำหรับต่อ LED ทั้ง 5 ดวง
การทำงาน
- setup(): กำหนดขา LED ทุกขาเป็น OUTPUT เพื่อเตรียมสั่งงาน LED และเริ่มต้น Serial Monitor เพื่อดูค่าที่อ่านได้
- loop():
- อ่านค่าสัญญาณอนาล็อกจาก VR (
analogRead(potPin)) ซึ่ง ESP32 จะให้ค่าในช่วง 0–4095 - ใช้
map()แปลงค่า VR ให้เป็นช่วงระดับ 0 ถึง 5; แต่ละระดับจะเป็นจำนวน LED ที่ต้องสว่าง - วน for เพื่อเช็ค LED ทีละดวง ถ้า index น้อยกว่าค่า level ให้ LED ติด ถ้าไม่ใช่ให้ LED ดับ
- มี delay 50 ms เพื่อให้การเปลี่ยนค่าสามารถดูด้วยตาเปล่าได้
- อ่านค่าสัญญาณอนาล็อกจาก VR (
ผลลัพธ์การใช้งาน
- หมุน VR ไปปลายนึง (ค่าต่ำสุด) LED ดับหมด
- หมุนไปอีกปลาย (ค่าสูงสุด) LED ติดครบทุกดวง
- ระหว่างหมุน VR จะมี LED ดวงต่าง ๆ ติดเพิ่มขึ้นทีละดวงตามระดับ เหมือน Bar graph
หลักการเบื้องหลัง
- “analogRead” จะรับค่าแรงดันไฟฟ้าจาก VR แปลงเป็นตัวเลขดิจิทัล
- “map” นำค่า VR มาแบ่งเป็นช่วงระดับ 5 ค่า (0-1-2-3-4-5)
- “digitalWrite” สั่งให้ LED ติดหรือดับตามระดับ VR ที่แปลงแล้ว
โดยสรุป: โปรแกรมนี้ใช้ VR/Potentiometer ในการควบคุมจำนวนดวง LED ที่สว่าง เหมาะกับตัวอย่างการแสดงระดับค่าด้วยไฟ LED หลายดวง เพื่อดูการทำงานของ analog input กับ digital output บน ESP32
ตัวอย่างโปรแกรมสำหรับ Arduino UNO:

C++
const int potPin = A3; // ต่อ potentiometer ที่ขา A3
const int ledPin[] = {12,11,10,9,8}; // LED 5 ดวง
void setup() {
for(int i=0;i<5;i++){
pinMode(ledPin[i], OUTPUT);
}
Serial.begin(115200);
}
void loop() {
int potValue = analogRead(potPin);
int level = map(potValue, 0, 1023, 0, 5); // แปลงค่า pot เป็น 0-5
for(int i=0;i<5;i++){
if(i < level){
digitalWrite(ledPin[i], HIGH); // ติด LED ตามตำแหน่ง
}else{
digitalWrite(ledPin[i], LOW); // ดับที่เหลือ
}
}
delay(50); // ปรับความไว
}
โปรแกรมนี้ใช้ VR/Potentiometer ที่ต่อกับขา A3 เพื่อควบคุมจำนวน LED ที่ติด (total 5 ดวง) โดยจำนวน LED ที่ติดจะเปลี่ยนไปตามค่าที่อ่านได้จาก potentiometer.
หลักการทำงานแต่ละส่วน
const int potPin = A3;กำหนดให้ potentiometer ต่ออยู่ที่ขา A3 ซึ่งเป็น analog inputconst int ledPin[] = {12,11,10,9,8};กำหนดขา digital สำหรับ LED ทั้ง 5 ดวง- ใน
setup()สั่งให้ตั้งสถานะ output ให้กับขา LED แต่ละขาตาม array ledPin และเริ่ม serial monitor - ใน
loop()จะอ่านค่า analog จาก potentiometer (analogRead(potPin)) ค่านี้จะอยู่ในช่วง 0–1023 - ใช้
map(potValue, 0, 1023, 0, 5)เพื่อแปลงค่า potentiometer ที่อ่านได้ให้เป็นช่วงระดับ 0 ถึง 5 - ใช้ for loop เพื่อควบคุม LED:
- ถ้าค่าระดับ (level) มากกว่า index ของ LED ใด LED นั้นจะถูกเปิด (
HIGH) ถ้าไม่ใช่จะดับ (LOW)
- ถ้าค่าระดับ (level) มากกว่า index ของ LED ใด LED นั้นจะถูกเปิด (
- delay 50 ms ทำให้การเปลี่ยนแปลงค่าดูต่อเนื่อง
การทำงานโดยสรุป
- หมุนปุ่ม VR ไปทางซ้าย (ค่าต่ำสุด) LED ทั้งหมดดับ
- หมุนไปทางขวา (ค่าสูงสุด) LED ทั้งหมดติด
- แต่ละช่วงค่า (เช่น 0, 1, 2, 3, 4, 5) จะทำให้ติด LED ไล่จากซ้ายไปขวาเหมือน bar graph
Simulate: https://www.tinkercad.com/embed/hn9T3kQy47Q?editbtn=1
