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?
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por