Для работы с аналоговыми сигналами на вход требуется настроить АЦП
Настройка АЦП сводится к следующим действиям:
1. Необходимо настроить регистр ADMUX (Регистр настройки мультиплексора АЦП).
2. Настройки регистра ADCSRA (Регистр статуса и контроля А)
3. При необходимости, настройке DCSRB (Регистр статуса и контроля B)
3. Чтение результата преобразования
А теперь приступим к самому интересному:
И начинаем запуск преобразования. В регистре ADCSRA, битом ADSC необходимо запустить преобразование и выполнять его,
пока не будет выставлен бит о свидетельствующий о том, что преобразование завершено (бит ADIF).
Данной строчкой (ADCSRA & (1 
<< ADIF) == 0 происходит проверка и одновременное сбрасывание 
флага об окончании преобразования.
Далее считываем полученное значение, как видно использовать АЦП не так уж и сложно!
unsigned int data;
int main()
Serial.begin(9600);
DDRC = 0x00; // назначает выводы с 14 по 19 входными
PORTC = 0x00; 
ADCSRA |= (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0);
ADMUX |= (0 << REFS1)|(1 << REFS0)|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); 
L0:;
ADCSRA |= (1 << ADSC);  // Начинаем преобразованиеL1:; 
if((ADCSRA & (1 << ADIF)) == 0) goto L1;  // пока не будет выставлен флаг об окончании преобразования
data = (ADCL|ADCH << 8); // Считываем полученное значение
Serial.println(data);goto L9; 
}