/**********************************
# English explanation of the code
english_text = """
This script controls three LEDs connected to an Arduino.
First, the LEDs blink simultaneously for 20 seconds.
The blink effect is achieved by turning the LEDs on and off every
half second.
After 20 seconds, the LEDs fade in and out smoothly for another
20 seconds.
The fading uses a gamma correction table to adjust the brightness
in a way that looks smooth to the human eye.
Serial communication is used to print debug messages when the LEDs
are blinking or fading.
# Hindi explanation of the code
hindi_text = """
यह स्क्रिप्ट तीन एलईडी को नियंत्रित करती है जो एक Arduino से जुड़े हैं।
पहले, एलईडी 20 सेकंड तक एक साथ चमकते हैं।
चमकने का प्रभाव एलईडी को हर आधे सेकंड में चालू और बंद करके प्राप्त किया जाता है।
20 सेकंड के बाद, एलईडी एक और 20 सेकंड के लिए धीरे-धीरे बढ़ते और घटते हैं।
फेडिंग में एक गामा करेक्शन टेबल का उपयोग किया जाता है जो मानव आंखों के लिए
प्रकाश को चिकना दिखने में मदद करता है।
सीरियल कम्युनिकेशन का उपयोग एलईडी के चमकने या फेड होने पर डिबग मैसेज प्रिंट
करने के लिए किया जाता है।
arvind ptil 12/10/24
**********************************************************/
#define RED_PIN 3 // PWM pin for Red LED
#define GREEN_PIN 6 // PWM pin for Green LED
#define BLUE_PIN 10 // PWM pin for Blue LED
#define FADE_SPEED 10 // lower is faster
#define BLINK_DELAY 500 // milliseconds delay for blinking
// Gamma table for brightness correction
const uint8_t PROGMEM gamma8[] = {
// (same gamma table as before)
};
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
// Initialize serial communication for debugging
Serial.begin(9600);
Serial.println("Program started: LEDs will blink and fade simultaneously.");
}
void loop() {
// Blink all LEDs simultaneously for 20 seconds
Serial.println("Blinking LEDs...");
unsigned long startBlinkTime = millis(); // Record the start time
while (millis() - startBlinkTime < 20000) { // Blink for 20 seconds
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
delay(BLINK_DELAY); // Keep LEDs on for BLINK_DELAY
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(BLINK_DELAY); // Keep LEDs off for BLINK_DELAY
}
// Fade all LEDs simultaneously for 20 seconds
Serial.println("Fading LEDs...");
unsigned long startFadeTime = millis(); // Record the start time
while (millis() - startFadeTime < 20000) { // Fade for 20 seconds
// Fade in all LEDs simultaneously
for (int i = 0; i < 255; i++) {
uint8_t brightness = pgm_read_byte(&gamma8[i]);
analogWrite(RED_PIN, brightness);
analogWrite(GREEN_PIN, brightness);
analogWrite(BLUE_PIN, brightness);
delay(FADE_SPEED);
}
// Fade out all LEDs simultaneously
for (int i = 255; i > 0; i--) {
uint8_t brightness = pgm_read_byte(&gamma8[i]);
analogWrite(RED_PIN, brightness);
analogWrite(GREEN_PIN, brightness);
analogWrite(BLUE_PIN, brightness);
delay(FADE_SPEED);
}
}
}