analogRead() and the Serial Port

analogRead() and the Serial Port

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 analog 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
Bicycle tire
Step-by-Step Instructions
Place the potentiometer into your breadboard.
Run a jumper wire from the 5-Volt pin of the Arduino to 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 the potentiometer.
Run the final jumper wire from pin A0 on your Arduino to the middle pin of the potentiometer.
Plug the Arduino into your computer.
Open up the Arduino IDE.
Open the sketch for this section.
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 the potentiometer and watch the serial monitor window. The numbers should adjust between 0 and 1023.
Using the Arduino analogread and map function with a potentiometer at pin A0

This image composed with Fritzing.

The Arduino Code

/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
Discuss the Sketch
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().


void setup() {

// initialize serial communication at 9600 bits per second:

Serial.begin(9600);

}
1
2
3
4
5
6
7
void setup() {

// initialize serial communication at 9600 bits per second:

Serial.begin(9600);

}
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! 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.


int sensorValue = analogRead(A0);
1
int sensorValue = analogRead(A0);
We declare a variable called sensorValue and we initialize it to the output of a new function. This new function is the glamorous analogRead(). So take a wild guess what this new function analogRead() does. It reads the value at the analog pin that you have chosen – in this case, it is the analog pin A0, where we have the center pin of the potentiometer connected. The voltage at pin A0 will be mapped to a number between 0 and 1023, and this value will be assigned to the variable sensorValue.

If you recall from above, the actual voltage at pin A0 will be between 0 and 5 volts, depending on where your potentiometer is adjusted – this value gets mapped to the range 0 – 1023 with the help of the analog-to-digital converter. So we have a variable that has recorded the value at our potentiometer – what next? Well, let's look at the value. To do that, we need to print it from the Arduino to our computer – and you guessed it, we will use the Serial library function println() to do just that…


Serial.println(sensorValue);
1
Serial.println(sensorValue);
No big surprises here – we send as an argument the sensorValue variable to the function Serial.println() and our serial monitor window will display the resulting values.

To finish the sketch, we invoke the delay() function for one millisecond to make sure our next reading is a stable one and we start at the top of the loop() again. We record a new value using analogRead(), save it to the variable sensorValue and then print it to the computer.

All this is good and well, you might be thinking, but what does a potentiometer have to do with sensors? A potentiometer doesn't sense anything! You are right – but interestingly, many sensors work by applying the same principle that a potentiometer does – adjusting resistance. Take a photo-resister for example – it can be used to sense light – because the resistance changes based on the brightness of light that it is exposed to – this change in resistance will adjust the amount of voltage that a pin on the receiving end will receive. So now the ball is in your court – what can you use analogRead() for?

Try On Your Own
Change the analog pin to A2. Make adjustments in the code and the circuit.
Try a different potentiometer in the circuit, does it affect the range of values displayed?
Further Reading
analogRead()
Analog Input Pins
potentiometer tutorial – this is good

Episoder(61)

Throw out your breadboard!  Dr. Duino: An Arduino Shield for debugging and developing Arduino projects

Throw out your breadboard! Dr. Duino: An Arduino Shield for debugging and developing Arduino projects

In the last couple of episodes we have talked about Arduino shields and breakout boards. In this video, we will review a specific Arduino shield that makes developing projects and debugging sketches o...

4 Apr 201711min

Shorthand Arithmetic :: Using Compound Operators (+= , -= , *= , /= ) with Arduino

Shorthand Arithmetic :: Using Compound Operators (+= , -= , *= , /= ) with Arduino

In this lesson we discuss some common shorthand for simple arithmetic in Arduino. We cover several compound operators that add, subtract, multiply and divide making it easy to increment variables in u...

3 Apr 201712min

Understanding Boolean Data Types and Using the Boolean NOT (!) operator to Switch Arduino Pin States

Understanding Boolean Data Types and Using the Boolean NOT (!) operator to Switch Arduino Pin States

2 Apr 20178min

What to do when you just don't know :: Arduino, ADXL345 triple axis accelerometer and an RGB LED

What to do when you just don't know :: Arduino, ADXL345 triple axis accelerometer and an RGB LED

This lesson discusses what to do when you open an existing program and realize that you simply don't understand all the stuff that is going on. It also talks about using the ADXL345 triple axis accele...

1 Apr 201714min

3 Ways to Use Acceleration in an Arduino Sketch

3 Ways to Use Acceleration in an Arduino Sketch

This lesson covers three easy ways to implement some form of acceleration in your Arduino sketches. It will cover the following: Linear Acceleration Exponential Acceleration Messing Around with the S...

31 Mar 201717min

Check out our premium Arduino Training Course

Check out our premium Arduino Training Course

30 Mar 20172min

Understanding the Arduino uber functions loop() and setup()

Understanding the Arduino uber functions loop() and setup()

Discussion: In this lesson, we're going to discuss two very special functions that you will use in every single Arduino sketch that you write. They're called Setup and Loop. Specifically, we'll cover...

29 Mar 201710min

Functions: Let's make programming Arduino as easy as possible

Functions: Let's make programming Arduino as easy as possible

Discussion: In this lesson, we're going to do an overview of functions. This will be just a general discussion to lay out a framework for understanding how functions work and how we can use them. Mor...

28 Mar 201711min

Populært innen Fakta

mikkels-paskenotter
fastlegen
dine-penger-pengeradet
relasjonspodden-med-dora-thorhallsdottir-kjersti-idem
foreldreradet
treningspodden
rss-strid-de-norske-borgerkrigene
jakt-og-fiskepodden
sinnsyn
rss-kunsten-a-leve
hverdagspsyken
rss-var-forste-kaffe
fryktlos
rss-kull
gravid-uke-for-uke
rss-bisarr-historie
lederskap-nhhs-podkast-om-ledelse
hagespiren-podcast
takk-og-lov-med-anine-kierulf
tomprat-med-gunnar-tjomlid