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 3.04 Potentiometer sets blink rate

 Like Project 3.03, we use the input from the potentiometer to control an LED.  In this case, we change the blink rate of the red channel of the RGB LED based on the potentiometer’s output voltage.


Concepts:  ADC, analogRead, analogWrite

Circuits:
  • Circuit 3
  • Circuit 7


  • Select Sketch

    ///////////////////////////////////////////////////
    //Project 3.04
    //use potentiometer output to set redLED blink rate
    int potentiometer = A0;
    int potRead = 0;
    int redLED = 9;
    int isOn = 1;
    long now = 0;
    void setup(){
    pinMode(redLED,OUTPUT);
    pinMode(potentiometer,INPUT);
    digitalWrite(redLED,HIGH);
    }
    void loop(){
    potRead = analogRead(potentiometer);
    if(millis() > now + potRead){
    digitalWrite(redLED,isOn);
    isOn = 1 - isOn;
    now = millis();
    }
    }
    ///////////////////////////////////////////////////

    As in previous projects, we don’t want to use a delay statement to control the blink rate since the potentiometer can’t be read during the delay period.  Instead, we record the time since the LED was last switch on or off using the variable now. The LED is switch again when the time exceeds now plus the value read by the potentiometer. We also take advantage of the fact that we can replace HIGH and LOW with 1 and 0 in the digitalWrite statement:

    if(millis() > now + potRead){

        digitalWrite(redLED,isOn);

        isOn = 1 - isOn;

        now = millis();

      }

    Remember, the value of the potentiometer can range between 0 and 1023.  This means that our blink rate will be between 0 and and 1023 milliseconds between cycles.  We could make the range shorter by dividing the value of potRead by an integer, or longer by multiplying it by an integer.  Alternately, we could set the range using the map function.

    Back to Projects 3

    Copyright Olympia Circuits LLC 2014. All Rights Reserved.