ADC resolution tells us how many steps the analog input can be split into. A 10-bit ADC means it can measure values from 0 to 1023, giving us detailed readings.
ADC resolution (10-bit, 0-1023 range) in Arduino
Start learning this pattern below
Jump into concepts and practice - no test required
int sensorValue = analogRead(pin);analogRead(pin) reads the voltage on the given pin and returns a number from 0 to 1023.
The number 1023 means the input voltage is at the maximum reference voltage (usually 5V or 3.3V).
int sensorValue = analogRead(A0);Serial.println(sensorValue);
float voltage = sensorValue * (5.0 / 1023.0);
This program reads the analog input from pin A0 every second. It prints the raw 10-bit value (0-1023) and converts it to voltage assuming a 5V reference.
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.print("Sensor Value: ");
Serial.print(sensorValue);
Serial.print(" Voltage: ");
Serial.print(voltage);
Serial.println(" V");
delay(1000);
}The 10-bit resolution means the analog input is split into 1024 steps (0 to 1023).
If your reference voltage changes, the voltage calculation must change too.
Higher resolution ADCs (like 12-bit) give more precise readings but Arduino Uno uses 10-bit by default.
10-bit ADC means readings go from 0 to 1023.
analogRead() returns these values based on input voltage.
You can convert these values to voltage by scaling with the reference voltage.
Practice
analogRead() on a 10-bit ADC in Arduino?Solution
Step 1: Understand ADC bit resolution
A 10-bit ADC means it can represent values from 0 to 2^10 - 1.Step 2: Calculate maximum value
2^10 - 1 = 1024 - 1 = 1023.Final Answer:
1023 -> Option AQuick Check:
10-bit ADC max = 1023 [OK]
- Confusing 10-bit with 8-bit max value (255)
- Using 512 which is half range
- Using 4095 which is 12-bit max
Solution
Step 1: Recall Arduino analog read syntax
The function to read analog input isanalogRead(pin).Step 2: Identify correct pin notation
Pin A0 is correctly passed asA0, not using digitalRead or other variants.Final Answer:
analogRead(A0); -> Option DQuick Check:
Correct function and pin name used [OK]
- Using digitalRead(A0) which reads digital value (0 or 1)
- Using non-existent functions like analogReadPin()
- Using readAnalog() which is not Arduino syntax
int sensorValue = analogRead(A1); float voltage = sensorValue * (5.0 / 1023.0); Serial.println(voltage);
If
analogRead(A1) returns 512, what will be printed?Solution
Step 1: Substitute sensorValue with 512
voltage = 512 * (5.0 / 1023.0)Step 2: Calculate voltage value
5.0 / 1023.0 ≈ 0.004887585, so voltage ≈ 512 * 0.004887585 ≈ 2.5Final Answer:
2.5 -> Option CQuick Check:
Half of 5V ≈ 2.5V for 512 reading [OK]
- Using 1024 instead of 1023 in division
- Confusing sensorValue with voltage directly
- Rounding errors ignoring decimal precision
int sensorValue = analogRead(A2); float voltage = sensorValue * (5 / 1023); Serial.println(voltage);
Solution
Step 1: Analyze division in voltage calculation
5 / 1023 uses integer division, which results in 0.Step 2: Effect on voltage value
Multiplying sensorValue by 0 gives voltage = 0 always.Final Answer:
Division uses integer math, causing voltage to be zero -> Option AQuick Check:
Use float division 5.0/1023.0 to fix [OK]
- Ignoring integer division effect
- Thinking analogRead can't read A2
- Believing Serial.println can't print floats
Solution
Step 1: Understand ADC reference voltage
The ADC measures voltage from 0 to 5V (reference voltage).Step 2: Calculate voltage from ADC reading
Since ADC max is 1023, voltage = reading * (5.0 / 1023.0).Step 3: Sensor voltage range consideration
The sensor outputs 0-3.3V, but Arduino reads 0-5V range, so conversion uses 5V scale.Final Answer:
voltage = reading * (5.0 / 1023.0); -> Option BQuick Check:
Use ADC reference voltage (5V) for conversion [OK]
- Using sensor max voltage instead of ADC reference
- Using 1024 instead of 1023 in denominator
- Confusing sensor output range with ADC range
