BASIC4MCU | 질문게시판 | 아트메가 128 초음파센서 코드 질문입니다.
페이지 정보
작성자 gongrin 작성일2023-11-29 21:00 조회1,037회 댓글0건본문
초음파 센서를 사용하여 거리에 따라 led가 켜지는 것을 만드는 중인데 작동은 다 됩니다...
하지만 거리게산이 문제가 있는지 실제 측정거리랑 조건이랑 차이가 납니다.(50cm면 4개가 켜져야되는데 1개만 켜져있습니다.50cm부터 led가 켜지며 점등까지 정상작동합니다...)
어디서 문제가 생기는 것일까요..?
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define Trigger_ON PORTF|=0x01 // 초음파 트리거 PF0
#define Trigger_OFF PORTF&=~0x01
#define Echo (PINF&0x04) // 초음파 에코 PF2
void hc_sr04_init(void);
unsigned int getEcho(void);
int main(void) {
DDRG = 0xFF;
DDRD = 0x0F; // PD0, PD1, PD2, PD3를 LED 출력으로 설정
int range = 0;
hc_sr04_init();
while(1) {
range = getEcho();
if (range > 100) {
PORTD = 0x00; // LED 0개 on (-)
} else if (range > 90) {
PORTD = 0x01; // LED 1개 on (PD0)
} else if (range > 75) {
PORTD = 0x03; // LED 2개 on (PD0, PD1)
} else if (range > 60) {
PORTD = 0x07; // LED 3개 on (PD0, PD1, PD2)
} else if (range > 45) {
PORTD = 0x0F; // LED 4개 on (PD0, PD1, PD2, PD3)
} else {
// LED 4개 점멸(0.5초 간격) (PD[0,1,2,3])
PORTD ^= 0x0F;
_delay_ms(5000);
}
}
}
unsigned int getEcho(void) {
Trigger_ON;
_delay_us(10);
Trigger_OFF; // 10uS
while(Echo == 0x00);
TCCR1B = 0x02;
TCNT1 = 0x00;
while(Echo != 0x00);
TCCR1B = 0x08;
return (TCNT1 / 58); // cm
}
void hc_sr04_init(void) {
DDRF = 0x03; // PF0을 출력으로 설정하여 트리거, PF2를 입력으로 설정하여 에코
TCCR1B = 0x04; // 타이머를 CTC 모드로 설정, 분주비를 256으로 설정
TCCR0 = 0x1F;
OCR0 = 243;
}
댓글 0
조회수 1,037등록된 댓글이 없습니다.