BASIC4MCU | 질문게시판 | 답변 : atmega128 초음파 센서로 신호등 시간초 늘리기
페이지 정보
작성자 master 작성일2022-06-18 17:11 조회224회 댓글1건본문
#include <mega128.h>
#include <delay.h>
//
#define TRIGGER PORTD.0
#define Echo
//
typedef unsigned char u_char;
//
unsigned char num[10]={0x67, 0x7f, 0x27, 0x7d, 0x6d, 0x66, 0x4f, 0x5b, 0x06, 0x3f };
unsigned int dist=0, cnt=0; //거리 측정 변수
int i=0;
//
interrupt [TIM2_OVF] void time2(void){// 초음파 센서 거리 측정// 1/16us * 8 *(256 -138)=59us
TCNT2=138;
cnt++;
}
//
void main(void){
// 초기화: LED
DDRC=0xFF; PORTC=0xFF;
DDRE=0xFF; PORTE=0xFF;
delay_ms(50);
// 초기화 : 초음파
TRIGGER=0; //트리거 초기화
TIMSK=0x65; //타이머카운터 함수 ↓
TCCR0=0x8;
TCNT0=176;
TCCR2=0x00;
TCNT2=138;
SREG=0x80; //전역 인터럽트 설정
delay_ms(50);
while(1){
cnt=0;
TRIGGER=1; delay_us(15); TRIGGER=0;
PORTC=0x0F; PORTE=num[i];
delay_ms(1000);
if(++i==11){ i=0; DDRC=0xFF; PORTC=0xF0; delay_ms(5000); }
}
while(PIND.1==0);
TCNT2=138;
TCCR2=0x03;
while(PIND.1 !=0){ if(cnt > 300)break; } // 3m보다 크면 측정 불가
TCCR2=0x00;
if(cnt > 2 && cnt < 300)dist=cnt;
else dist=300;
//
if(dist > 50){
PORTC=0b11111101;
PORTC=0b11111111;
for(i=0;i<11;i++){ PORTE=num[i]; delay_ms(1000); }
}
delay_ms(50);
}
무한루프 밖에 있는 코드는 실행되지 않습니다.
들여쓰기를 생활화 하세요
들여쓰기만 잘 해도 간단한 오류는 쉽게 찾습니다.
댓글 1
조회수 224서동씨님의 댓글
서동씨 작성일감사합니당!!