#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;

    //Methods
    public:
        Controller();

        void timer0_handler()
        {
            adc.start_conversion();
        }

        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;