AnalogIn

Table of Contents

  1. API
  2. Hello World!
  3. Examples

mbed OS 2 and mbed OS 5

This is the handbook for mbed OS 2. If you’re working with mbed OS 5, please see the new handbook and API References. For the latest AnalogIn API, please see AnalogIn.

The AnalogIn API is used to read an external voltage applied to an analog input pin. Only certain pins are capable of making these measurement so check the documentation for compatible pins. For more information on what it takes to convert an analog signal to its digital representation see: http://en.wikipedia.org/wiki/Analog-to-digital_converter


API

Import library

Public Member Functions

  AnalogIn (PinName pin)
  Create an AnalogIn , connected to the specified pin.
float  read ()
  Read the input voltage, represented as a float in the range [0.0, 1.0].
unsigned short  read_u16 ()
  Read the input voltage, represented as an unsigned short in the range [0x0, 0xFFFF].
  operator float ()
  An operator shorthand for read()



Hello World!

Import program

00001 /* mbed Example Program
00002  * Copyright (c) 2006-2014 ARM Limited
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016  
00017 #include "mbed.h"
00018 
00019 // Initialize a pins to perform analog input and digital output fucntions
00020 AnalogIn   ain(A0);
00021 DigitalOut dout(LED1);
00022 
00023 int main(void)
00024 {
00025     while (1) {
00026         // test the voltage on the initialized analog pin
00027         //  and if greater than 0.3 * VCC set the digital pin
00028         //  to a logic 1 otherwise a logic 0
00029         if(ain > 0.3f) {
00030             dout = 1;
00031         } else {
00032             dout = 0;
00033         }
00034         
00035         // print the percentage and 16 bit normalized values
00036         printf("percentage: %3.3f%%\n", ain.read()*100.0f);
00037         printf("normalized: 0x%04X \n", ain.read_u16());
00038         wait(0.2f);
00039     }
00040 }



Examples

Control a R/C servo with an analog input

#include "mbed.h"

AnalogIn position(A0);
PwmOut servo(D3);

int main() {
    // servo requires a 20ms period    
    servo.period(0.020f);
    while (1) {
        // servo position determined by a pulse width between 1-2ms
        servo.pulsewidth(0.001f + 0.001f * position);
    }
}


AnalogIn reading 16-bit normalized samples

#include "mbed.h"

AnalogIn input(A0);

int main() {
    uint16_t samples[1024];

    for(int i=0; i<1024; i++) {
        samples[i] = input.read_u16();
        wait(0.001f);
    }

    printf("Results:\n");
    for(int i=0; i<1024; i++) {
        printf("%d, 0x%04X\n", i, samples[i]);
    }
}   


Visual volt meter using LEDs

#include "mbed.h"

AnalogIn ain(A0);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

int main() {
    while (1){
        led1 = (ain > 0.2f) ? 1 : 0;
        led2 = (ain > 0.4f) ? 1 : 0;
        led3 = (ain > 0.6f) ? 1 : 0;
        led4 = (ain > 0.8f) ? 1 : 0;
    }
}