Arduino UNO: Using Analog Input as Digital In/Out

Any things I should watch out when using Analog pins as Digital In/Out.
I understand this is possible and allowed according to Arduino website learning.
However, is that any item I should watch out in my design or application?

You don't have to worry.

The only that's special about them is that the Arduino board puts an 'A' next to them on the PCB.

(And they can be routed to the ADC if you want...)

Analog Pins not have PULL-UP resistors, so, pinmode(A0, OUTPUT_PULLUP) not will have effect.

Are you sure ?
In my opinion the analog inputs do also have the internal pull-up resistors.

mmoscz:
Analog Pins not have PULL-UP resistors, so, pinmode(A0, OUTPUT_PULLUP) not will have effect.

That is not correct. Run the example sketch ReadAnalogVoltage sketch without anything wired to the A0 pin. Then add the mode and pull-up commands shown below in the setup function and run again. I think you will see the effect of the pull-up resistor being enabled.

And besides pinmode(A0, OUTPUT_PULLUP) would not be a valid command, pinMode(A0, INPUT_PULLUP) would be.

Lefty

/*
  ReadAnalogVoltage
  Reads an analog input on pin 0, converts it to voltage, and prints the result to the serial monitor.
  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);
  pinMode(14,INPUT);   // set pin to input mode
  digitalWrite(14,HIGH); // enable internal pull-up resistor
  // or pinMode(A0, INPUT_PULLUP);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
}

Krodal:
Are you sure ?
In my opinion the analog inputs do also have the internal pull-up resistors.

You are right, Analog Pins have PULL-UP resistors too.

from http://arduino.cc/en/Tutorial/DigitalPins

Digital Pins

The pins on the Arduino can be configured as either inputs or outputs. This document explains the functioning of the pins in those modes. While the title of this document refers to digital pins, it is important to note that vast majority of Arduino (Atmega) analog pins, may be configured, and used, in exactly the same manner as digital pins.

Sorry my mistake.

1 Like

Yes, 'analog' pins can indeed be accessed as digital, just name them by their 'digital' designations.
Then they have to be declared as ordinary digital pins and on input INPUT_PULLUP does work.

const int buttonPin = 17;
pinMode(buttonPin, INPUT_PULLUP);

A0 => 14
A2 => 15
A3 => 16
and so on...

I was searching for this question myself for a while and it was not easy to find a definite answer.

pinMode(A0,INPUT_PULLUP)
is perfectly fine too.

One.thing to watch out for - the atmega328p in its smd version as used on the nano/pro mini/etc has two analog only inputs, A6, and A7. These can only be used as analog inputs. Afaik, this is the only part in the whole avr product line with weird analog only pins