#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Define pins for Potentiometer, LEDs, and LCD
int potPin = 32;
int led[] = { 12, 13, 14, 15, 16, 17, 23, 19 };
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16 columns, 2 rows
int freq = 13000; // ความถี่ในการสร้างสัญญาณ PWM
int ledChannel[] = { 0,1,2,3,4,5,6,7 }; // ช่อง 0-15
int resolution = 8; // ความละเอียด 0-16 bit
void setup() {
// Initialize LCD
lcd.init();
lcd.backlight(); // Turn on backlight
// Set LED pins as OUTPUT
for (int i = 0; i < 8; i++) {
ledcSetup(ledChannel[i], freq, resolution);
ledcAttachPin(led[i], ledChannel[i]);
}
}
void ledPattern1() {
ledcWrite(ledChannel[0], 155);
ledcWrite(ledChannel[1], 155); //1
ledcWrite(ledChannel[2], 155);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //2
ledcWrite(ledChannel[1], 155);
ledcWrite(ledChannel[2], 155);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //3
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 130);
ledcWrite(ledChannel[3], 130);
ledcWrite(ledChannel[4], 130);
ledcWrite(ledChannel[5], 130);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //4
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 155);
ledcWrite(ledChannel[6], 155);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //5
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 155);
ledcWrite(ledChannel[6], 155);
ledcWrite(ledChannel[7], 155);
delay(500);
ledcWrite(ledChannel[0], 0); //6
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 155);
ledcWrite(ledChannel[6], 155);
ledcWrite(ledChannel[7], 155);
delay(500);
ledcWrite(ledChannel[0], 0); //7
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 155);
ledcWrite(ledChannel[6], 155);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //8
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 155);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 155);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //9
ledcWrite(ledChannel[1], 155);
ledcWrite(ledChannel[2], 155);
ledcWrite(ledChannel[3], 155);
ledcWrite(ledChannel[4], 155);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 0); //10
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
}
void ledPattern2() {
ledcWrite(ledChannel[0], 0);
ledcWrite(ledChannel[1], 0); //1
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 240);
ledcWrite(ledChannel[5], 240);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //2
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 240);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //3
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //4
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 240);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //5
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 240);
ledcWrite(ledChannel[3], 240);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 0);
delay(500);
ledcWrite(ledChannel[0], 240); //6
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 240);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 0);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //7
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 0);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //8
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 0);
ledcWrite(ledChannel[5], 240);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 0); //9
ledcWrite(ledChannel[1], 0);
ledcWrite(ledChannel[2], 0);
ledcWrite(ledChannel[3], 0);
ledcWrite(ledChannel[4], 240);
ledcWrite(ledChannel[5], 240);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
ledcWrite(ledChannel[0], 240); //10
ledcWrite(ledChannel[1], 240);
ledcWrite(ledChannel[2], 240);
ledcWrite(ledChannel[3], 240);
ledcWrite(ledChannel[4], 240);
ledcWrite(ledChannel[5], 240);
ledcWrite(ledChannel[6], 240);
ledcWrite(ledChannel[7], 240);
delay(500);
}
void loop() {
// Read potentiometer value
int potValue = analogRead(potPin);
// Map potentiometer value to percentage
int percentage = map(potValue, 0, 4095, 0, 100);
// Display percentage on LCD
lcd.setCursor(0, 0);
lcd.print("Pot %: ");
lcd.print(percentage);
// Calculate LED brightness based on percentage and set pattern
int brightness;
if (percentage > 70) {
brightness = 155; // Pattern 1
// Blink LEDs in a pattern
lcd.setCursor(0, 1);
lcd.print("PWM: ");
lcd.print(brightness);
ledPattern1();
} else {
brightness = 240; // Pattern 2
// Turn off all LEDs
lcd.setCursor(0, 1);
lcd.print("PWM: ");
lcd.print(brightness);
ledPattern2();
}
delay(100);
lcd.clear();
}