Go Down

Topic: Arduino UNO: Using Analog Input as Digital In/Out (Read 2 times) previous topic - next topic


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...)
No, I don't answer questions sent in private messages (but I do accept thank-you notes...)


Analog Pins not have PULL-UP resistors, so, pinmode(A0, OUTPUT_PULLUP) not will have effect.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


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


Feb 10, 2013, 06:23 pm Last Edit: Feb 10, 2013, 06:26 pm by retrolefty Reason: 1

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.


Code: [Select]

 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:
 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:

Go Up