AJUDA - Como usar millis() ou threads no Lugar do delay()

Boa noite, preciso de ajuda para modificar o meu código, o sistema é simples e básico... Estou fazendo um contador, onde haverá uma esteira e 4 sensores que deverão ficar logo acima dos objetos, para isso estou usando o sensor de proximidade infravermelho de curto alcance, Sharp-gp2y0a41sk0f.

Fiz o sistema funcionar com apenas um sensor, até ai tudo bem, mas ao colocar mais sensores notei que não estava dando certo por causa da função delay() que estava usando, como é sabido, ele atrasa todo o sistema, atrasando também os demais sensores, como no código abaixo, preciso que esse atraso aconteça apenas no sensor em questão e os demais fiquem ativos.

Minha duvida é se devo usar os millis() ou threads, e como implementados em meu código.

Toda ajuda é bem vinda, visto que estou começando em Arduino.

Segue meu Código.


http://pastebin.com/zKvx7A8D

Exibições: 684

As respostas para este tópico estão encerradas.

Respostas a este tópico

Bom dia.

Existe uma biblioteca muito boa do Ivan Seidel no link chamada de ArduinoThread e ArduinoSensor. O Ivan também postou vídeos no youtube de como utiliza-las.

T+

Bom dia, agradeço sua resposta, estou vendo os vídeos do Ivan e sua biblioteca, realmente muito bons... vou tentar implementar em meu código...

Oi MF, bom dia,

eu recomendo o uso de Threads, apesar de ser possível com com millis().

Rui

Poisé, como são apenas 4 sensores acredito que os millis() irão dar conta, os Thrends eu não estou entendendo muito bem sua aplicação....

Obrigado por sua resposta RV.

Olá,

Este vídeo de simulação no Proteus foi feito para meu canal no YT usei as bibliotecas do Ivan já mencionadas pelo Gustavo.

Link https://www.youtube.com/watch?v=PtM35RhFtb8

Abs.

Boa tarde, estou fazendo as modificações em meu código, já utilizei o millis() e agora os threads, o sistema até esta funcionando conforme esperava... Porém o meu problema continua sendo o atraso que preciso dar em cada sensor, para que a mesma peça não seja contada mais que uma vez, o delay fazia isso para mim.

O que posso fazer para desativar ou apenas atrasar a porta por alguns milissegundos?

Toda ajuda é bem vinda...

Segue meu código...

http://pastebin.com/gisHMyz2

http://pastebin.com/gisHMyz2

Oi MF,

testa este code.

http://pastebin.com/4YBjqBHp

Procurei manter o máximo possível o seu code original.

Me de outra informação:

Qual a frequência que os objetos passam na frente dos sensores?

Rui

Mais a noite dou o feedback R.V. sobre sua alteração...

Mas os objetos irão passar direto, quase que a cada segundo...

Desde já fico muito grato....

Oi MF,

um segundo é uma eternidade para um MCU.

É importante ter ideia deste tempo mínimo, para trabalhar o "Time Sharing"  do thread.

Rui

Rui, estou usando a alteração no código que você fez, era isso que precisava, os sensores estão funcionando de forma separada.

Porém agora estou com mais alguns problema, hehe.... Como o tempo em que o objeto fica embaixo do sensor é muito importante, as vezes o mesmo objeto é contado duas vezes, visto que nem sempre os objetos são exatamente do mesmo tamanho...

Vejam o que preciso alterar em minha lógica... segue parte do código comentado.

http://pastebin.com/BPxwjzBu

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço