Bom dia amigos!

Estou colocando um servo motor para funcionar de 2 formas diferentes de acordo com a função chamada, para entrar nas funções estou utilizando um botão se estiver solto fica na função de girar automático e piscar o led em blink e se estiver pressionado entra na função de movimentar manual através de um potenciometro e pisca o led em blink.

Antes de incrementar as funções para o motor eu testei para ver se a lógica do botão pressionado e solto estava legal, e funcionou bem, dentro das funções eu coloquei apenas para  ligar o led se pressionado e desligar se não estivesse pressionado e funcionou legal, mas quando modifiquei a estrutura das funçoes com os comandos para o servo começou a dar uns probleminhas, o botão tem hora que funciona e hora que não funciona, quando funciona e entra na função para mover o servo os movimentos do servo não estão sincronizados com o movimento do potenciometro. 

lab.ino

Exibições: 706

Responder esta

Respostas a este tópico

Olá Argel!

Isso parece problema mesmo de bounce do botão. Vi que você colocou um delay() para evitar o bounce, mas, muitas vezes não funciona dessa forma.

Algumas perguntas:

- Você colocou um resistor PULLUP junto ao botão? Outra forma é fazer via software: pinMode(botao,INPUT_PULLUP);

- Esse botão é um push button? No seu caso, não seria melhor usar um botão com trava, ou seja, quando pressiona ele trava pressionado?

Argel, se você quer executar uma função enquanto o botão estiver pressionado, tenta modificar esse trecho de código:

if(estadoBotao == 1)

{

delay(20);

while (digitalRead(botao) == HIGH) {apertado();}

}

Testa aí. Ele deve executar enquanto o botão estiver pressionado...

Obs: Eu acho que você inverteu os comentários das funções apertado() e solto()

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço