BASIC4MCU | 질문게시판 | ATmega j-kit질문있습니다.
페이지 정보
작성자 상욱 작성일2019-05-29 10:10 조회3,643회 댓글0건본문
우선 제가 만드려는 jkit 기기는 경보시스템입니다. 빛이 꺼진 상태에서는 아무 것도 작동하지 않습니다. 빛이 들어오면 광센서가 작동해서 FND에 OPEN이라 띄우고 스위치 4번(PE4)를 이용해 평소에는 버튼이 눌려져있다가 문을 열면 스위치가 올라와 경고음(부저)가 울리게하는 것입니다.
이게 저희가 한 코딩입니다. 문제는 부저가 울릴 때 FND의 맨오른쪽 화면에 OPEN중 N만 뜹니다. 어디 코딩을 바꿔야 할까요
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#define CDS_value 871void init_adc();
unsigned short read_adc();
void show_adc(unsigned short value);int main (void)
{
int i,j;
init_adc();
unsigned short value;
DDRE = 0x00; //PE4입력 DDR처리
DDRC = 0xff; // fnd 데이터
DDRG = 0x0f; //fnd신호
DDRB = 0x10; //부저
sei();
while(1)
{
value=read_adc();
show_adc(value);
while((PINE&0x10)!=0x00) //SW1=PE bit4, 버튼 뗴져있을 때
{
for(i=0;i<10;i++) //경고음(부저)
{
for(j=0;j<240;j++)
{
PORTB = 0x10;
_delay_ms(1.04);
PORTB = 0x00;
_delay_ms(1.04);
}
for(j=0;j<180;j++)
{
PORTB = 0x10;
_delay_ms(1.39);
PORTB = 0x00;
_delay_ms(1.39);
}
break;
}
}
while ((PINE&0x10)==0x00) // 버튼이 눌러져있을 떄
{
PORTB=0x00; //부저 OFF
break;
}
}
return 0;
}
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_value) //일정량 이상의 빛이 들어오면 FND에 OPEN띄우기
{
PORTC=0x3f;
PORTG=0x08;
_delay_ms(1);
PORTC=0x73;
PORTG=0x04;
_delay_ms(1);
PORTC = 0x79;
PORTG = 0x02;
_delay_ms(1);
PORTC = 0x37;
PORTG = 0x01;
_delay_ms(1);}
else
{
PORTC = 0x00; //FND OFF
PORTG = 0x00;
}}
댓글 0
조회수 3,643등록된 댓글이 없습니다.