BASIC4MCU | 질문게시판 | atmega128 초음파 센서로 신호등 시간초 늘리기
페이지 정보
작성자 서동씨 작성일2022-06-18 16:34 조회3,471회 댓글0건본문
코드를 입력하고 연결을 하면 초음파 센서가 작동을 안하는지 if(dist > 50) 이부분이 안돌아 갑니다..ㅠㅠㅠ
제가 if문을 잘못적은건지 핀을 잘못 꼽은 건지 이해가 안돼서 질문을 드려요 ..ㅠㅠ
#include <mega128.h> //mega128보드 라이브러리
#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;
void main(void)
{
// 초기화: LED
DDRC = 0xFF;
DDRE = 0xFF;
PORTC = 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; //ECHO 출력
delay_us(15);
TRIGGER = 0;
DDRC = 0xFF;
PORTC = 0x0F;
PORTE = num[i];
delay_ms(1000);
i++;
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/16us * 8 * (256 -138) = 59us
interrupt [TIM2_OVF] void time2(void)
{
TCNT2 = 138;
cnt++;
}
댓글 0
조회수 3,471등록된 댓글이 없습니다.