Bird
Raised Fist0
Arduinoprogramming~20 mins

ADC resolution (10-bit, 0-1023 range) in Arduino - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
ADC Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this ADC reading conversion?
Given a 10-bit ADC reading of 512 on a 5V Arduino board, what voltage does this code print?
Arduino
int adcValue = 512;
float voltage = (adcValue / 1023.0) * 5.0;
Serial.println(voltage, 2);
A2.00
B2.50
C2.52
D2.51
Attempts:
2 left
💡 Hint
Remember the ADC range is 0 to 1023, so divide by 1023, not 1024.
🧠 Conceptual
intermediate
1:00remaining
How many distinct values can a 10-bit ADC produce?
A 10-bit ADC converts analog signals into digital values. How many unique digital values can it output?
A1024
B1023
C512
D2048
Attempts:
2 left
💡 Hint
Think about how many values can be represented with 10 bits.
🔧 Debug
advanced
2:00remaining
Why does this voltage calculation print 0.00?
This Arduino code reads an ADC value and calculates voltage, but always prints 0.00. What is the error?
Arduino
int adcValue = analogRead(A0);
float voltage = (adcValue / 1023) * 5;
Serial.println(voltage, 2);
AThe variable adcValue should be float, not int.
BThe analogRead function returns values from 0 to 1024, not 1023.
CThe Serial.println function cannot print floats with decimals.
DInteger division causes voltage to be zero before multiplication.
Attempts:
2 left
💡 Hint
Check how division works between integers in Arduino C++.
📝 Syntax
advanced
1:30remaining
Which code snippet correctly converts ADC reading to voltage?
Select the code snippet that correctly calculates voltage from a 10-bit ADC reading stored in adcValue.
Afloat voltage = adcValue / 1023.0 * 5;
Bfloat voltage = (float)adcValue / 1023 * 5.0;
Cfloat voltage = adcValue / 1023.0 * 5.0;
Dfloat voltage = adcValue / 1023 * 5.0;
Attempts:
2 left
💡 Hint
Make sure both division and multiplication use floats to avoid integer math.
🚀 Application
expert
2:00remaining
How many millivolts per step does a 10-bit ADC with 3.3V reference have?
An Arduino uses a 10-bit ADC with a 3.3V reference voltage. What is the voltage increment per ADC step in millivolts?
A3.22 mV
B0.32 mV
C1.61 mV
D0.0032 mV
Attempts:
2 left
💡 Hint
Divide the reference voltage by the number of steps (1024) and convert to millivolts.

Practice

(1/5)
1. What is the maximum value returned by analogRead() on a 10-bit ADC in Arduino?
easy
A. 1023
B. 255
C. 512
D. 4095

Solution

  1. Step 1: Understand ADC bit resolution

    A 10-bit ADC means it can represent values from 0 to 2^10 - 1.
  2. Step 2: Calculate maximum value

    2^10 - 1 = 1024 - 1 = 1023.
  3. Final Answer:

    1023 -> Option A
  4. Quick Check:

    10-bit ADC max = 1023 [OK]
Hint: 10-bit ADC max value is 2^10 minus 1 = 1023 [OK]
Common Mistakes:
  • Confusing 10-bit with 8-bit max value (255)
  • Using 512 which is half range
  • Using 4095 which is 12-bit max
2. Which of the following is the correct syntax to read an analog value from pin A0 in Arduino?
easy
A. readAnalog(A0);
B. digitalRead(A0);
C. analogReadPin(A0);
D. analogRead(A0);

Solution

  1. Step 1: Recall Arduino analog read syntax

    The function to read analog input is analogRead(pin).
  2. Step 2: Identify correct pin notation

    Pin A0 is correctly passed as A0, not using digitalRead or other variants.
  3. Final Answer:

    analogRead(A0); -> Option D
  4. Quick Check:

    Correct function and pin name used [OK]
Hint: Use analogRead() with A0 for analog pin 0 [OK]
Common Mistakes:
  • Using digitalRead(A0) which reads digital value (0 or 1)
  • Using non-existent functions like analogReadPin()
  • Using readAnalog() which is not Arduino syntax
3. Given the code:
int sensorValue = analogRead(A1);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println(voltage);

If analogRead(A1) returns 512, what will be printed?
medium
A. 1.0
B. 5.0
C. 2.5
D. 0.5

Solution

  1. Step 1: Substitute sensorValue with 512

    voltage = 512 * (5.0 / 1023.0)
  2. Step 2: Calculate voltage value

    5.0 / 1023.0 ≈ 0.004887585, so voltage ≈ 512 * 0.004887585 ≈ 2.5
  3. Final Answer:

    2.5 -> Option C
  4. Quick Check:

    Half of 5V ≈ 2.5V for 512 reading [OK]
Hint: Multiply reading by 5/1023 to get voltage [OK]
Common Mistakes:
  • Using 1024 instead of 1023 in division
  • Confusing sensorValue with voltage directly
  • Rounding errors ignoring decimal precision
4. What is wrong with this Arduino code snippet?
int sensorValue = analogRead(A2);
float voltage = sensorValue * (5 / 1023);
Serial.println(voltage);
medium
A. Division uses integer math, causing voltage to be zero
B. analogRead() cannot read from A2
C. Serial.println() cannot print float values
D. sensorValue should be float, not int

Solution

  1. Step 1: Analyze division in voltage calculation

    5 / 1023 uses integer division, which results in 0.
  2. Step 2: Effect on voltage value

    Multiplying sensorValue by 0 gives voltage = 0 always.
  3. Final Answer:

    Division uses integer math, causing voltage to be zero -> Option A
  4. Quick Check:

    Use float division 5.0/1023.0 to fix [OK]
Hint: Use decimal points for float division (5.0/1023.0) [OK]
Common Mistakes:
  • Ignoring integer division effect
  • Thinking analogRead can't read A2
  • Believing Serial.println can't print floats
5. You want to measure a sensor voltage that ranges from 0 to 3.3V using Arduino's 10-bit ADC with 5V reference. Which formula correctly converts the ADC reading to the sensor voltage?
hard
A. voltage = reading * (3.3 / 1023.0);
B. voltage = reading * (5.0 / 1023.0);
C. voltage = reading * (3.3 / 1024.0);
D. voltage = reading * (5.0 / 1024.0);

Solution

  1. Step 1: Understand ADC reference voltage

    The ADC measures voltage from 0 to 5V (reference voltage).
  2. Step 2: Calculate voltage from ADC reading

    Since ADC max is 1023, voltage = reading * (5.0 / 1023.0).
  3. Step 3: Sensor voltage range consideration

    The sensor outputs 0-3.3V, but Arduino reads 0-5V range, so conversion uses 5V scale.
  4. Final Answer:

    voltage = reading * (5.0 / 1023.0); -> Option B
  5. Quick Check:

    Use ADC reference voltage (5V) for conversion [OK]
Hint: Always scale by ADC reference voltage, not sensor max voltage [OK]
Common Mistakes:
  • Using sensor max voltage instead of ADC reference
  • Using 1024 instead of 1023 in denominator
  • Confusing sensor output range with ADC range