Você está na página 1de 3

/* Esse cdigo est sendo criado para um rob de sum.

Esse rob no poder sair da arena e dever tirar seu oponente da mesma. Cdigo feito a pedido do leitor Adelmo Souza Neste cdigo levo em considerao um sensor binrio que verifica a arena. E um sensor tambm binrio para verificao do oponente. As especificaes so as seguintes: 1 - liga o rob ele fica 5 segundos parado 2 - Sair a meia velocidade 3- Um sensor vai verificando se ele ainda est na arena 4 - Outro sensor vai tentando localizar o inimigo. 5 - Se ele chegar prximo de sair da rea ele deve parar e dar a r e depois mudar o sentido 6 - Continuar a meia velocidade 7 - Ao localizar o inimigo ele deve atingir a velocidade mxima para tentar derrubar da arena. */ //Esse valo depende das especificaes da ponte H byte meiaVelocidade = 64; //O mesmo que passar HIGH em digitalWrite() byte maximaVelocidade = 255; void setup() { pinMode(11, OUTPUT); //Motor direita pinMode(10, OUTPUT); //Motor direita pinMode(6, OUTPUT); //Motor esquerda pinMode(5, OUTPUT); //Motor esquerda pinMode(7, INPUT); //Sensor da arena (Usando sensor binrio) pinMode(8, INPUT); //Sensor do oponente (Usando sensor binrio) //Gasto 5 segundos (especificao 1) delay(5000); } void loop() { //Comeo por verificar a arena if(digitalRead(7) == LOW){ //No chegou nas bordas //Define uma direo randomica e durao arbitrria randomDirection(meiaVelocidade, 100); if(digitalRead(8) == HIGH){ frente(maximaVelocidade); delay(200); } else{ randomDirection(meiaVelocidade, 100); } } else{

//Chegou nas bordas re(meiaVelocidade); delay(200); randomDirection(meiaVelocidade, 100); } } /* Criando funes bsicas de deslocamento prevendo um rob que tenha a capacidade de girar no prprio eixo. */ //A funo parar() desliga ambos motores void parar(){ digitalWrite(11, LOW); digitalWrite(10, LOW); digitalWrite(6, LOW); digitalWrite(5, LOW); } // A funo frente() liga ambos motores para a frente void frente(byte velocidade){ analogWrite(11, velocidade); analogWrite(6, velocidade); analogWrite(5, 0); analogWrite(10, 0); } // A funo re() liga ambos motores para trs void re(byte velocidade){ analogWrite(11, 0); analogWrite(6, 0); analogWrite(5, velocidade); analogWrite(10, velocidade); } /* As funes direita() e esquerda() so baseadas no movimento de um bote de corredeiras. Para virar, quem est de um lado rema para frente e quem est do outro lado rema para trs. Lembre-se, s utilize esse tipo de cdigo se seu rob tiver uma montagem que permite rodar em seu prprio eixo! */ //Liga o motor da direita para frente e da esquerda para trs void direita(byte velocidade){ analogWrite(11, velocidade); analogWrite(10, 0); analogWrite(6, 0); analogWrite(5, velocidade); } //Liga o motor da esquerda para frente e da direita para trs void esquerda(byte velocidade){ analogWrite(11, 0); analogWrite(10, velocidade); analogWrite(6, velocidade); analogWrite(5, 0); }

void randomDirection(byte velocidade, int duracao){ //Essa tcnica usa o noise de um pino desplugado //para criar um random sempre diferente randomSeed(analogRead(0)); long randNumber = random(0, 30); if(randNumber <= 10){ esquerda(velocidade); delay(duracao); parar(); } if(randNumber > 10 && randNumber <= 20 ){ direita(velocidade); delay(duracao); parar(); } else{ frente(velocidade); delay(duracao); parar(); } }

Você também pode gostar