quarta-feira, 25 de julho de 2012

Comando While para sincronização de motores

Após sincronizar os motores surgiu um novo problema: os motores tem que girar por um tempo invertidos e depois retornar ao sincronismo original. Ou seja, após girar o robô, o robô deve seguir em frente novamente.
Para tanto, consultando a apostila de Linguagem Arduíno, do site Eaduino (www.eaduino.com.br), encontrei  o comando while. Segue abaixo trecho da apostila sobre o assunto:
"... 5.4 while
while( <expressão> ){
// declarações
}
A estrutura while repete as declarações enquanto a expressão resultar e um valor verdadeiro, ou seja, esta estrutura só termina quando a expressão se tornar falsa.
Exemplo
var = 0;
while(var < 200){
var++;
Serial.println( var );
}..."

A partir destas informações, construímos o código abaixo:

/*Uso do While em motores de passo */

//pinos de saída digital
//passo direito
int passo1 = 5;
int passo2 = 6;
int passo3 = 7;
int passo4 = 8;
//passo esquerdo
int passo5 = 9;
int passo6 = 10;
int passo7 = 11;
int passo8 = 12;
//tempo de passo
int passo = 100;
//tempo para girar 90°
int giro = 0;
// ————————————————————————— Setup
void setup() {
// Seleciona motores
//motor direito
pinMode(passo1, OUTPUT);
pinMode(passo2, OUTPUT);
pinMode(passo3, OUTPUT);
pinMode(passo4, OUTPUT);
//motor esquerdo
pinMode(passo5, OUTPUT);
pinMode(passo6, OUTPUT);
pinMode(passo7, OUTPUT);
pinMode(passo8, OUTPUT);

}
// ————————————————————————— Loop


void loop () {
//giro de 90°
while (giro<5){
digitalWrite (passo1, HIGH);
digitalWrite (passo8, HIGH);
delay (passo);
digitalWrite (passo1, LOW);
digitalWrite (passo8, LOW);
digitalWrite (passo2, HIGH);
digitalWrite (passo7, HIGH);
delay (passo);
digitalWrite (passo2, LOW);
digitalWrite (passo7, LOW);
digitalWrite (passo3, HIGH);
digitalWrite (passo6, HIGH);
delay (passo);
digitalWrite (passo3, LOW);
digitalWrite (passo6, LOW);
digitalWrite (passo4, HIGH);
digitalWrite (passo5, HIGH);
delay (passo);
digitalWrite (passo4, LOW);
digitalWrite (passo5, LOW);
delay (passo);
giro++;
}
//em frente
digitalWrite (passo1, HIGH);
digitalWrite (passo5, HIGH);
delay (passo);
digitalWrite (passo1, LOW);
digitalWrite (passo5, LOW);
digitalWrite (passo2, HIGH);
digitalWrite (passo6, HIGH);
delay (passo);
digitalWrite (passo2, LOW);
digitalWrite (passo6, LOW);
digitalWrite (passo3, HIGH);
digitalWrite (passo7, HIGH);
delay (passo);
digitalWrite (passo3, LOW);
digitalWrite (passo7, LOW);
digitalWrite (passo4, HIGH);
digitalWrite (passo8, HIGH);
delay (passo);
digitalWrite (passo4, LOW);
digitalWrite (passo8, LOW);

}


O resultado foi muito positivo, conforme pode ser visto no vídeo abaixo:


Nenhum comentário:

Postar um comentário