/**************************************************************************************************************/ /* kod do Linefollowera PRIMUS*/ /* Atmega8*/ #include #include //silnik prawy #define MP1_DIR DDRD #define MP1_PORT PORTD #define MP1 (1 << PD7) #define MP2_DIR DDRD #define MP2_PORT PORTD #define MP2 (1 << PD2) #define MPP_DIR DDRB #define MPP_PORT PORTB #define MPP (1 << PB2) //silnik lewy #define ML1_DIR DDRD #define ML1_PORT PORTD #define ML1 (1 << PD1) #define ML2_DIR DDRD #define ML2_PORT PORTD #define ML2 (1 << PD0) #define MLP_DIR DDRB #define MLP_PORT PORTB #define MLP (1 << PB1) #define prog 180 int Init_ADC() { ADMUX|=(_BV(ADLAR) | _BV(REFS0) | _BV(REFS1)) ; /*wlaczenie i wybranie wewn odnośnika 2,56V */ ADCSRA|=(_BV(ADEN) | _BV(ADPS2) | _BV(ADPS1)) ; ADCSRA&=~(_BV(ADSC)|_BV(ADIF) |(1<<5)|_BV(ADIE)|_BV(ADPS1)); return 0; } int Read_ADC(int nr) { ADMUX = nr; ADMUX|=(_BV(ADLAR) | _BV(REFS0)) ; ADCSRA|=_BV(ADSC); while(!((ADCSRA&_BV(ADIF))>>ADIF)); return ADCH; } /*********************** kierunki silników *****************************************/ int prawy(int kier,int moc) /* prawy silnik*/ { if(kier == 1) { MP1_PORT |= MP1; MP2_PORT &= ~MP2; } if(kier == -1) { MP1_PORT &= ~MP1; /* MP1= (1<prog to jest nad czarną linią*/ /*wszystkie czujniki widzą linie*/ if(LS >prog && L>prog && S>prog && P>prog && PS>prog ) { lewy(0,100); prawy(0,100); } /* zgubienie trasy*/ if(LS prog && S prog && PSprog && P < prog && PS prog && S>prog && P < prog && PSprog && P > prog && PSprog && L < prog && Sprog) { lewy(1,100); prawy(-1,100); } /*widzi LewySkrajny i Lewy*/ if(LS>prog && L > prog && S prog && PS>prog) { lewy(0,100); prawy(1,100); } /* widzi Środkowy,Lewy ,LewySkrajny*/ if(LS>prog && L>prog && S>prog && Pprog && P>prog && PS>prog ) { lewy(1,100); prawy(-1,100); } /*widzą 4 czujniki ( PS,P,S,L)*/ if(LSprog && P>prog && PS>prog ) { lewy(1,100); prawy(-1,100); } /*widzą 4 czujniki (LS,L,S,P)*/ if(LSprog && P>prog && PS>prog ) { lewy(-1,100); prawy(1,100); } } }