Olá! Estou com alguns problemas no meu projeto de Controle de motor de passo, utilizando meu celular.

Vejam minha programação: 


void setup()
{
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
Serial.begin(9600);
}
void loop()
{
char caracter;
caracter = Serial.read();
if (caracter == 'a')
{
digitalWrite(3,HIGH);
delay(100);
digitalWrite(3,LOW);
delay(100);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
delay(100);
}
else
if (caracter == 'b')
{
digitalWrite (3, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
}
delay (1000);
}

O problema é o seguinte: Quando mando o caractere 'a' o motor da apenas 2 passos. Eu queria criar um loop ou rotina para que ele girasse constantemente até que recebesse o caractere 'b', e quando recebesse o caractere 'a' novamente, voltasse a girar constantemente. Alguma dica ou conselho?

Exibições: 591

Responder esta

Respostas a este tópico

Nao conheço muito bem a programação para Arduíno, único atmel que conheço é o 8051, uso o compilador keyVision.

Mais antes de ler a serial, vc tem que verificar se a um novo dado, se não ter um novo dado, não execute essa linha (caracter = Serial.read();) também  declare o char como static char caracter; e retire o delay (1000); la do final.

Isso aih... No Arduino isso se faz com um 

if (Serial.available() > 0) caracter = Serial.read();

Senão alem dele ficar esperando vir um caracter por um tempo ele devolve um null.

 

Tentei todas as alternativas propostas mas infelizmente ainda estou com o mesmo problema.

Eu não acredito que tenha algo a ver com a comunicação serial. Eu acho que preciso criar um loop para aquela rotina de energização das bobinas do motor de passo, mas não sei exatamente como fazer isso.

Você já tem o loop, esta certo!. 

tente isso!

void loop()
{
static char caracter;
if (Serial.available() > 0) caracter = Serial.read();
if (caracter == 'a')

digitalWrite(3,HIGH);
delay(100);
digitalWrite(3,LOW);
delay(100);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
delay(100);
}
else
if (caracter == 'b')
{
digitalWrite (3, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
}
}

A proposta seria a variavel caracter continuar valendo 'a', não perder seu valor.

O que acontece provavelmente é que por o 'static char caracter;' estar dentro do loop ele está zerando a variavel.

Tire ele de dentro do loop.

Ou crie um loop à parte (while(1){..} logo depois de criar a variavel. )

Tenta lá...

PROBLEMA RESOLVIDO!

Muito obrigado, amigos garagistas! Criei um novo loop, esse (while(1){...}) e antes disso eu declarei a variável 'static char caracter'.

Muito obrigado mesmo.  

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço