Loop muito longo no NodeMCU V3 Esp8266 não da certo?

Bom/boa Dia/tarde/noite, pessoal, estou com um problema, eu criei um trajeto com varia codições no meu loop, mas não esta funcionando, usei o termo if, mas o programa ignora o if e executa o comando, ai tentei o while mas parece que demora de mais para o node concluir um comando, falei com uma pessoa mais experiente que eu e ela disse não não funciona um loop muito longo no node, ele disse que o melhor jeito de fazer o que eu quero é usar Maquina de estados, mas pesquisando me pareceu muito complexo, não achei basicamente nada sobre a implementação de maquina de estados em arduino, 

Conversa com o meu conhecido:

https://prnt.sc/hdq8wi

Meu loop:

http://prntscr.com/hdq9q0

https://prnt.sc/hdq9s0

https://prnt.sc/hdq9us

https://prnt.sc/hdq9wm

"Eu tentei usar condições em if, mas por alguma razão o if era ignorado e era executado sem a condição ser cumprida, já o while, usando um simples e sozinho funcionava, mas quando acrescentei mais de uma condição nada funcionava, achei que seria mais fácil de fazer isso, sou iniciante em programação, queria fazer um simples trajeto de condições. Estou montando um Boneco de pelúcia interativo para ensinar inglês para crianças de 3 a 5 anos, estou usando um NodeMCU V3 Esp8266, três botões(aqueles de fliperama) e um modulo Dfplayer mini"

Exibições: 194

Responder esta

Respostas a este tópico

Não conheço bem essa placa Dfplayer, não há outro jeito de aguardar a musica acabar senão com o delay ? Não parece uma forma polida de se tratar com periféricos.

O Delay() é um comando para ser usado por iniciantes ou em ultimo caso. Não digo que ele não comporta a situação mas sim que ele não é adequado pq para o processamento.

Buscaria uma mandeira de perguntar ao Dfplayer se a musica acabou. Se sim daria um .next ou coisa assim. Pela fuçada que dei agora não achei. 

De qualquer forma o loop() é uma rotina que deve rodar. Pode ser que outros processos fiquem parados pq vc amarra demais o loop(). A maquina de estado é uma saída. 

Seria algo como:

Chama uma variavel de estado.

Cria constantes que indiquem possiveis estados, como "não faz nada"=0, "parar"=1, "proxima"=2, etc.

Essas constantes podem ser criadas com o

#define nada 0

#define parar 1

Num bloco vc analisa condições e determina o estado. Pode ser com ifs() por ex.

Exemplo:

if (musica acabou) estado=proxima;

if (kra apertou stop) estado = parar;

Num outro bloco logo abaixo vc reage conforme o estado. 

switch(estado){ 

case proxima: Dfplayer.next(); break;

case parar: Dfplayer.stop(); break;

E assim vai.

Ref:

https://www.arduino.cc/reference/en/language/functions/time/delay/

Prova de que comporta:

https://www.arduino.cc/reference/pt/language/variables/data-types/u...

Obs: O texto é uma explicação, não foi observada a sitaxe de C, é para ser entendido, não compilado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço