BASIC4MCU | 질문게시판 | 답변 : atmega128 dc모터 멈춤 코드
페이지 정보
작성자 master 작성일2018-12-06 09:01 조회13,725회 댓글4건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-06 오전 9:07:13// by Ok-Hyun Park//센서에 인식되었을 때,dc모터를 오른쪽으로 3바퀴센서에 인식되었을 때,dc모터를 왼쪽으로 3바퀴 이렇게 제어 하고 싶습니다.센서 인식에 따라 돌아가는 건 되는데요!멈추는 방법을 모르겠어요..코드 좀 봐주세요..ㅜㅜ아니면 dc모터보다 스텝모터 같은게 방향 제어가 쉬울까요?//#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>#include <avr/interrupt.h>//unsigned int result=0xFFFF,th=0x0100;//void m1stop(){ PORTC=(PORTC&0x0C); }void m1fwd() { PORTC=(PORTC&0x0C)|1; }void m1bwd() { PORTC=(PORTC&0x0C)|2; }//void m2stop(){ PORTC=(PORTC&0x03); }void m2fwd() { PORTC=(PORTC&0x03)|4; }void m2bwd() { PORTC=(PORTC&0x03)|8; }//int main(void){DDRB=0x60; // 모터2 ENB(PB6),모터1 ENA(PB5)DDRC=0x0F; // 모터2 IN4(PC3),IN3(PC2),IN2(PC1),IN1(PC0)OCR1AL=255; TCCR1A=0xA1; TCCR1B=0x1A; ICR1=255;ADMUX=0x42; ADCSRA=0xE7; // 센서 PF2SREG=0x80;while(1){result=ADC; // 에러나면 result=ADCW;//if(result<th){ m1fwd(); m2fwd(); _delay_ms(1000); m1stop(); m2stop(); }else { m1bwd(); m2bwd(); _delay_ms(1000); m1stop(); m2stop(); }}}
댓글 4
조회수 13,725lalalalla님의 댓글
lalalalla 작성일
se-dm 사용하구요.
빛 센서 인식 : 한쪽으로 돌아가다 반대쪽으로 계속 돌아갑니다.
어둠 센서 인식 : 한쪽으로 계속 돌아갑니다.
ADCW쓰면 에러나요..!
lalalalla님의 댓글
lalalalla 작성일
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#define MOTORPORT1 PORTC
#define ON 1
#define OFF 0
#define CW 1
#define CCW 0
void M1A(int onoff){
if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x01;
else MOTORPORT1 = MOTORPORT1&0xFE;
}
void M1A_(int onoff){
if(onoff==ON) MOTORPORT1 = MOTORPORT1|0x02;
else MOTORPORT1 = MOTORPORT1&0xFD;
}
void Motor1(int CWCCW){
int i, j;
for(i=0; i<1000;i++) {
M1A(OFF);
M1A_(ON);
}
M1A(ON);
M1A_(ON);
}
void delay(int delaytime){
int i,j;
for(i=0;i<1000;i++){
for(j=0;j<delaytime;j++){
}
}
}
int main(void)
{
PORTC = 0x00;
DDRC = 0xff;
while(1){
Motor1(0);
_delay_ms(400);
PORTC = PORTC | 0x03;
_delay_ms(40);
}
return 0;
}
다른 방법인데요.
for문을 사용해서 for문 동안 돌아가고, 멈추도록 코딩을 해봤는데, 모터 자체가 안돌아갑니다.
master님의 댓글
master
if(result<th){ m1fwd(); m2fwd(); _delay_ms(1000); m1stop(); m2stop(); }
else { m1bwd(); m2bwd(); _delay_ms(1000); m1stop(); m2stop(); }
이 조건 중에서
어느 것이 밝을 때이고
어느 것이 어두울 때인가요?
lalalalla님의 댓글
lalalalla
result<th 가 어두울떄입니다.!!