일정 밝기 이하면 불이 켜지는 프로그램
arduino
// C++ code
//
int ledPin=9;
void setup()
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
}
void loop()
{
int poVal = analogRead(A0); // 조도센서의 값을 읽음
if(poVal <500) digitalWrite(ledPin, HIGH); //d어두우면 LED켬
else digitalWrite(ledPin, LOW); // 밝으면 LED 끔
Serial.print("photoregister =");
Serial.println(poVal);
delay(500);
}
avr
#include <avr/io.h>
unsigned short read_adc(); //ADC값 구하는 함수
void show_adc_led(unsigned short data); //ADC값에 따른 LED 켜는 함수
int main(void)
{
unsigned short value;
DDRB=0xff; //LED 포트 출력
DDRC=0x00; //ADC 포트 입력
//ADC 초기화
ADMUX=0x40; //0b01000000
//(REFS1,REFS0)=(0,1) --> 기준 전압 AVCC(+5V)
//ADLAR=0 --> 우측 정렬
//MUX4~0 --> 00000 : ADC0 단일 채널 선택
ADCSRA=0x87; //0b10000111
//ADEN=1 --> AD 변환 기능 활성화
//ADFR=0 --> single conversion(한번만 변환) 모드
//ADPS=111 --> 프리스케일러 128분주, 8us 주기
while(1)
{
value=read_adc();
show_adc_led(value);
}
}
unsigned short read_adc()
{
unsigned char adc_low,adc_high;
unsigned short value; //16비트 강조 (unsigned int와 같음)
ADCSRA|=0x40; //0b01000000
while((ADCSRA&0x10)!=0x10); //ADC 변환 완료 검사(ADIF)
adc_low=ADCL; //변환된 Low 값 읽어오기
adc_high=ADCH; //변환된 High 값 읽어오기
//반드시 ADCL을 먼저 읽어야 함
value=(adc_high<<8)|adc_low;
return value;
}
void show_adc_led(unsigned short value)
{
if(value<=450) PORTB=0x02; //LED 8개 ON
else PORTB=0x00; //LED 모두 OFF
}
led밝기 조절
// C++ code
//
int senPin = A0;
int ledPin=9;
int senVal = 0;
void setup()
{
Serial.begin(115200);
// pinMode(ledPin, OUTPUT);
}
void loop()
{
senVal = analogRead(senPin); // 조도센서의 값을 읽음
senVal = map(senVal, 300,1000,255,0);
analogWrite(ledPin, senVal);
Serial.print("photoregister =");
Serial.println(senVal);
delay(500);
}
'arduino,avr' 카테고리의 다른 글
I/O 프로그램 작성시 고려사항 (0) | 2022.04.02 |
---|---|
Atmega 2560(아두이노 메가) pin map, 기본 포트설정 (0) | 2022.04.02 |
주사위led 연습문제 (0) | 2022.02.23 |
아두이노/avr serial통신 (0) | 2022.02.22 |
아두이노 기초 : L LED점멸 (0) | 2022.02.21 |