Learn Arduino with Olympia Circuits
Learn Arduino
  • Home
    • Get Started
    • How to Use This Site
  • Electronics
    • The Basics
    • Electricity Flows like Water
    • Electronic Components
    • The Arno Board
  • Programming
    • The Basics
    • setup and loop Blocks
    • Variables and Arrays
    • Connecting with the Pins
    • Flow Control >
      • if Statement
      • Loops
      • Delays
    • Functions
    • Serial Communication
    • USB
    • Some Thoughts
  • Projects
    • Projects 1 >
      • 1.01: Blink
      • 1.02 Blink x2
      • 1.03 Blink Faster
      • 1.04 LED Chase!
      • 1.05 Wait To Blink
      • 1.06 Blink a Little Faster Now
      • 1.07 LED Fade
      • 1.08 RGB Blink
      • 1.09 Change RGB Color with SW1
      • 1.10 Fade RGB Colors
      • 1.11 Reaction Time Game
    • Projects 2 >
      • 2.01 Hello World
      • 2.02 Talk Back
      • 2.03 ASCII Values
      • 2.04 Ski Game
      • 2.05 Demonstration of the String Object
    • Projects 3 >
      • 3.01 Read the Potentiometer
      • 3.02 ASCIIbet Soup
      • 3.03 Potentiometer sets LED Brightness
      • 3.04 Potentiometer Sets Blink Rate
      • 3.05 LED Chase, Part II
    • Projects 4 >
      • 4.01 Bringing the Piezo to Life
      • 4.02 Controlling the Piezo with a Function
      • 4.03 Piezo C Major
      • 4.04 Piezo Greensleaves
      • 4.05 Piezo Metronome
      • 4.06 Piezo as an Input
      • 4.07 Piezo as an Input 2
      • 4.08 Metronome II
      • 4.09 Piezo Playback
      • 4.10 Piezo Fireworks
      • 4.11 Piezo Mosquito
    • Projects 5 >
      • 5.01 The Phototransistor
      • 5.02 Light and Sound
      • 5.03 Light and Sound II
    • Projects 6 >
      • 6.01 EEPROM
      • 6.02 I2C Address Scan
      • 6.03 Read the I2C Temperature Sensor
      • 6.04 High Temperature Alarm
    • Projects 7 >
      • 7.01 Arno Phone Home
      • 7.02 Keyboard Alphabet
      • 7.03 Move Mouse
      • 7.04 Draw Squares
    • Special Projects >
      • Bike Light Demo
  • References
    • Arno Pin Key
    • Arno Schematic
    • Project Index

Project 1.07 LED Fade

 This is a simple example of using pulse-width modulation (PWM) to make LED1 fade in and out.  Remember that computers have a hard time creating analog signals, but they can turn things on and off very quickly.  Upload this sketch and watch LED1 fade on and off.

Concepts: pulse-width modulation, AnalogWrite

Circuits: 
  • Circuit 1


  • Select Sketch

    ///////////////////////////////////////////////////
    //Project 6 LED Fade
    int LED1 = 13;
    int bright = 5;
    int goTo = 1;
    void setup(){
    pinMode(LED1,OUTPUT);
    }
    void loop(){
    analogWrite(13,bright);
    bright = bright + goTo;
    if(bright > 255 || bright < 5) goTo = goTo*-1;
    delay(5);
    }
    ///////////////////////////////////////////////////

    We’re going to use two additional variables in this sketch.  The variable bright sets the brightness of LED1 while goTo sets how we change bright during each cycle of the loop() block:

    int bright = 5;

    int goTo = 1;

    As in the previous sketches, we need to set LED1 as an OUTPUT in the setup() block:

    void setup(){

      pinMode(LED1,OUTPUT);

    }

    We control what percentage of time that LED1 remains on (or the duty cycle) using the analogWrite statement.  The first argument is the pin number and the second argument is the duty cycle.  The duty cycle ranges from 0 (always off) to 255 (always on).

    void loop(){   

     analogWrite(13,bright);

    In each cycle of the loop() block, we increment bright by adding goTo.  The initial value of goTo is 1:

     bright = bright + goTo;

    Once bright gets close to zero or above 255, we change the sign of goTo by resetting its value to -1 if it’s currently 1 or 1 if it’s currently -1.  This is accomplished by setting its new value to its old value times – 1.  When goTo is -1, it causes the value of bright to decrease, which then makes LED1 dimmer:

     if(bright > 255 || bright < 5) goTo = goTo*-1;

    A short delay and then it’s back to the top of the loop:

     delay(5);

    }

     


    Back to Projects 1

    Copyright Olympia Circuits LLC 2014. All Rights Reserved.