Amigos por favor, estou tentando iniciar uma sequencia de acoes em loop quando aperto um botao e interrompe-la se eu apertar novamente o botao.

   A sequencia inicia ao apertar o botao, mas não é interrompida quando aperto novamente. Alguma idéia? Segue anexo trecho do código:

Exibições: 1389

Anexos

Responder esta

Respostas a este tópico

modifique para
start = !start;
Falta um espaço entre o = e o ! E sobra entre o ! e start

Olá!

Você criou um loop infinito. O loop while nunca vai ter fim porque o valor da variável start vai ser sempre true quando entrar nele.

Para corrigir, você vai ter que mudar o valor de start dentro do loop. Para isso leia o estado do pushbutton dentro do loop e mude o valor da variável start.

Se for só detectar ON/OFF, então seria isso.

Willian, boa noite.

Não, na verdade está quase certo.

Você se esqueceu de fazer a leitura do botão pelo pino dentro de loop..

Dentro do loop, antes do if, você deve ler a entrada com o comando digitalRead

botaoStartState = digitalRead.... ou analogRead... conforme for o componente que está usando

Boa tarde José,
Caramba!! Eu nem pensei nisso, só pensei no IF checando o estado do botao, mas é obvio que isso não aconteceria, preciso do digitalRead e depois o IF......
Vou testar logo mais a noite e posto o resultado....mas creio que vc resolveu o problema....
Te agradeço imensamente pela atenção.

Boa noite WA.

Recomendações:


1. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar


2. Remova seu sketch da área de texto do seu tópico;


3. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e

anexe o arquivo com o seu sketch.

RV

Boa noite Willian!

Faça como O Rui falou. Respeite as regras do fórum e anexe o código.

Mas você embolou todos os IFs, colocando um dentro do outro, sem fechar as chaves.

Assim não vai funcionar mesmo....

Lamento pelo código no corpo da postagem.

Quanto aos IF´s, foi um truque que li em algum lugar para checar se o botao foi realmente acionado e assim fazer um debouncing (bem primitivo);

Anexos

Willian, bom dia!

No sketch anterior tinha um while.

Poste o código inteiro com o setup e o loop para ficar mais fácil analisar todo o código.

Mais à noite, vou dar uma olhada

Jose boa noite, 

   Segue o codigo completo. Acrescentei um outro botao e configurei como STOP, mas essa não é a solução ideal.Até que funciona, mas só seu eu segurar o botao por mais de 2 segundos para "passar" pelos delays. Ocorre que este programa terá uma série de interrupções, muito mais do que está ali, entao eu teria que ficar segurando esse botao STOP por varios minutos ate passar por todos os delays que essa sequencia deve ter na versao final.

Anexos

Tentei colocar um segundo botão com a função STOP. Consegui interromper a sequencia mas preciso ficar com o botao apertado pelo tempo total da soma de todos os delays. Enfim, não gostei dos resultados.

Pensei em manter esse botao STOP mas fora do laço IF. Caso o botão seja acionado, interromperia a execução do laço. Creio que adicionando uma interrupção eu conseguiria fazer isso.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço