| 
									
										
										
										
											2017-02-12 16:30:12 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  LEDC Software Fade | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  This example shows how to software fade LED | 
					
						
							|  |  |  |  using the ledcWrite function. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Code adapted from original Arduino Fade example: | 
					
						
							|  |  |  |  https://www.arduino.cc/en/Tutorial/Fade
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  This example code is in the public domain. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // use first channel of 16 channels (started from zero)
 | 
					
						
							|  |  |  | #define LEDC_CHANNEL_0     0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // use 13 bit precission for LEDC timer
 | 
					
						
							|  |  |  | #define LEDC_TIMER_13_BIT  13
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // use 5000 Hz as a LEDC base frequency
 | 
					
						
							|  |  |  | #define LEDC_BASE_FREQ     5000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // fade LED PIN (replace with LED_BUILTIN constant for built-in LED)
 | 
					
						
							|  |  |  | #define LED_PIN            5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int brightness = 0;    // how bright the LED is
 | 
					
						
							|  |  |  | int fadeAmount = 5;    // how many points to fade the LED by
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Arduino like analogWrite
 | 
					
						
							|  |  |  | // value has to be between 0 and valueMax
 | 
					
						
							|  |  |  | void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) { | 
					
						
							| 
									
										
										
										
											2017-05-19 15:16:55 +07:00
										 |  |  |   // calculate duty, 8191 from 2 ^ 13 - 1
 | 
					
						
							|  |  |  |   uint32_t duty = (8191 / valueMax) * min(value, valueMax); | 
					
						
							| 
									
										
										
										
											2017-02-12 16:30:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // write duty to LEDC
 | 
					
						
							|  |  |  |   ledcWrite(channel, duty); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void setup() { | 
					
						
							|  |  |  |   // Setup timer and attach timer to a led pin
 | 
					
						
							|  |  |  |   ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); | 
					
						
							|  |  |  |   ledcAttachPin(LED_PIN, LEDC_CHANNEL_0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop() { | 
					
						
							|  |  |  |   // set the brightness on LEDC channel 0
 | 
					
						
							|  |  |  |   ledcAnalogWrite(LEDC_CHANNEL_0, brightness); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // change the brightness for next time through the loop:
 | 
					
						
							|  |  |  |   brightness = brightness + fadeAmount; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // reverse the direction of the fading at the ends of the fade:
 | 
					
						
							|  |  |  |   if (brightness <= 0 || brightness >= 255) { | 
					
						
							|  |  |  |     fadeAmount = -fadeAmount; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   // wait for 30 milliseconds to see the dimming effect
 | 
					
						
							|  |  |  |   delay(30); | 
					
						
							|  |  |  | } |