BASIC4MCU | 질문게시판 | Atmega128A 초음파 3개로 led3개를 각각 제어하고 싶은데 안됩니다 도와주세요..
페이지 정보
작성자 밍토리 작성일2024-03-11 20:31 조회2,620회 댓글2건본문
하나씩은 다 테스트 해봤을 때 되었고 이제 3개를 합쳐서 실행을 하니 led에 불이 안 들어옵니다. 어떻게 해야 3개의 led가 각각 일정거리에 다다랐을 때 불이 들어올까요 ..?? 제발 도와주세요 ㅠㅠㅠ
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define Trigger_ON PORTE=0x01 //초음파 트리거 PE0
#define Trigger_OFF PORTE=~0x01
#define Echo (PINE&0x04) //초음파 에코 PE2
#define Trigger_ON PORTE=0x02 //초음파 트리거 PE1
#define Trigger_OFF PORTE=~0x02
#define Echo (PINE&0x08) //초음파 에코 PE3
/*#define Trigger_ON PORTF=0x01 //초음파 트리거 PF0
#define Trigger_OFF PORTF=~0x01
#define Echo (PINF&0x04) //초음파 에코 PF2
*/
void hc_sr04_init(void);
unsigned int sensor1(void);
unsigned int sensor2(void);
//unsigned int sensor3(void);
int main(void){
DDRD = 0xFF;
int range1=0;
int range2=0;
//int range3=0;
hc_sr04_init();
while(1){
range1=sensor1();
range2=sensor2();
//range3=sensor3();
if (range1 < 20) PORTD = 0x01;
else PORTD = 0x00;
if (range2 < 20) PORTD = 0x02;
else PORTD = 0x00;
/*if (range3 < 20) PORTD = 0x04;
else PORTD = 0x00;*/
}
}
unsigned int sensor1(void)
{
Trigger_ON;
_delay_us(10);
Trigger_OFF; // 10uS
while(Echo==0x00);
TCCR1B=(1<<CS11);
TCNT1=0x00;
while(Echo!=0x00);
TCCR1B=(1<<WGM12);
return (TCNT1/58); //cm로 변환 1cm은 58
}
unsigned int sensor2(void)
{
Trigger_ON;
_delay_us(10);
Trigger_OFF; // 10uS
while(Echo==0x00);
TCCR1B=(1<<CS11);
TCNT1=0x00;
while(Echo!=0x00);
TCCR1B=(1<<WGM12);
return (TCNT1/58); //cm로 변환 1cm은 58
}
/*unsigned int sensor3(void)
{
Trigger_ON;
_delay_us(10);
Trigger_OFF; // 10uS
while(Echo==0x00);
TCCR1B=(1<<CS11);
TCNT1=0x00;
while(Echo!=0x00);
TCCR1B=(1<<WGM12);
return (TCNT1/58); //cm로 변환 1cm은 58
}*/
void hc_sr04_init(void)
{
DDRE=0x03; // PE0 ouput Trigger, PE2 input Echo
//DDRF=0x03;
TCCR1B=(1<<WGM12); // Set timer up in CTC mode
TCCR0 = 0x1F; //prscalar 128
OCR0 = 243;
}
댓글 2
조회수 2,620master님의 댓글
master 작성일
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//
#define Trig1_ON PORTE|=1 //초음파 트리거 PE0
#define Trig1_OFF PORTE&=~1
#define Echo1 (PINE&4) //초음파 에코 PE2
#define Trig2_ON PORTE|=2 //초음파 트리거 PE1
#define Trig2_OFF PORTE&=~2
#define Echo2 (PINE&8) //초음파 에코 PE3
//
int sensor1(void){
Trig1_ON; _delay_us(10); Trig1_OFF; // 10uS
while(Echo1==0); TCNT1=0; TCCR1B=2;
while(Echo1); TCCR1B=0;
return (TCNT1/58); //cm로 변환 1cm은 58
}
//
int sensor2(void){
Trig2_ON; _delay_us(10); Trig2_OFF; // 10uS
while(Echo2==0); TCNT1=0; TCCR1B=2;
while(Echo2); TCCR1B=0;
return (TCNT1/58); //cm로 변환 1cm은 58
}
//
int main(void){
int range1=0,range2=0;
DDRD=3;
DDRE=3; // PE0 ouput Trig, PE2 input Echo
while(1){
range1=sensor1();
range2=sensor2();
if(range1<20)PORTD|=1; else PORTD&=~1;
if(range2<20)PORTD|=2; else PORTD&=~2;
}
}