BASIC4MCU | 질문게시판 | atmega128 적외선센서로 Led와 서보모터 제어 코드 질문
페이지 정보
작성자 아트메가맨 작성일2020-11-21 18:31 조회21,474회 댓글1건본문
프로그램은 avr 스튜디오 쓰고 있습니다.
atmega128로 적외선 센서(TCRT5000)로 감지를 하면 Led가 꺼지고 물체가 없으면 켜져있는 상태를 유지하는 것과 적외선 센서로 감지가 되면 서보모터(HS-311)가 90도 올라가고 복귀하고 감지가 안되면 꺼져있는 상태를 코딩해봤습니다.
그런데 서보모터는 잘 작동하고 LED는 적외선센서가 감지를 하든 안하든 계속 꺼져 있네요. 어디를 수정해야 될까요?
아 추가 질문으로 적외선센서 10개, led 8개, 서보모터2개가 USB전원으로 충분할까요?
#include <avr/io.h>
#include <util/delay.h>
void Led()
{
if(PIND & 0x01) //PIND 입력을 받아
PORTA = 0x00; //LED 끄기
else
PORTA = 0x01; //LED 켜기
if(PIND & 0x02)
PORTA = 0x00;
else
PORTA = 0x02;
if(PIND & 0x04)
PORTA = 0x00;
else
PORTA = 0x04;
if(PIND & 0x08)
PORTA = 0x00;
else
PORTA = 0x08;
if(PIND & 0x10)
PORTA = 0x00;
else
PORTA = 0x10;
if(PIND & 0x20)
PORTA = 0x00;
else
PORTA = 0x20;
if(PIND & 0x40)
PORTA = 0x00;
else
PORTA = 0x40;
if(PIND & 0x80)
PORTA = 0x00;
else
PORTA = 0x80;
}
void Motor()
{
int i;
if( PINE & 0x01)
for(i=0;i<150;i++){PORTB=0x01; _delay_us(1500); PORTB=0x00; _delay_ms(20);}
else
for(i=0;i<50;i++){PORTB=0x01; _delay_us(600); PORTB=0x00; _delay_ms(20);}
if( PINE & 0x02)
for(i=0;i<150;i++){PORTB=0x02; _delay_us(1500); PORTB=0x00; _delay_ms(20);}
else
for(i=0;i<50;i++){PORTB=0x02; _delay_us(600); PORTB=0x00; _delay_ms(20);}
}
int main(void)
{
DDRA = 0xff; //PORTA(LED)를 출력으로
DDRD = 0x00; //PORTD(적외선 센서)를 입력으로
DDRB = 0xff; //서보모터 출력
DDRE = 0x00; //모터쪽 적외선 입력
while (1)
{
Led();
Motor();
}
}
댓글 1
조회수 21,474master님의 댓글
master 작성일
void Led(){
PORTA = ~PIND; //LED
}