BASIC4MCU | 질문게시판 | atmega128 조도센서를 이용하여 서보모터와 dc모터 제어하는거 봐주실수있나요ㅠㅠ
페이지 정보
작성자 화니뿌뿌 작성일2022-06-02 15:11 조회1,545회 댓글0건본문
#include <mega128.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x20
#define START PINA1
#define END PINA2
#define SERVO_SW PINA3
#define SERVO_BW PINA4
#define DC_FW PINA5
#define DC_BW PINA6
#define AUTO_SW PINA7
unsinged char read_adc(unsigned char adc_input)
{
ADMUX = adc_input (ADC_VREF_TYPE & 0xff);
delay_us (10);
ADCSRA = 0x40:
while ((ADCSRA & 0x10)==0);
ADCSRA=0x10;
return ADCH;
}
void dc_forward(void){
OCR3A=1000;
PORTD6=0;
PORTD7=1;
}
void dc_backward(void){
OCR3A=1000;
PORTD6=1;
PORTD7=0;
}
void dc_stop(void){
OCR3A=0;
}
void servo_fw(void){
if(OCR1A<12)
OCR1A=OCR1A+1;
else;
}
void servo_bw(void){
if(OCR1A>5)
OCR1A=OCR1A-1;
else;
}
void servo_90(void){
OCR1A=12;
}
void servo_70(void){
OCR1A=10;
}
void servo_50(void){
OCR1A=9;
}
void servo_25(void){
OCR1A=7;
}
void servo_0(void){
OCR1A=5;
}
void main(void)
{
unsigned char adc_value;
float temp;
adc_value=0;
temp = 0;
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0xA1;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00:
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x04;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
SFIOR&=0xEF;
delay_ms(1000);
OCR1A=5;
OCR3A=0;
while (1)
{
if(START==0&&END==1){
if(DC_FW==0&&DC_BW==1)
dc_forward();
else if (DC_FW==1&&DC_BW==0)
dc_stop();
else
dc_stop();
}
else if (START==1&&END==1){
if(DC_FW==0&&DC_BW==1)
dc_forward();
else if (DC_FW==1&&DC_BW==0)
dc_backward();
else
dc_stop();
}
else if(START==1&&END==0){
if(DC_FW==0&&DC_BW==1)
dc_stop();
else if (DC_FW==1&&DC_BW==0)
dc_backward();
else
dc_stop();
if (AUTO_SW==0){
if(SERVO_FW==0&&SERVO_BW==1)
servo_fw();
else if (SERVO_FW==1&&SERVO_BW==0)
servo_bw();
else;
delay_ms(100);
}
else{
delay_ms(500);
adc_value=read_adc(0);
temp = adc_value*0.004887;
if(temp>0 && temp<=1)
servo_90();
else if(temp>1 && temp<=2)
servo_70();
else if(temp>2 && temp<=3)
servo_50();
else if(temp>3 && temp<=4)
servo_25();
else
servo_0();
delay_ms (500);
}
}
else;
}
}
이렇게 코딩했는데 서보모터와 dc모터가 안돌아갑니다ㅜㅜ 한번 봐주실수 있너ㅏ요?
댓글 0
조회수 1,545등록된 댓글이 없습니다.