본문 바로가기

AVR 기초/CDS

[AVR 기초] 밝기에 따른 LED

빛의 밝기가 일정 이상이 되었을때에 따른 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