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.01 Read the Potentiometer

Potentiometers are useful for measuring the position of a dial or for use in other position sensors.  The potentiometer on the Arno produces a voltage signal that is proportional to the position of the thumbwheel.  This simple sketch reads the output voltage of the thumbwheel potentiometer using the chip’s built-in analog-digital converter.


Concepts:  ADC, analogRead, voltage divider

Circuits: 
  • Circuit 7


  • Select Sketch

    ///////////////////////////////////////////////////
    //Project 3.01 POT1
    //Read the potentiometer; output voltage and ADC
    int POT1 = A0;
    int potRead = 0;
    float volts = 0;
    void setup(){
    Serial.begin(9600);
    pinMode(POT1,INPUT);
    }
    void loop(){
    potRead = analogRead(POT1);
    volts = float(potRead*5) / 1024;
    Serial.print(Voltage = );
    Serial.print(volts,3);
    Serial.print( ADC Reading = );
    Serial.println(potRead);
    delay(500);
    }
    ///////////////////////////////////////////////////

    This is the first project where we assign an analog pin number to a variable:

    int POT1 = A0;

    The value of the potentiometer is read using an analogRead statement:

    potRead = analogRead(POT1);

    The potentiometer has three connectors: one is connected to the 5V power supply, one to ground (0 V), and the third is the signal that’s connected to pin A0 and ranges between 0 and 5V.  The 10-bit ADC (analog-digital converter) in the 32U4 chip returns an int value between 0 and 1024 that is proportional to the output voltage of the potentiometer.  We convert the value to volts by multiplying it by 5 (the power voltage of the Arno board and the reference voltage of the ADC) and dividing by 1024 (the range of the ADC).  We want the result to be a float variable so that the decimal part can be kept.  Since we start with an int variable, we must cast the it into a float: 

    volts = float(potRead*5) / 1024;

    The Serial.print statements should mostly look familiar. We add a second argument to the statement where we print the float value to tell the computer how many decimal places to print:

    Serial.print(volts,3);

    Back to Projects 3

    Copyright Olympia Circuits LLC 2014. All Rights Reserved.