BASIC4MCU | 질문게시판 | 센서 입력으로 서보모터 컨트롤
페이지 정보
작성자 Winavr 작성일2018-12-05 10:53 조회6,492회 댓글1건본문
#include <avr/io.h>
#include <avr/interrupt.h>
//
void RC_Motor(int angle){
if(angle==30)OCR1A=1200; //PB5
else OCR1A=3000;
}
else{ // (ADMUX==0x42)
S=ADCW; S=S*5.001/1024.0; ADMUX=0x41;
if(mode2==0){
if(S>1.00){ RC_Motor( 30); } //감지가 안되면 5V가 출력이 되므로 서보모터 작동
else { RC_Motor(0); count2=3000; mode2=1; } //감지가 되면 서보모터 동작 중지 및 3초 대기
}
if(mode2==1){
if(count2){
if(--count2==0)mode2=0;
}
}
}
}
//
int main(void){
DDRE=0xFF;
DDRB=0x20; // PB5 out
TCCR1A=0x82; TCCR1B=0x1A; ICR1=39999;
TCCR0=0x0D; OCR0=124; TIMSK=2;
ADMUX=0x41; ADCSRA=0xE7;
sei();
while(1);
}
서보모터를 처음에는 정지 시켰다가 센서 입력이 되면 30도나 90도로 움직이려 합니다.그런데 멈추지 않고 계속 돕니다. 어떻게 해야하나요?
댓글 1
조회수 6,492master님의 댓글
master 작성일
S=ADCW; S=S*5.001/1024.0; ADMUX=0x41;
if(S>1.00){ RC_Motor(30); } //감지가 안되면 5V가 출력이 되므로 서보모터 작동
else { RC_Motor(0); count2=3000; mode2=1; } //감지가 되면 서보모터 동작 중지 및 3초 대기
S가 1.0 근처에서 오락가락 해도 모터가 오락가락 할테고요
ADMUX가 제대로 지정되지 않아도 오락가락 하겠죠
ADC핀 연결은 제대로 했나요?
S값이 제대로 읽히는지 확인하세요