こちらのページを参考にしました。
LED Control (LEDC)
8個のLED の明るさを変化させます。
プログラム
ledc_ex01.ino
// ---------------------------------------------------------------------
// ledc_ex01.ino
//
// Aug/19/2024
// ---------------------------------------------------------------------
// 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
int ledpins[8] = {32,33,25,26,27,14,12,13};
// 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_on = true;
void ARDUINO_ISR_ATTR LED_FADE_ISR() {
fade_ended = true;
}
int icount = 0;
// ---------------------------------------------------------------------
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10);
}
Serial.println("*** setup *** aaa ***");
// Setup timer with given frequency, resolution and attach it to a led pin with auto-selected channel
for (int it=0; it<8; it++)
{
ledcAttach(ledpins[it], LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
}
// Setup and start fade on led (duty from 0 to 4095)
for (int it=0; it<8; it++)
{
ledcFade(ledpins[it], 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)
for (int it=0; it<8; it++)
{
ledcFadeWithInterrupt(ledpins[it], LEDC_TARGET_DUTY, LEDC_START_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
}
Serial.println("LED Fade off started.");
}
// ---------------------------------------------------------------------
void loop() {
delay(2000);
// Check if fade_ended flag was set to true in ISR
if (fade_ended) {
Serial.print("LED fade ended icoount = ");
Serial.println(icount);
icount++;
fade_ended = false;
// Check if last fade was fade on
if (fade_on) {
for (int it=0; it<8; it++)
{
ledcFadeWithInterrupt(ledpins[it], LEDC_START_DUTY, LEDC_TARGET_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
}
Serial.println("LED Fade off started. loop");
fade_on = false;
} else {
for (int it=0; it<8; it++)
{
ledcFadeWithInterrupt(ledpins[it], LEDC_TARGET_DUTY, LEDC_START_DUTY, LEDC_FADE_TIME, LED_FADE_ISR);
}
Serial.println("LED Fade on started. loop");
fade_on = true;
}
}
}
// ---------------------------------------------------------------------