#include "common.h"
//////////////////////////////////////////////////
// use 12 bit precision for LEDC timer
#define LEDC_TIMER_12_BIT 12
// use 5000 Hz as a LEDC base frequency
#define LEDC_BASE_FREQ 5000
// define starting duty, target duty and maximum fade time
#define LEDC_START_DUTY (0)
#define LEDC_TARGET_DUTY (4095)
#define LEDC_FADE_TIME (3000)
bool fade_ended = false; // status of LED fade
bool fade_in = true;
void ARDUINO_ISR_ATTR LED_FADE_ISR() {
fade_ended = true;
}
//////////////////////////////////////////////////
// ---------------------------------------------------------
// setup
// ---------------------------------------------------------
void setup() {
Serial.begin(115200);
delay(10);
DEBUG_F("\r\n\n ------❗ESP Booting Firmware ➡️ [ %s ] ------\r\n", SKETCH_NAME.c_str());
// -LED-LED----------------------------
// for (uint8_t i = 0; i < NUM_Leds; i++) {
// pinMode(LEDS[i], OUTPUT);
// digitalWrite (LEDS[i], LOW);
// }
// StartLeds();
// Setup timer with given frequency, resolution and attach it to a led pin with auto-selected channel
ledcAttach(LED_S, LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
// Setup and start fade on led (duty from 0 to 4095)
ledcFade(LED_S, LEDC_START_DUTY, LEDC_TARGET_DUTY, LEDC_FADE_TIME);
Serial.println("LED Fade on started.");
// Wait for fade to end
delay(LEDC_FADE_TIME);
// Setup and start fade off led and use ISR (duty from 4095 to 0)
ledcFadeWithInterrupt(LED_S, LEDC_TARGET_DUTY, LEDC_START_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
Serial.println("LED Fade off started.");
}
// ---------------------------------------------------------
// Main loop
// ---------------------------------------------------------
void loop() {
// RadomFadeLeds();
// Check if fade_ended flag was set to true in ISR
if (fade_ended) {
Serial.println("LED fade ended");
fade_ended = false;
// Check what fade should be started next
if (fade_in) {
ledcFadeWithInterrupt(LED_S, LEDC_START_DUTY, LEDC_TARGET_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
Serial.println("LED Fade in started.");
fade_in = false;
} else {
ledcFadeWithInterrupt(LED_S, LEDC_TARGET_DUTY, LEDC_START_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
Serial.println("LED Fade out started.");
fade_in = true;
}
}
}
// ---------------------------------------------------------
// StartLeds
// ---------------------------------------------------------
void StartLeds() {
static bool State[NUM_Leds];
for (uint8_t i = 0; i < NUM_Leds; i++) {
State[i] = !State[i];
digitalWrite (LEDS[i], State[i]);
delay ( 400 );
}
}
// ---------------------------------------------------------
//
// ---------------------------------------------------------
void Continue() {
static bool State[NUM_Leds];
State[led] = !State[led];
digitalWrite (LEDS[led], State[led]);
delay ( 400 );
// led = (led + 1) % NUM_Leds;
led = led + count;
if (led < 0 || led >= NUM_Leds) {
count = -count;
}
}
// ---------------------------------------------------------
//
// ---------------------------------------------------------
void FadeAllLeds() {
brightness = brightness + fadeAmount;
if (brightness < 0 || brightness >= 150) {
fadeAmount = -fadeAmount;
}
analogWrite(LEDS[led], brightness);
delay(2);
led = led + count;
if (led < 0 || led >= NUM_Leds) {
count = -count;
}
}
// ---------------------------------------------------------
//
// ---------------------------------------------------------
void RadomFadeLeds() {
brightness = random (0, 50);
led = random(0, NUM_Leds);
analogWrite(LEDS[led], brightness);
delay(20);
}
/*********************************
END of this file
**********************************/Loading
xiao-esp32-s3
xiao-esp32-s3