10 bit AtoD returning integers from 0 to 1023.
Read Analog Input
There is no need to set the pin up as an analog input, just start reading it:
int MyAnalogValue = analogRead(A3); //Read 10-bit (0 to 1023) analog input value (causes stall for approx 100uS)
Setting The Analog Reference Voltage
Use the analogReference() function;
DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3 volts (on 3.3V Arduino boards)
INTERNAL: an built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328 and 2.56 volts on the ATmega8 (not available on the Arduino Mega)
INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)
INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)
EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference.
Using Analog Pins as GPIO
The analog pins also have all the functionality of general purpose input/output (GPIO) pins (the same as digital pins 0 – 13).
Use the aliases A0 (for analog input 0), A1, etc. E.g this would set analog pin 0 to an output, and to set it HIGH:
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
Special Arduinos
Arduino Due, Zero and MKR Family
Use analogReadResolution() to set the resolution you want to use.
Example function with averaging of sampled values
//****************************************
//****************************************
//********** READ ANALOG INPUTS **********
//****************************************
//****************************************
void read_analog_inputs (void)
{
static uint8_t AnalogInputSampleCount = 0;
static uint16_t AnalogInputA2Buffer = 0;
//Called every 10mS
AnalogInputA2Buffer += analogRead(A2); //Read 10-bit (0 to 1023) analog input value (causes stall for approx 100uS)
AnalogInputSampleCount++;
if (AnalogInputSampleCount >= 8)
{
//----- SAMPLE PERIOD COMPLETE -----
//----- INPUT A2 -----
//1V = 1A
//0-1023 @ 5V VCC = 204.6 = 1A
//0.2046 = 1mA
CurrentSense_mA = (AnalogInputA2Buffer >> 3) / 0.2046; // >> 3 for /8
//Reset for next buffer sample
AnalogInputA2Buffer = 0;
AnalogInputSampleCount = 0;
}
#ifdef __DEBUG
static uint8_t DebugOutputCount = 200;
DebugOutputCount--;
if (DebugOutputCount == 0)
{
DebugOutputCount = 200;
Serial.print("Current sense: ");
Serial.print(CurrentSense_mA, DEC);
Serial.println("mA");
}
#endif
}