#pragma once #include <stdint.h> #include <avr/io.h> class Potenciometr { private: enum { ADC_BUFFER_SIZE = 10 }; volatile uint8_t attempt; public: volatile uint16_t buffer[ADC_BUFFER_SIZE]; volatile uint16_t adc_value; public: Potenciometr() { adc_ini(); }; void adc_ini() { //55kHz, 2.56V reference ADMUX = (1<<REFS1) | (1<<REFS1); ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1); //cca 13Hz TCCR0 = (1<<CS01) | (1<<CS00); TIMSK |= (1<<TOIE0); }; void irq_handler() { buffer[attempt++] = ADC; if(attempt >= ADC_BUFFER_SIZE) { uint16_t adc_sum = 0; for (uint8_t i = 0; i < ADC_BUFFER_SIZE; i++) { adc_sum += buffer[i]; } adc_value = adc_sum / ADC_BUFFER_SIZE; attempt = 0; } }; void start_conversion() { ADCSRA |= (1<<ADSC); }; };