#include "adc.h" #include #include ISR(ADC_vect) { uint16_t sample = ADCL; sample |= ADCH << 8; if(Adc::sampleCallback_) Adc::sampleCallback_(sample, Adc::userData_); } Adc::Adc(void (*sampleCallback)(uint16_t sample, void* userData), void* userData, uint8_t input, uint8_t referance) { userData_ = userData; sampleCallback_ = sampleCallback; ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); setInput(input); setReferance(referance); } Adc::~Adc() { ADCSRA = 0; } void Adc::setInput(const uint8_t input) { ADMUX = (ADMUX & 0b11110000) | (input & 0b00001111); } void Adc::setReferance(const uint8_t input) { ADMUX = (ADMUX & 0b00101111) | ((input & 0b00000100) << 2) | ((input & 0b00000011) << 6); } void Adc::aquire() { ADCSRA |= 1 << ADSC; }