analogRead() and the Serial Port

Featured Video Play Icon

Knowing if something is on or off can be extremely useful, but often you will want to know more. How bright is the light? How fast is the satellite moving? These types of answers are often analog – they cover a large range of values, not just on or off.

The Arduino handles analogs inputs with 6 dedicated pins, labeled A0 through A5. These pins have access to an analog-to-digital converter, which takes the range of input values and creates a digital version by cutting up the range into tiny pieces. All this is handled behind the scenes – all you have to do is use some very simple functions and you will get what you need.

You Will Need

Potentiometer (any resistance range will work)
Jumper Wires – at least 3
Solderless breadboard
Bicycle tire
Step-by-Step Instructions

Place your potentiometer into your breadboard.
Run a jumper wire from the 5-Volt pin of the Arduino either one of the outside pins of your potentiometer.
Run another jumper wire from one of the ground pins on your Arduino (labeled GND) to the other outside pin of your potentiometer.
Run the final jumper wire from pin A0 on your Arduino to the middle pin of the potentiometer.
Plug your Arduino into your computer.
Open up the Arduino IDE.
Go to File, Examples, 01.Basics, AnalogReadSerial
Click the Verify button on the top left side of the screen. It will turn orange and then back to blue once it has finished.
Click the Upload button (next to the Verify button). It will turn orange and then back to blue once it has finished.
On the menu bar, go to Tools, Serial Monitor – this will open the Serial Monitor window – you should see numbers rolling down this screen.
Now adjust the knob of your potentiometer and watch the serial monitor window, the numbers should adjust between 0 and 1023.

Circuit Talk

Current will run from high voltage to low voltage, thus current will move from the 5-volt pin to the ground pin – through the potentiometer. The two outer pins on the potentiometer are connected through a resistive “ring”. The center pin of the potentiometer is connected to a wiper that moves along the resistive ring when you adjust the knob.

As you adjust the resistance by turning the knob on your potentiometer, the voltage being applied at the center pin changes. This voltage is what your analog pin is detecting as input. The analog-to-digital converter takes this input signal and changes it to the discreet range of 0 to 1023, which can be read with the function analogRead() that we will discuss shortly.

In the further reading section at the end, I have linked to a good tutorial explaining potentiometers if you want more info than the minuscule description I have here.

This sketch starts with a multi-line comment describing the sketch and the circuit. You will probably notice that the first block of code is the setup() function – we do not declare or initialize any variables at the beginning of this sketch – instead we will do this inside the loop() function, as in the last example. Inside the curly braces of setup() we revisit the Serial library and use the function Serial.begin().

If you recall from the last lesson, Serial.begin() takes the baud rate as an argument (this will almost always be 9600). This function allows you to setup a communication channel between the computer and the Arduino. As you may know by now, setup() only runs once, and then we move on to the next block of code.

But wait you say! Don’t we have to set the mode of the pin we will be using? Great point! What the Arduino does, by default, is set all the pins on the board as INPUTs unless you tell it otherwise. So in many cases you do not have to explicitly set a pin as an input using the pinMode() function. That being said – I make it a habit to do this anyway – because it makes things clear to me – and that is worth it in space and effort. So I dare you, set the mode of the pin using the pinMode(A0, INPUT) function inside the curly braces of setup()- you won’t regret it. Moving on to the loop() function, we start with a variable declaration and initialization.

Leave a Reply

Your email address will not be published. Required fields are marked *