roboforum.ruТехнический форум по робототехнике. |
|
|
#include<mega8.h>
#include <delay.h>
#include <stdlib.h>
int direction; //направление
void GO(int b){ //процедура движения в случайно выбранном направлении
if(b == 1){
direction = 0;
direction = (rand())%140;
if ((direction > 0) && (direction < 20)){ //вперёд
PORTB.5=1;
PORTB.4=0;
} else
if ((direction > 21) && (direction < 40)){ //назад
PORTB.5=0;
PORTB.4=1;
} else
if ((direction > 41) && (direction < 60)){ //вперед и влево
PORTB.5=1;
PORTB.4=0;
PORTB.0=1;
PORTB.3=0;
} else
if ((direction > 61) && (direction < 80)){ //вперед и вправо
PORTB.5=1;
PORTB.4=0;
PORTB.0=0;
PORTB.3=1;
} else
if ((direction > 81) && (direction < 100)){ //назад и влево
PORTB.5=0;
PORTB.4=1;
PORTB.0=1;
PORTB.3=0;
} else
if ((direction > 101) && (direction < 120)){ // назад и вправо
PORTB.5=1;
PORTB.4=0;
PORTB.0=0;
PORTB.3=1;
} else
if ((direction > 121) && (direction < 140)){ //стоп
PORTB.5=0;
PORTB.4=0;
}
} else PORTB.5=0;
PORTB.4=0;
}
void PWM(int a){
if (a==1) {
OCR1AH = 0x03; // PWM(PD5) = OCR1A / 10.24
OCR1AL = 0x20; // 0x03FF это число 1023
TCCR1A = 0x83; // 10100011
TCCR1B = 0x09; // 00001001 - start Timer*/
}
else { if (a==0) {
TCCR1A = 0x00;
TCCR1B = 0x00;
}}
}
void main(void)
{
DDRB=0xff;
PORTB=0x00;
DDRC=0xff;
PORTC=0x00;
while(1){
PWM(1);
GO(1);
PORTC.5=1;
delay_ms(500);
direction = 200;
GO(0);
PORTC.5=0;
delay_ms(500);
} }
Зацените видео: [youtube]NcKmbaAqu08[/youtube]
[url]http://www.youtube.com/watch?v=NcKmbaAqu08[/url]
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27