질문게시판 > atmega128fh 라인트레이서 제작중 방향 문제에 관해서

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

atmega128fh 라인트레이서 제작중 방향 문제에 관해서

페이지 정보

작성자 라이언과어피치 작성일18-12-19 04:15 조회5,663회 댓글0건

본문

안녕하세요 라인트레이서 제작중인 학생입니다.

서툴지만 직진은 가능하나 좌우회전이 안됩니다.

돌아도 크게 돕니다. 다음은 사용중인 코드인데

어느 부분을 수정하면 좋을지 조언부탁드립니다.

참고로 발광센서는 세 쌍을 사용중입니다.


#include <avr/io.h>


#include <avr/interrupt.h>


 


typedef unsigned int WORD;


typedef unsigned char BYTE;


 


#define SenserNum 3


#define BAUD_38400 25


 


WORD speed_L;


WORD speed_R;


WORD ADC_Data[SenserNum+1];


 


int state;


int count_R,count_L,CrossCount,StopState;


int Left_Sum,Right_Sum,Center_Sum;


//int count_R = 0;


//int count_L = 0;


 


//unsigned char left_motor[8] = { 0x55, 0x11, 0x99, 0x88, 0xaa, 0x22, 0x66, 0x44};


//unsigned char right_motor[8]


//unsigned char left_motor[8] = { 0x11,0x55,0x44,0x66,0x22,0xaa,0x88,0x99}; //1-2 Phase Control Method


//unsigned char right_motor[8] = { 0x99,0x88,0xaa,0x22,0x66,0x44,0x55,0x11};


unsigned char left_motor[8] = {0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11};


unsigned char right_motor[8] = {0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};


 


// ??? ???????????????? ???????????????


//unsigned char left_motor_count;


//unsigned char right_motor_count;


 


void PORT_init(void)


{


       DDRE = DDRF = DDRG = 0; //Set port to input direction first.


       PORTA = PORTB = PORTC = PORTD = PORTE = PORTF = PORTG = 0x00; //


       DDRA = 0XFF;


       DDRB = 0xFF;


       DDRC = 0xFF;


       DDRE = 0xFF;


       DDRD = 0xFF;


       PORTC = 0xFF;


       PORTD = 0xFF;


}


 


void ADC_init(void)


{


       ADMUX = 0;


       ADCSRA = (1<<ADEN)|(1<<ADFR)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(ADPS1)|(1<<ADPS0);


 


       for(int i =0; i<SenserNum; i++)


       {


               ADC_Data[i]=0;


       }


}


 


void Timer_init(void)


{


       TCCR1B = (1<<CS10);


       TCNT1 = speed_R;


 


       TCCR3B = (1<<CS30);


       TCNT3 = speed_L;


      


       TIMSK = (1<<TOIE1);


       ETIMSK = (1<<TOIE3);


 


}


 


void Delay_us(unsigned char time_us)


{


       register unsigned char i;


 


       for(i = 0; i < time_us; i++) {


               asm (" PUSH R0 ");


               asm (" POP R0 ");


               asm (" PUSH R0 ");


               asm (" POP R0 ");


               asm (" PUSH R0 ");


               asm (" POP R0 ");


       }


}


 


void Delay_ms(unsigned int time_ms)


{


       register unsigned int i;


 


       for(i = 0; i < time_ms; i++)


       {


               Delay_us(250);


               Delay_us(250);


               Delay_us(250);


               Delay_us(250);


       }


}


 


void Set_Speed(void)


{


 


       Left_Sum = ADC_Data[1];


       Center_Sum = ADC_Data[2];


       Right_Sum = ADC_Data[3];


 


       if(Left_Sum > 800 && Center_Sum < 550 && Right_Sum < 500) { //Left Corner


               speed_L = 30000;


               speed_R = 50000;


               state=1;


       }


       else if(Left_Sum > 800 && Center_Sum > 550 && Right_Sum < 500) { //Left


               speed_L = 35000;


               speed_R = 50000;


               state=2;


       }


       else if(Left_Sum < 500 && Center_Sum < 550 && Right_Sum > 800 ) { //Right Corner


               speed_L = 50000;


               speed_R = 30000;


               state=3;


       }


       else if(Left_Sum < 500 && Center_Sum > 550 && Right_Sum > 800) { //Right


               speed_L = 50000;


               speed_R = 35000;


               state=4;


       }


 


       else if(Center_Sum > 800) //Straight


       {


               speed_L = 50000;


               speed_R = 50000;


               state=5;


       }


       else                     //Stop


       {


               speed_L = 0;


               speed_R = 0;


               state=6;


       }


}


