#ifndef __ADC_H__
#define __ADC_H__

#include "../common/def.h"

void adcInit();
void adcConvert();
uint8_t adcTrans(uint16_t val, uint8_t val_i);

#endif /* __ADC_H__ */
// adc.c
#include "adc.h"

uint8_t val_t;

// ADC 기능을 켜고 Pin, Prescaler 지정을 해주는 함수
void adcInit() {
    ADC_SELECT |= (1 << MUX2) | (1 << MUX1) | (1 << MUX0);          // ADC 7 Pin 을 Input 설정
    ADC_CONTROL |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);      // ADC Prescaler 를 128 로 설정, 50 ~ 200kHz 권장, 16MHz / 128분주 = 125KHz
    ADC_CONTROL |= (1 << ADEN);                                     // ADC 켜기
}

// Analog to Digital Convert 시작 함수
void adcConvert() {
    ADC_CONTROL |= (1 << ADSC);             // ADC 변환 시작
    while (ADC_CONTROL & (1<< ADSC)) {      // ADC 변환이 확실히 될때까지 기다리기

    }
}

// ADC에서 받은 10-bit 값을 구간을 나누어 8-bit 값으로 변환
uint8_t adcTrans(uint16_t val, uint8_t val_i) {
    // 구간은 필요에 따라 세분화
    if (val < 100) {
        val_t = 0;
    }
    else if (val > 150 && val < 300) {
        val_t = val_i;
    }
    else if (val > 350 && val < 500) {
        val_t = val_i * 2;
    }
    else if (val > 550 && val < 700) {
        val_t = val_i * 3;
    }
    else if (val > 750 && val < 900) {
        val_t = val_i * 4;
    }
    else if (val > 950) {
        val_t = val_i * 5;
    }

    return val_t;
}