اطلاعیه

Collapse
No announcement yet.

برنامه نویسی ربات مسیر یاب

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه نویسی ربات مسیر یاب

    سلام
    برا ربات مسیریاب 16تا سنسور CNY70استفاده کردیم.حالا میخایم 2تا موتور DC رو با L298 درایو کنیم.کسی فایل برنامه درایو موتور تویه CODE VISION داره؟
    ممنون میشم که راهنمایی کنید

    #2
    پاسخ : برنامه نویسی ربات مسیر یاب

    سوالت رو خیلی خیلی بد پرسیدی یعنی الان یکی بیاد نمیدونه تو با درایو کردن موتور مشکل داری یا با برنامه تعقیب خط....
    اگه موتور هات زیاد یا حالا یکم زیاد جریان میکشه (یعنی هرچی جز مکسون فال هابر و موتور های خیلی ضعیف) l298 رو ببوس بزار کنار که تا مسابقه یه تعداد خیلی خوبی میسوزونی... و بهترین جایگزین l6203 ه که هم نسبتا ارزونه هم به این راحتیا نمیسوزه بعد در ضمن هر بلاک یه درایور موتور (هر بخشیش که به یه موتور میرسه) اصولن یه مدار ثابت داره و 3 تا پایه که به میکرو میره (البته واسه موتور های dc) که 2 تاش جهته یکیش enable که اکثرا" بش pwm میدن اینم یه برنامه نه خیلی سخت نه خیلی ساده....

    کد:
    #include <mega16.h>
    #include <delay.h>
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <lcd.h>
    // Declare your global variables here
    flash int  M1[5]={200,150,160,170,200};
    flash int M2[5]={-200,-80,-30,0,30};
    bit bk=0;
    float j=1;
    int k=0,h=0;
    long int z=0;
    void motor(int p1,int p2)
    {
      if(p1>=0)OCR1AL=(int)(p1*j);else OCR1AL=-1*(int)(p1*j);
      if(p2>=0)OCR1BL=(int)(p2*j);else OCR1BL=-1*(int)(p2*j);
      if(p1>=0)
      {
       PORTD.2=1;
       PORTD.3=0; 
      }
      if(p1<0)
      {
       PORTD.2=0;
       PORTD.3=1;
      }  
      if(p2>=0)
      {
       PORTD.0=1;
       PORTD.1=0; 
      }
      if(p2<0)
      {
       PORTD.0=0;
       PORTD.1=1;
      }
    }
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
    PORTA=0xFF;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
    PORTB=0xFF;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTD=0x00;
    DDRD=0xFF;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 31.250 kHz
    // Mode: Fast PWM top=00FFh
    // OC1A output: Non-Inv.
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xA1;
    TCCR1B=0x0C;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // LCD module initialization
    lcd_init(16);
    
    while (1)
    { 
      
      lcd_gotoxy(5,0);
      lcd_putsf("5 - 1");
      lcd_gotoxy(4,1);
      lcd_putsf("Helli 2");
      delay_ms(1000);
      lcd_clear();
      lcd_gotoxy(0,0);
     
     
    
      lcd_putsf("Shirazi Askarian");
     lcd_putsf("Kazemi Farhadian")   ;
      delay_ms(2000);
      lcd_clear();
     str: 
     if(PINB.7==0)       
      {lcd_clear();       
      while(1)
      {
      if(PINB.7==1)
      goto str;
      if((PINA.5==0&&PINA.4==0&&PINB.0==0)||(PINA.5==0&&PINA.4==0&&PINB.0==1)||(PINA.5==0&&PINB.0==0&&PINA.4==1))
      {
      if((PINB.5==1&&PINB.6==1)&&bk==0)
      {lcd_gotoxy(3,1);
      lcd_putsf("S ");
      while(1)
      {motor(200,200);
      if(PINB.4==1&&PINA.0==1)
      goto bbin;
      }
      bbin:
      bk=1;
      }
      if((PINB.5==1||PINB.6==1||(PINB.5==1&&PINB.6==1))&&bk==1)
      bk=1;
      //////////////////\\\\\\\\\\\\\\\\\\\\\
      if((PINB.5==0&&PINB.6==0)&&bk==1)
      {lcd_gotoxy(3,1);
      lcd_putsf("S ");
      while(1)
      {motor(200,200); 
      if(PINB.4==0&&PINA.0==0)
      goto bin;
      z++;
      if(z>10000)
      goto bin;
      }
      bin:
      z=0;
      bk=0;
      }
      //////////////////\\\\\\\\\\\\\\\\\\\\\\
      if((PINB.5==0||PINB.6==0||(PINB.5==0&&PINB.6==0))&&bk==0)
      bk=0;
      }
      lcd_gotoxy(14,0);
      if(bk==1)lcd_putsf("B");
      if(bk==0)lcd_putsf("W");
      /*if((PINA.5+PINA.3+PINA.4+PINB.0+PINB.1<3&&bk==0)||bk==1)
      {  
      if((PINB.5==1&&PINB.6==1)&&bk==0)
      {l++;
      z=0;
      }
      if(((PINB.5==0&&PINB.6==0)||(PINB.5==0)||(PINB.6==0))&&bk==1)
      {z++;
      l=0;
      }
      if(l>25)
      bk=1;
      if(z>5)
      bk=0; 
      }
      
      if(bk==1)lcd_putsf("(B)");
      if(bk==0)lcd_putsf("(W)");*/
      /////////////////\\\\\\\\\\\\\\\\\\\\\
      if(PINA.7==1&&j==1)
      {
      h++;
      k=0;
      }
      if(PINA.7==0)
      h=0;     
      if(PINA.6==1&&j==1)
      {
      k++;
      h=0;
      }
      if(PINA.6==0)
      k=0;  
      lcd_gotoxy(14,1); 
      if(h>25)
      {
      lcd_putsf("L");
      j=0.50;
      }
      if(k>10)
      {
      lcd_putsf("H");
      j=1.275;
      }
      if(k<10&&h<25)
      {lcd_gotoxy(13,1);
      lcd_putsf("M");
      j=1.0;
      }
      /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
      lcd_gotoxy(0,0);
      lcd_putchar(PINB.4+'0');
      lcd_putchar(PINB.3+'0');
      lcd_putchar(PINB.2+'0');
      lcd_putchar(PINB.1+'0');
      lcd_putchar(PINB.0+'0');
      lcd_putchar(PINA.5+'0');
      lcd_putchar(PINA.4+'0');
      lcd_putchar(PINA.3+'0');
      lcd_putchar(PINA.2+'0');
      lcd_putchar(PINA.1+'0');
      lcd_putchar(PINA.0+'0'); 
      lcd_gotoxy(11,1);
      lcd_putchar(PINB.5+'0');
      lcd_putchar(PINB.6+'0');
      ///////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\
      lcd_gotoxy(3,1);
     if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>=3&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0<=1&&!bk)||(PINA.5==1&&PINB.4==1&&!bk))
      {
       motor(M2[0],M1[0]); 
       lcd_putsf("R60");
       delay_ms(200);
       continue;
       
      }
      if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0<=1&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0>=3&&!bk)||(PINA.5==1&&PINA.0==1&&!bk))
      {
       motor(M1[0],M2[0]); 
       lcd_putsf("L60 ");
       delay_ms(200);
       continue;
      }
      if((PINA.5==1&&!bk)||(PINA.5==0&&bk))//Straight
      {
       motor(200,200); 
       lcd_putsf("S ");
       delay_ms(10);
       continue;
      }
      if((PINB.4==1&&!bk)||(PINB.4==0&&bk))//Left 5
      {
       motor(M1[0],M2[0]);
       lcd_putsf("L5 ");
       continue;
      }
      if((PINA.0==1&&!bk)||(PINA.0==0&&bk))//Right 5
      {
       motor(M2[0],M1[0]);
       lcd_putsf("R5 ");
       continue;
      }
      if((PINB.3==1&&!bk)||(PINB.3==0&&bk))//Left 4
      {
       motor(M1[1],M2[1]);
       lcd_putsf("L4 ");
       continue;
      }
      if((PINA.1==1&&!bk)||(PINA.1==0&&bk))//Right 4
      {
       motor(M2[1],M1[1]);
       lcd_putsf("R4 ");
       continue;
      } 
      if((PINB.2==1&&!bk)||(PINB.2==0&&bk))//Left 3
      {
       motor(M1[2],M2[2]);
       lcd_putsf("L3 ");
       continue;
      }
      if((PINA.2==1&&!bk)||(PINA.2==0&&bk))//Right 3
      {
       motor(M2[2],M1[2]);
       lcd_putsf("R3 ");
       continue;
      }
      if((PINB.1==1&&!bk)||(PINB.1==0&&bk))//Left 2
      {
       motor(M1[3],M2[3]);
       lcd_putsf("L2 ");
       continue;
      }
      if((PINA.3==1&&!bk)||(PINA.3==0&&bk))//Right 2
      {
       motor(M2[3],M1[3]);
       lcd_putsf("R2 ");
       continue;
      }
      if((PINB.0==1&&!bk)||(PINB.0==0&&bk))//Left 1
      {
       motor(M1[4],M2[4]);
       lcd_putsf("L1 ");
       continue;
      }
      if((PINA.4==1&&!bk)||(PINA.4==0&&bk))//Right 1
      {
       motor(M2[4],M1[4]);
       lcd_putsf("R1 ");
       continue;
      }
      }
      }
      if(PINB.7==1)
      {lcd_gotoxy(3,0);
      lcd_putsf("!NO LCD!");
      while(1)
      {
      if(PINB.7==0)
      goto str;
      if((PINA.5==0&&PINA.4==0&&PINB.0==0)||(PINA.5==0&&PINA.4==0&&PINB.0==1)||(PINA.5==0&&PINB.0==0&&PINA.4==1))
      {
      if((PINB.5==1&&PINB.6==1)&&bk==0)
      {
      while(1)
      {motor(200,200);
      if(PINB.4==1&&PINA.0==1)
      goto dbin;
      }
      dbin:
      bk=1;
      }
      if((PINB.5==1||PINB.6==1||(PINB.5==1&&PINB.6==1))&&bk==1)
      bk=1;
      //////////////////\\\\\\\\\\\\\\\\\\\\\
      if((PINB.5==0&&PINB.6==0)&&bk==1)
      {
      while(1)
      {motor(200,200); 
      if(PINB.4==0&&PINA.0==0)
      goto bine;
      z++;
      if(z>10000)
      goto bin;
      }
      bine:
      z=0;
      bk=0;
      }
      //////////////////\\\\\\\\\\\\\\\\\\\\\\
      if((PINB.5==0||PINB.6==0||(PINB.5==0&&PINB.6==0))&&bk==0)
      bk=0;
      }
      //lcd_gotoxy(14,0);
      /*if(bk==1)lcd_putsf("B");
      if(bk==0)lcd_putsf("W");*/
      /*if((PINA.5+PINA.3+PINA.4+PINB.0+PINB.1<3&&bk==0)||bk==1)
      {  
      if((PINB.5==1&&PINB.6==1)&&bk==0)
      {l++;
      z=0;
      }
      if(((PINB.5==0&&PINB.6==0)||(PINB.5==0)||(PINB.6==0))&&bk==1)
      {z++;
      l=0;
      }
      if(l>25)
      bk=1;
      if(z>5)
      bk=0; 
      }
      
      if(bk==1)lcd_putsf("(B)");
      if(bk==0)lcd_putsf("(W)");*/
      /////////////////\\\\\\\\\\\\\\\\\\\\\
      if(PINA.7==1&&j==1)
      {
      h++;
      k=0;
      }
      if(PINA.7==0)
      h=0;     
      if(PINA.6==1&&j==1)
      {
      k++;
      h=0;
      }
      if(PINA.6==0)
      k=0;  
      //lcd_gotoxy(14,1); 
      if(h>25)
      {
      //lcd_putsf("L");
      j=0.50;
      }
      if(k>10)
      {
      //lcd_putsf("H");
      j=1.275;
      }
      if(k<10&&h<25)
      {//lcd_gotoxy(13,1);
      //lcd_putsf("M");
      j=1.0;
      }
      /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
      //lcd_gotoxy(0,0);
      lcd_putchar(PINB.4+'0');
      lcd_putchar(PINB.3+'0');
      lcd_putchar(PINB.2+'0');
      lcd_putchar(PINB.1+'0');
      lcd_putchar(PINB.0+'0');
      lcd_putchar(PINA.5+'0');
      lcd_putchar(PINA.4+'0');
      lcd_putchar(PINA.3+'0');
      lcd_putchar(PINA.2+'0');
      lcd_putchar(PINA.1+'0');
      lcd_putchar(PINA.0+'0'); 
      lcd_gotoxy(11,1);
      lcd_putchar(PINB.5+'0');
      lcd_putchar(PINB.6+'0');
      ///////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\
      //lcd_gotoxy(3,1);
     if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>=3&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0<=1&&!bk)||(PINA.5==1&&PINB.4==1&&!bk))
      {
       motor(M2[0],M1[0]); 
       //lcd_putsf("R60");
       delay_ms(200);
       continue;
       
      }
      if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0<=1&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0>=3&&!bk)||(PINA.5==1&&PINA.0==1&&!bk))
      {
       motor(M1[0],M2[0]); 
       //lcd_putsf("L60 ");
       delay_ms(200);
       continue;
      }
      if((PINA.5==1&&!bk)||(PINA.5==0&&bk))//Straight
      {
       motor(200,200); 
       //lcd_putsf("S ");
       delay_ms(10);
       continue;
      }
      if((PINB.4==1&&!bk)||(PINB.4==0&&bk))//Left 5
      {
       motor(M1[0],M2[0]);
       //lcd_putsf("L5 ");
       continue;
      }
      if((PINA.0==1&&!bk)||(PINA.0==0&&bk))//Right 5
      {
       motor(M2[0],M1[0]);
       //lcd_putsf("R5 ");
       continue;
      }
      if((PINB.3==1&&!bk)||(PINB.3==0&&bk))//Left 4
      {
       motor(M1[1],M2[1]);
       //lcd_putsf("L4 ");
       continue;
      }
      if((PINA.1==1&&!bk)||(PINA.1==0&&bk))//Right 4
      {
       motor(M2[1],M1[1]);
       //lcd_putsf("R4 ");
       continue;
      } 
      if((PINB.2==1&&!bk)||(PINB.2==0&&bk))//Left 3
      {
       motor(M1[2],M2[2]);
       //lcd_putsf("L3 ");
       continue;
      }
      if((PINA.2==1&&!bk)||(PINA.2==0&&bk))//Right 3
      {
       motor(M2[2],M1[2]);
       //lcd_putsf("R3 ");
       continue;
      }
      if((PINB.1==1&&!bk)||(PINB.1==0&&bk))//Left 2
      {
       motor(M1[3],M2[3]);
       //lcd_putsf("L2 ");
       continue;
      }
      if((PINA.3==1&&!bk)||(PINA.3==0&&bk))//Right 2
      {
       motor(M2[3],M1[3]);
       //lcd_putsf("R2 ");
       continue;
      }
      if((PINB.0==1&&!bk)||(PINB.0==0&&bk))//Left 1
      {
       motor(M1[4],M2[4]);
       //lcd_putsf("L1 ");
       continue;
      }
      if((PINA.4==1&&!bk)||(PINA.4==0&&bk))//Right 1
      {
       motor(M2[4],M1[4]);
       //lcd_putsf("R1 ");
       continue;
      }
      }
      }
    };
    }
    The truth is not true!!!! the Truth is your own if U think Its TRUTH and The TRUTH is written in blood because its Ur own & Ur dream is the Truth if U see A thing if U feel A thing U build it like a building(!!!) and there is no thing.

    دیدگاه

    لطفا صبر کنید...
    X