void USART_init(unsigned int baud0,unsigned int baud1)


{


       UBRR0H = (unsigned char)(baud0 >> 8);


       UBRR0L = (unsigned char)baud0;


 


       UCSR0B = (0<<RXEN0)|(1<<TXEN0)|(0 << RXCIE0)|(0 << TXCIE0);


       UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);


 


       UBRR1H = (unsigned char)(baud1 >> 8);


       UBRR1L = (unsigned char)baud1;


 


       UCSR1B = (0<<RXEN1)|(1<<TXEN1)|(0<<RXCIE1)|(0<<TXCIE1);


       UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);


}


 


void Txd0Byte(unsigned char datum)


{


       while(!(UCSR0A & (1<<UDRE0)));


       UDR0 = datum;


}


void Txd1Byte(unsigned char datum)


{


       while(!(UCSR1A & (1<<UDRE1)));


       UDR1 = datum;


}


unsigned char Rxd0Byte(void)


{


       while(!(UCSR0A & (1 << RXC0)));


       return UDR0;


}


unsigned char Rxd1Byte(void)


{


       while(!(UCSR1A & (1 << RXC1)));


       return UDR1;


}


void Txd0String(unsigned char *str)


{


       int i;


       for( i=0; str[i]!=0; i++)


       Txd0Byte( str[i]);


}


void Txd1String(unsigned char *str)


{


       int i;


       for( i=0; str[i]!=0; i++)


       Txd1Byte( str[i]);


}


 


void Txd0Dec(int dec)


{


       char String[5];


       int loop;


 


       for (loop = 0 ; loop <5 ; loop++)


       {


               String[loop] = 0x30 + (dec % 10);


               dec = dec / 10;


       }


       for(loop = 4; loop >= 0; loop --)


       Txd0Byte(String[loop]);


}


void Txd1Dec(int dec)


{


       char String[5];


       int loop;


 


       for (loop = 0 ; loop <5 ; loop++)


       {


               String[loop] = 0x30 + (dec % 10);


               dec = dec / 10;


       }


       for(loop = 4; loop >= 0; loop --)


       Txd1Byte(String[loop]);


}


int main (void)


{


       USART_init(BAUD_38400,BAUD_38400);


       PORT_init();


       Timer_init();


       ADC_init();


      


       count_R = 0;


       count_L = 0;


       CrossCount = 0;


       StopState = 0;


       state = 0;


 


       sei();


 


       for(;;)   {


               Delay_ms(100);


               Txd1Dec(ADC_Data[3]);


               Txd1Byte(' ');


               Txd1Dec(ADC_Data[2]);


               Txd1Byte(' ');


               Txd1Dec(ADC_Data[1]);


               Txd1Byte(' ');


               //      Txd1Dec(ADC_Data[4]);


               //      Txd1Byte(' ');


               //      Txd1Dec(ADC_Data[5]);


               //      Txd1Byte(' ');


               Txd0Dec(ADC_Data[3]);


               Txd0Byte(' ');


               Txd0Dec(ADC_Data[2]);


               Txd0Byte(' ');


               Txd0Dec(ADC_Data[1]);


               //      Txd0Byte(' ');


               //      Txd0Dec(ADC_Data[4]);


               //      Txd0Byte(' ');


               //      Txd0Dec(ADC_Data[5]);


               Txd0Byte(' ');


               if(state==1) Txd1String("Left Corner");


               else if (state==2)  Txd1String("Left");


               else if (state==3)  Txd1String("Right Corner");


               else if (state==4)  Txd1String("Right");


               else if (state==5)  Txd1String("Straight");


               else Txd1String("Stop");


               Txd1Byte('\n');


       }


 


       return 0;


}


 


