Energia

Examples > Analog

### Analog In, Out Serial

This example shows how to read an analog input pin, map the result to a range from 0 to 255, and then use that result to set the pulsewidth modulation (PWM) of an output pin to dim or brighten an LED.

### Hardware Required

- MSP-EXP430G2 LaunchPad
- Potentiometer
- LED
- 220 ohm resistor

### Relevant Groundwork

Connect one pin from your pot to 3V, the center pin to analog channel A3 (pin 5), and the remaining pin to ground. Next, connect a 220 ohm current limiting resistor to digital pin 2, 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.

### Circuit

image developed using Fritzing. For more circuit examples, see the Fritzing project page

### Schematic

### Code Explanation

In the program below, after declaring two pin assignments (analog channel A3 for your potentiometer and digital pin 2 for your LED) and two variables, `sensorValue` and `outputValue`, the only thing that you do will in the setup function is to begin serial communication.

Next, in the main loop of the code, `sensorValue` is assigned to store the raw analog value coming in from the potentiometer. Because the LaunchPad has an `analogRead` resolution of 0-1023, and an `analogWrite` resolution of only 0-255, this raw data from the potentiometer needs to be scaled before using it to dim the LED.

In order to scale 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 range of the raw data, and the low and high values for that data to be scaled too. 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 Energia serial window in a steady stream of data.

### Code

    /*
      Analog input, analog output, serial output

     Reads an analog input pin, maps the result to a range from 0 to 255
     and uses the result to set the pulsewidth modulation (PWM) of an output pin.
     Also prints the results to the serial monitor.

     The circuit:
     * potentiometer connected to analog channel A3.
       Center pin of the potentiometer goes to the analog pin.
       side pins of the potentiometer go to ~3V and ground
     * LED connected from digital pin 2 to ground

     created 29 Dec. 2008
     modified 27 March 2013
     by Adrian Fernandez

     This example code is in the public domain.

     */

    // These constants won't change.  They're used to give names
    // to the pins used:
    const int analogInPin = A3;  // Analog input pin that the potentiometer is attached to
    const int analogOutPin = 2; // Analog output pin that the LED is attached to

    int sensorValue = 0;        // value read from the pot
    int outputValue = 0;        // value output to the PWM (analog out)

    void setup() {
      // initialize serial communications at 9600 bps:
      Serial.begin(9600);
    }

    void loop() {
      // read the analog in value:
      sensorValue = analogRead(analogInPin);
      // map it to the range of the analog out:
      outputValue = map(sensorValue, 0, 1023, 0, 255);
      // change the analog out value:
      analogWrite(analogOutPin, outputValue);

      // print the results to the serial monitor:
      Serial.print("sensor = " );
      Serial.print(sensorValue);
      Serial.print("\t output = ");
      Serial.println(outputValue);

      // wait 2 milliseconds before the next loop
      // for the analog-to-digital converter to settle
      // after the last reading:
      delay(2);
    }

### Working Video

(Insert Video Here)

### Try it out:

- incorporate mulitple analog signals into the program

### See Also:

- map()
- analogRead()
- analogWrite()
- serial()
- AnalogReadSerial - read a potentiometer, print the state out to the serial monitor
- AnalogInput - use a potentiometer to control the blinking of an LED
- Fade - use an analog input to fade an LED
- Calibration - calibrating analog sensor readings

Getting Started Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Energia reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Energia reference is based on the Arduino reference. Code samples in the reference are released into the public domain.

©Energia | Edit Page | Page History | Printable View | All Recent Site Changes