#pragma once #include "servo.h" #include "lib/adc.h" #include "lib/usart.h" //Working from 25° to 140° class Controller { //Enums public: enum servo_positions { OPEN_POSITION = 40, CLOSE_POSITION = 120 }; //Instances public: servo_class servo; adc_class adc; usart uart; //Variables public: volatile uint16_t current_positive; volatile uint16_t current_negative; volatile uint8_t channel; volatile bool lock_signal; volatile uint8_t lock_signal_delay; //Methods public: Controller(); void timer0_handler() { adc.start_conversion(); } void lock_signal_delay_handler() { lock_signal_delay++; if (lock_signal_delay > 224) //cca 4s { if (PIND & (1<<PD3)) { lock_signal_delay = 0; TCCR2 = 0; TCNT2 = 0; lock_signal = false; } else lock_signal_delay = 0; } } void lock_signal_handler() { if (!lock_signal) { lock_signal = true; TCCR2 = (1<<CS22) | (1<<CS21) | (1<<CS20); } } void adc_handler() { switch (channel) { case 0: current_positive = ADC; channel++; adc.set_channel(adc.ADC1); adc.start_conversion(); break; case 1: current_negative = ADC; channel = 0; adc.set_channel(adc.ADC0); default: channel = 0; break; } } void print_debug(); }; extern Controller controller;