일정 밝기 이하면 불이 켜지는 프로그램

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);
               
}

+ Recent posts