0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32: LEDの制御 (PWM)

Posted at

こちらのページを参考にしました。
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;
		}
	}
}

// ---------------------------------------------------------------------
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?