#define MOTOR_DE_ROTACAO 0 #define MOTOR_DE_TRANSLACAO 2 #define TEMPO_ENTRE_VELOC_MOT 0.4 int main() { int potencia; int i; off(0); off(2); while(1) { while(1) { sleep(0.4); if(start_button()) { sleep(0.2); break; } } /*numero de retas a serem realizadas na trajetoria (3 quadrados = 12 retas) i = 12; while(i>=1) { /*Aciona motor de translacao para andar 30 cm*/ aciona_motor(MOTOR_DE_TRANSLACAO,60); desliga_motor(MOTOR_DE_TRANSLACAO,60); /*gira roda dianteira 80º */ motor(MOTOR_DE_ROTACAO, 20); sleep(1.2); off(MOTOR_DE_ROTACAO); /*realiza rotacao*/ aciona_motor(MOTOR_DE_TRANSLACAO,60); sleep(0.1); desliga_motor(MOTOR_DE_TRANSLACAO,60); /*Faz a roda dianteira voltar para posicao inicial*/ motor(MOTOR_DE_ROTACAO, -20); sleep(0.5); off(MOTOR_DE_ROTACAO); i--; }//fim while i > 1 } } /* A funcao "aciona_motor" liga o motor representado por "nmotor" com uma potencia igual ao valor de "potencia". O acionamento do motor e' feito de modo gradual para evitar solavancos.*/ void aciona_motor(int n_motor,int potencia) { int i = 0; /*Aumenta gradualmente a potencia no motor*/ for(i = 5; i>=1; i--) { motor(n_motor,potencia/i); sleep(TEMPO_ENTRE_VELOC_MOT); } } /* A funcao "desliga_motor" desliga o motor cujo numero e' passado como parametro em "n_motor". Novamente, assim como no acionamento, o desligamento ocorre gradualmente*/ void desliga_motor(int n_motor,int potencia) { int i = 0; /*Diminui gradualmente a potencia no motor*/ for(i = 1; i<=3; i++) { motor(n_motor,potencia/i); sleep(TEMPO_ENTRE_VELOC_MOT); } /*Desliga o motor*/ off(n_motor); }