빛의 밝기가 일정 이상이 되었을때에 따른 LED켜고 크기에 대한 코드입니다.
전의 글과 기본적인 코드는 같지만 #define으로 빛의 값에 기준을 두어 그에 따른 LED를 제어하는 코드입니다.
#include <avr/io.h>
#define CDS_VALUE1 700 //빛의 값 설정 1
#define CDS_VALUE2 871 //빛의 값 설정 2
#define CDS_VALUE3 950 //빛의 값 설정 3
void init_adc();
unsigned short read_adc();
void show_adc(unsigned short value);
void init_adc()
{
ADMUX = 0x00;
ADCSRA = 0x87;
}
unsigned short read_adc()
{
unsigned char adc_low, adc_high;
unsigned short value;
ADCSRA |= 0x40;
while ((ADCSRA & 0x10) != 0x10);
adc_low = ADCL;
adc_high = ADCH;
value = (adc_high << 8) | adc_low;
return value;
}
void show_adc(unsigned short value)
{
if (value < CDS_VALUE1) //빛의 값1 (700)과 value의 값을 비교 하였을때 value의 값이 더 작다면,,
PORTA = 0xff; //LED 8개 ON
else if (value < CDS_VALUE2) //값1보다 같거나 크지만 값2보다 작다면,,
PORTA = 0x55; //LED [][o][][o][][]o[][o] 와 같이 LED ON
else if (value < CDS_VALUE3) //값2 < value < 값3 이라면,,
PORTA = 0x11; //LED [][][][o][][][][o] 와 같은 형태로 LED ON
else
PORTA = 0x00; //위의 비교중에서 해당하는것이 하나도 없다면 LED 전체 OFF
}
int main(void)
{
while (1)
{
unsigned short value;
DDRA= 0xff;
init_adc();
while(1)
{
value = read_adc();
show_adc(value);
}
}
}
'AVR 기초 > CDS' 카테고리의 다른 글
[AVR 기초] CDS를 이용해 LED on-off (0) | 2020.07.13 |
---|