BASIC4MCU | 질문게시판 | 답변 : atmega128 dc모터 코딩 질문입니다.
페이지 정보
작성자 master 작성일2023-04-30 18:23 조회1,445회 댓글4건본문
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
//
char flag=0;
int distance;
unsigned int dis_wall;
//
interrupt [EXT_INT4] void ext_int4_isr(void){
TCCR0=0;
distance=dis_wall*0.170;
distance=distance-32;
dis_wall=0;
}
//
interrupt [TIM0_OVF] void timer0_ovf_isr(void){
dis_wall++;
TCNT0=256-20;
}
//
void main(void){
DDRB=0xFF; //모터
PORTE=0x7F; DDRE=0x80; //초음파
TCNT0=-20; TIMSK=0x01;
EICRB=0x02; EIFR=0x10; EIMSK=0x10;
#asm("sei")
while(1){
delay_ms(100);
PORTE.7=1; TCCR0=2; delay_us(10); PORTE.7=0; delay_ms(500);
if(distance<40){
if(flag==0){ flag=1; PORTB=0x05; delay_ms(1000); PORTB=0; }
else{
if(flag==1){ flag=0; PORTB=0x0A; delay_ms(1000); PORTB=0; }
}
}
}
댓글 4
조회수 1,445김자라님의 댓글
김자라 작성일감사합니다!!
김자라님의 댓글
김자라 작성일
마스터님 마지막 if문 쪽 flag==0 , 여기서 0은 비트 수 인건가요?
if(distance<40){
if(flag==0){ flag=1; PORTB=0x05; delay_ms(1000); PORTB=0; }
else{
if(flag==1){ flag=0; PORTB=0x0A; delay_ms(1000); PORTB=0; }
}
master님의 댓글
master
if(distance<40){ // 40미만
if(flag==0){ flag=1; } // 40이상이었다면 40미만으로
else{ // 40이상
if(flag==1){ flag=0; } // 40미만이었다면 40이상으로
}
1회만 동작시키기 위해서 flag 변수를 사용하고 있으며
스위치 엣지 검출방식과 같습니다.
김자라님의 댓글
김자라
감사합니다 도움이 많이 됐습니다 :)