Analog In, Out Serial

Read an analog input pin, map the result, and then use that data to dim or brighten an LED.

This example shows you how to read an analog input pin, map the result to a range from 0 to 255, use that result to set the pulse width modulation (PWM) of an output pin to dim or brighten an LED and print the values on the serial monitor of the Arduino Software (IDE).

Hardware Required

  • Arduino Board

  • Potentiometer

  • Red LED

  • 220 ohm resistor

Circuit

circuit

Connect one pin from your pot to 5V, the center pin to analog pin 0 and the remaining pin to ground. Next, connect a 220 ohm current limiting resistor to digital pin 9, with an LED in series. The long, positive leg (the anode) of the LED should be connected to the output from the resistor, with the shorter, negative leg (the cathode) connected to ground.

Schematic

schematic

Code

In the sketch below, after declaring two pin assignments (analog 0 for our potentiometer and digital 9 for your LED) and two variables,

sensorValue
and
outputValue
, the only things that you do in the
setup()
function is to begin serial communication.

Next, in the main loop,

sensorValue
is assigned to store the raw analog value read from the potentiometer. Arduino has an
analogRead
range from 0 to 1023, and an
analogWrite
range only from 0 to 255, therefore the data from the potentiometer needs to be converted to fit into the smaller range before using it to dim the LED.

In order to convert this value, use a function called map():

outputValue = map(sensorValue, 0, 1023, 0, 255);

outputValue
is assigned to equal the scaled value from the potentiometer.
map()
accepts five arguments: The value to be mapped, the low range and high values of the input data, and the low and high values for that data to be remapped to. In this case, the sensor data is mapped down from its original range of 0 to 1023 to 0 to 255.

The newly mapped sensor data is then output to the

analogOutPin
dimming or brightening the LED as the potentiometer is turned. Finally, both the raw and scaled sensor values are sent to the Arduino Software (IDE) serial monitor window, in a steady stream of data.

1/*
2
3 Analog input, analog output, serial output
4
5 Reads an analog input pin, maps the result to a range from 0 to 255 and uses
6
7 the result to set the pulse width modulation (PWM) of an output pin.
8
9 Also prints the results to the Serial Monitor.
10
11 The circuit:
12
13 - potentiometer connected to analog pin 0.
14
15 Center pin of the potentiometer goes to the analog pin.
16
17 side pins of the potentiometer go to +5V and ground
18
19 - LED connected from digital pin 9 to ground
20
21 created 29 Dec. 2008
22
23 modified 9 Apr 2012
24
25 by Tom Igoe
26
27 This example code is in the public domain.
28
29 http://www.arduino.cchttps://www.arduino.cc/en/Tutorial/AnalogInOutSerial
30
31*/
32
33// These constants won't change. They're used to give names to the pins used:
34
35const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
36
37const int analogOutPin = 9; // Analog output pin that the LED is attached to
38
39int sensorValue = 0; // value read from the pot
40int outputValue = 0; // value output to the PWM (analog out)
41
42void setup() {
43
44 // initialize serial communications at 9600 bps:
45
46 Serial.begin(9600);
47}
48
49void loop() {
50
51 // read the analog in value:
52
53 sensorValue = analogRead(analogInPin);
54
55 // map it to the range of the analog out:
56
57 outputValue = map(sensorValue, 0, 1023, 0, 255);
58
59 // change the analog out value:
60
61 analogWrite(analogOutPin, outputValue);
62
63 // print the results to the Serial Monitor:
64
65 Serial.print("sensor = ");
66
67 Serial.print(sensorValue);
68
69 Serial.print("\t output = ");
70
71 Serial.println(outputValue);
72
73 // wait 2 milliseconds before the next loop for the analog-to-digital
74
75 // converter to settle after the last reading:
76
77 delay(2);
78}

Learn more

You can find more basic tutorials in the built-in examples section.

You can also explore the language reference, a detailed collection of the Arduino programming language.

Last revision 2015/07/28 by SM

Contribute to Arduino

Join the community and suggest improvements to this article via GitHub. Make sure to read out contribution policy before making your pull request.

Missing something?

Check out our store and get what you need to follow this tutorial.

Suggest Changes

The content on docs.arduino.cc is facilitated through a public GitHub repository. You can read more on how to contribute in the contribution policy.