You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

65 lines
1.9 KiB

/* fade w/o pwm
Fades an LED that is not connected to a PWM pin
This was modified from the Blink without Delay code
https://create.arduino.cc/projecthub/hs_education_georgia/fade-led-without-using-pwm-08a82f
The circuit:
* LED attached from pin 13 to ground.
* Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.
*/
// constants won't change. Used here to set pin numbers:
const int ledPin = 14; // the number of the LED pin
// Variables will change:
int ledState = LOW; // ledState used to set the LED
long previousMicros = 0; // will store the last time the blink cycle occured
// the follow variables is a long because the time, measured in microseconds,
// will quickly become a bigger number than can be stored in an int.
long intervalLength = 500; // interval at which to blink (microseconds)
long onInterval = 20; // on or HIGH interval length
long currentInterval; // length of the current interval
int fadeLength = 200;
int fadeCount = 0;
int intervalDirection = 1;
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop()
{
unsigned long currentMicros = micros();
currentInterval = currentMicros - previousMicros;
if (currentInterval <= onInterval) {
ledState = HIGH;
}
else {
ledState = LOW;
}
if(currentInterval > intervalLength) {
// save the last time you blinked the LED
previousMicros = currentMicros;
fadeCount++;
if (fadeCount > fadeLength) {
fadeCount = 0;
onInterval += (intervalDirection * 20);
if (onInterval <= 20 || onInterval >= intervalLength) {
intervalDirection *= -1; // change the direction of the fade ( positive - brighter / negative - dimmer)
}
}
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}