ตัวอย่างโปรแกรมสำหรับ 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 ของ ESP32
  • ledPin[] = {15, 23, 21, 18, 9}: กำหนดขาสำหรับต่อ LED ทั้ง 5 ดวง

การทำงาน

  1. setup(): กำหนดขา LED ทุกขาเป็น OUTPUT เพื่อเตรียมสั่งงาน LED และเริ่มต้น Serial Monitor เพื่อดูค่าที่อ่านได้
  2. loop():
    • อ่านค่าสัญญาณอนาล็อกจาก VR (analogRead(potPin)) ซึ่ง ESP32 จะให้ค่าในช่วง 0–4095
    • ใช้ map() แปลงค่า VR ให้เป็นช่วงระดับ 0 ถึง 5; แต่ละระดับจะเป็นจำนวน LED ที่ต้องสว่าง
    • วน for เพื่อเช็ค LED ทีละดวง ถ้า index น้อยกว่าค่า level ให้ LED ติด ถ้าไม่ใช่ให้ LED ดับ
    • มี delay 50 ms เพื่อให้การเปลี่ยนค่าสามารถดูด้วยตาเปล่าได้

ผลลัพธ์การใช้งาน

  • หมุน 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 input
  • const 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)
  • delay 50 ms ทำให้การเปลี่ยนแปลงค่าดูต่อเนื่อง

การทำงานโดยสรุป

  • หมุนปุ่ม VR ไปทางซ้าย (ค่าต่ำสุด) LED ทั้งหมดดับ
  • หมุนไปทางขวา (ค่าสูงสุด) LED ทั้งหมดติด
  • แต่ละช่วงค่า (เช่น 0, 1, 2, 3, 4, 5) จะทำให้ติด LED ไล่จากซ้ายไปขวาเหมือน bar graph

Simulate: https://www.tinkercad.com/embed/hn9T3kQy47Q?editbtn=1