BASIC4MCU | 질문게시판 | 아트메가 모터드라이브와 초음파 센서 연동 질문입니다
페이지 정보
작성자 123424135123q 작성일2022-05-19 00:54 조회1,149회 댓글1건본문
#include <avr/io.h>
#define F_CPU 16000000UL
#define _DELAY_BACKWARD_COMPATIBLE_
#include <util/delay.h>
unsigned int distance;
#define TRIG 6
#define ECHO 7
#define SOUND_VELOCITY 340UL
#define STOP_SPEED 0
#define LOW_SPEED 127
#define MID_SPEED 191
#define HIGH_SPEED 255
#define MOTOR_CW 0xb0
#define MOTOR_CCW 0x60
#define MOTOR_BRAKE 0xd0
#define MOTOR_STOP 0x00
volatile int count=0,value=0;
int motor_speed[4]={STOP_SPEED,LOW_SPEED,MID_SPEED,HIGH_SPEED};
int main(void)
{
DDRB=0xff;
DDRE=((DDRE | (1<<TRIG))&~(1<<ECHO));
PORTB=MOTOR_STOP;
TCCR2=0x6b;
PORTB=MOTOR_CW;
while(1)
{
TCCR1B=0x03;
PORTE&=~(1<<TRIG);
_delay_us(10);
PORTE|=(1<<TRIG);
_delay_us(10);
PORTE&=~(1<<TRIG);
while(!(PINE&(1<<ECHO)))
;
TCNT1=0X0000;
while(PINE&(1<<ECHO))
TCCR1B=0X00;
distance=(unsigned int)(SOUND_VELOCITY*(TCNT1*4/2)/1000);
if (distance <300)
{
OCR2=motor_speed[0];
_delay_ms(500);
}
else if (distance < 600)
{
OCR2=motor_speed[1];
_delay_ms(500);
}
else if (distance < 1000)
{
OCR2=motor_speed[2];
_delay_ms(500);
}
else OCR2=motor_speed[3];
_delay_ms(500);
}
}
아트메가128을 이용해 초음파센서와 모터드라이버를 이용해 거리별 모터의 속도를 조절하려고하는데 오류가 나서 문의 드립니다
댓글 1
조회수 1,149master님의 댓글
master 작성일
오류메시지를 첨부하지 않았으니 컴파일 오류 같지는 않고
동작 오류가 발생한다는 것이겠죠?
int main(void){
DDRB=0xff; PORTB=MOTOR_STOP; PORTB=MOTOR_CW;
DDRE=1<<TRIG;
TCCR2=0x6b;
while(1){
PORTE|=(1<<TRIG); _delay_us(10); PORTE&=~(1<<TRIG);
while(!(PINE&(1<<ECHO))); TCNT1=0; TCCR1B=3;
while( PINE&(1<<ECHO) ); TCCR1B=0;
distance=(unsigned int)(SOUND_VELOCITY*(TCNT1*4/2)/1000);
//
if (distance< 300)OCR2=motor_speed[0];
else if(distance< 600)OCR2=motor_speed[1];
else if(distance<1000)OCR2=motor_speed[2];
else OCR2=motor_speed[3];
_delay_ms(500);
}
}
메인함수 변경해서 돌려보시고
잘 안되면 아래 예제를 공부해서 만들어보세요
https://cafe.naver.com/circuitsmanual/6156