SIGNAL(TIMER1_OVF_vect)


{


       PORTB = right_motor[count_R++];


       count_R %=8;


 


       Set_Speed();


       TCNT1 = speed_R;


}


 


SIGNAL(TIMER3_OVF_Vect)


{


       PORTC= left_motor[count_L++];


       count_L %= 8;


 


       Set_Speed();


       TCNT3 = speed_L;


}


SIGNAL(ADC_vect)


{


       ADC_Data[ADMUX++] = ADC ;


       //  ADC_Data[SenserNum-1] = ADC_Data[0];


 


       ADCSRA = (1<<ADEN)|(1<<ADFR)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(ADPS1)|(1<<ADPS0);


 


       ADMUX %= SenserNum+1;


}


////////////////////////////////////////////////

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 5,663

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[28] master  17-10-29
질문 아두이노 delay함수를 millis함수로 대체하는방법 댓글[1] 첨부파일이게아닌데 새글 12:56
답변 답변 : 아두이노 delay함수를 millis함수로 대… master 새글 17:29
질문 atmega128 적외선센서 관련질문입니다. 댓글[7] 춘배 새글 23-06-08
질문 아두이노 whillis 함수 delay처럼 사용하는방법… 댓글[1] 이게아닌데 새글 23-06-08
질문 아두이노 로드셀 질문 댓글[3] 첨부파일아두이노노노논 새글 23-06-08
질문 아트메가 128 DHT22온도센서 댓글[1] tmet 새글 23-06-08
질문 압력센서에 따른 진동모터를 버튼으로 제어 회로도 질문 도와주세용용  23-06-07
질문 아두이노 리니어 제어 모듈 설계중입니다. 도와주세요 갓비타  23-06-06
답변 답변 : 아두이노 리니어 제어 모듈 설계중입니다. 도와… master  23-06-07
질문 dc모터 제어 관련 질문 드려요 ㅠㅠ!! 댓글[2] dpwl  23-06-06
답변 답변 : dc모터 제어 관련 질문 드려요 ㅠㅠ!! master  23-06-07
질문 pixy2 cam 을 이용한 색상인식 모터 제어 댓글[1] 가나다라  23-06-05
질문 안녕하세요 제품 품목 이름에 대해서 궁금합니다. 첨부파일알려주시면감사합니다  23-06-05
질문 Atmega128 온도센서로 led제어 질문드려요 댓글[1] 첨부파일얍얍  23-06-05
질문 아구이노 코드를 atmega 128 코드로 변환 하고 … 댓글[1] 기로롱  23-06-05
질문 atmega128 uart 질문입니다. 댓글[1] bme12  23-06-05
질문 라즈베리파이에 풀 프레임 이미지센서 활용에 대한 질문이… 댓글[1] 첨부파일KYLO  23-06-04
질문 아두이노 시리얼 번호를 이용해 led 제어 wnion  23-06-04
답변 답변 : 아두이노 시리얼 번호를 이용해 led 제어 master  23-06-07
질문 ATMEGA128 혹시 여기서 왜 인터럽트 기능이 안되… 댓글[1] IEEE  23-06-04
질문 stm32f767을 이용해서 자이로가속도 센서의 값 받… 댓글[1] rlchwjswk  23-06-03
질문 아두이노 모터제어 관련해서 질문드립니다! 댓글[1] 첨부파일아두이노어렵잖아  23-06-03
질문 atmega128 디지털조도센서 코드오류 댓글[1] 까미  23-06-02
질문 atmega128 디지털 조도 센서 댓글[1] 까미  23-06-02
질문 적외선리모콘으로 부저를제어 하는방법 질문입니다. 댓글[4] Tell  23-06-02
질문 lora 무선 모듈에 관한 질문입니다. 댓글[1] 로이스10  23-06-01
질문 적외선 송수신기 DC모터2개 제어 질문입니다. 댓글[5] Tell  23-06-01
질문 스텝모터 제어 코드 질문 댓글[6] pmh11  23-05-31
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전