BASIC4MCU | 질문게시판 | ATmega128 코드비전 라인트레이서 질문
페이지 정보
작성자 으악어려워 작성일2018-06-07 20:04 조회15,350회 댓글5건본문
코드비전을 사용해서 라인트레이서 제작중입니다.
모터가 돌아가지 않고 적외선센서3개 달건데 소스좀봐주세요..
#include <mega128.h>
#include <delay.h>
#define Trigger_ON PORTA|=1 //초음파 트리거 PAO output Trigge>
#define Trigger_OFF PORTA&=1
#define Echo1 (PINA&0x02) //초음파 에코 PA1 input Echo
#define Echo2 (PINA&0x04) //초음파 에코 PA2 input Echo
#define Echo3 (PINA&0x08) //초음파 에코 PA3 input Echo
int cho1;
int cho2;
int cho3; //A0 트리거 , 초음파1 오른쪽, 초음파2 정면 초음파 3번이 왼쪽
unsigned int count;
unsigned char right = 0;
unsigned char forward = 0;
unsigned char left = 0;
unsigned int getEcho1(void)
{
unsigned int range1;
Trigger_ON; delay_us(10); Trigger_OFF; //10us
TCNT1=0x00;count=0;
while(Echo1==0x00);
TCNT1=0x00;
TCCR1B=0x03;
while(Echo1)
range1=TCNT1*8/116; //the range in ON
if(range1<20)
{right=1;}
if(range1>20)
{right=0;}
delay_ms(50);
return range1;
}
unsigned int getEcho2(void) //에코는 나오는 신호
{
unsigned int range2;
Trigger_ON; delay_us(10); Trigger_OFF;
TCCR1B=0x00;
//TCCR1B=0x02;
while(Echo2)
range2=TCNT1*8/116;
if(range2<15)
{forward=1;}
if(range2>=15)
{forward=0;}
delay_ms(50);
return range2;
}
unsigned int getEcho3(void)
{
unsigned int range3;
Trigger_ON; delay_us(10); Trigger_OFF;
TCCR1B=0x00;
//TCCR1B=0x02;
while(Echo3)
range3=TCNT1*8/116; //this range in CM
if(range3<20)
{left=1;}
if(range3>=20)
{left=0;}
delay_ms(50);
return range3;
}
//========================================================================================//
//PORTB는 모터
void DC_MotorRifht(){
DDRB=0xff;
PORTB=(1<<PORTB0)|(0<<PORTB1)|(0<<PORTB2)|(1<<PORTB3);
}
void DC_Motorleft(){
DDRB=0xff;
PORTB=(0<<PORTB0)|(1<<PORTB1)|(1<<PORTB2)|(0<<PORTB3);
}
void DC_MotorGo(){
DDRB=0xff;
PORTB=(1<<PORTB0)|(0<<PORTB1)|(1<<PORTB2)|(0<<PORTB3);
}
void DC_MotorStop(){
DDRB=0xff;
PORTB=(0<<PORTB0)|(0<<PORTB1)|(0<<PORTB2)|(0<<PORTB3);
}
void DC_MotorBack(){
DDRB=0xff;
PORTB=(0<<PORTB0)|(1<<PORTB1)|(0<<PORTB2)|(1<<PORTB3);
}
//=====================================================================================//
void main(void)
{
DDRA=0x01;
PORTA=0x00;
delay_ms(100);
//ICR3=100;
while(1)
{
/*
DC_MotorGO();
DC_MotorLeft();
DC
*/
if(right==1 && forward==1 && left ==1){}
if(right==1 && forward==1 && left ==0){}
if(right==1 && forward==0 && left ==1){}
if(right==1 && forward==0 && left ==0){}
if(right==0 && forward==1 && left ==1){}
if(right==0 && forward==1 && left ==0){}
if(right==0 && forward==0 && left ==1){}
if(right==0 && forward==0 && left ==0){}
}}
댓글 5
조회수 15,350master님의 댓글
master 작성일
라인트레이서를 만들려고 하는 것이니
모터가 안 돌아간다는 것과
적외선 센서를 추가하겠다는 것이 질문 내용인거죠?
RC카가 아니므로 초음파센서는 사용하지 않을거죠?
으악어려워님의 댓글
으악어려워
적외선센서로 벽감지후 미로탈출해야되는데
현재는 모터가 되지않습니다 모터는 L298N 모터사용중입니다
master님의 댓글
master
회로도/연결사진/동작하는 동영상
전원장치스펙(전류,전압)
모터스펙(전류,전압)
검토할 수 있는 충분한 자료가 있어야합니다.
master님의 댓글
master 작성일
센서는 디지털로 읽을건가요?
아니면 ADC로 읽을건가요?
코드를 작성하기 위해서는 회로도가 있어야합니다.
eko12님의 댓글
eko12 작성일7207로 오세요