E ai, galera. Blz?

Sou novo na plataforma Arduíno e estou tentando fazer um teste pra aprender um pouco sobre a função millis, no caso eu gostaria de montar um circuito bem simples, onde quando o  botão é apertado, dispara um cronômetro, e quando aperto o botão novamente, o cronômetro para, dai tenho um delay, e o programa está pronto para correr de novo ao apertar o botão. No caso, eu preciso do valor do espaço de tempo que correu entre o primeiro aperto e o último, pois este tempo eu preciso que apareça na minha Serial.print. Este trabalho é para um futuro trabalho de física. Se alguém puder mandar o código como ficaria, agradeço.

Vlws!!!!

Exibições: 919

Responder esta

Respostas a este tópico

Boa tarde LPCO,

veja se este link te ajuda.

https://descubrearduino.com/cronometro/

RV

Boa noite, muito boa essa aula do professor Flavio

https://www.youtube.com/watch?v=v41yoaLSGQs

bom dia Lucas.

        Fiz a implementação do seu Sistema usando uma "Máquina de Estados". Usando esta técnica sistemática, fica fácil tratar quaisquer elementos e eventos em um Sistema. Além disso é uma implementação sempre simples, uma vez que a técnica é sempre a mesma (independente da quantidade de estados).

        Aconselho que você veja um outro exemplo de uma implementação semelhante, neste link do Garagem:  Maquina JMelo

        O "Diagrama de Estados" para a implementação do seu Sistema, pode ser visto na figura a seguir (para "zoom" clique na figura ou abra em uma nova guia do seu navegador):

        Também fiz a implementação do mesmo Sistema no Proteus, de forma que vc pode conferir o funcionamento correto (já testei). Para tal,  liguei o Botão ao pino "5" do Arduino (mas vc pode ligar em qualquer pino que queira, alterando o "#define" no código). Veja o circuito resultante:

         Importante:  observe que coloquei um Capacitor em paralelo com o Botão. A função deste Capacitor é apenas reduzir o "bouncing" mecânico do Botão. Isto é bastante importante para seu Sistema, uma vez que são necessários acionamentos consecutivos a intervalos curtos, o que torna inconveniente usar "delay" para evitar o "bouncing". Um "anti-bouncing" muito eficiente, também pode ser feito no próprio código, mas optei fazer isso no Hardware (circuito) de forma a manter o código simples, e mantendo o foco na "Máquina de Estados" que controla o Sistema. O valor do Capacitor que usei é de 1uF (1 micro Farad), e este valor calculei baseado na faixa do "pullup" interno do Arduino (CPU ATmega328), além de considerar um Botão com um "bouncing" meio brabo. Caso seu Botão não apresente quase nenhum "bouncing", você pode diminuir o valor deste Capacitor, mas evite usar menos de 100nF (100 nano Farad). Da mesma forma, se seu botão tiver "bouncing" ainda pior, aumente o valor do Capacitor, evitando ser maior que 4,7uF (4,7 micro Farad). E claro, se usar um capacitor polarizado (seja de Tântalo ou de Alumínio) , atente para ligar o mesmo com a polaridade correta (o terminal negativo deve estar ligado ao GND do circuito).

      Nota final: no código, fiz o tratamento adequado para a reciclagem do "millis". Como o "millis" nada mais é do que um odômetro (em mili-segundos), ele recicla para zero, embora isto demore bastante (aproximadamente 50 dias após o Arduino ser ligado/resetado). Assim, caso você precise deixar seu Sistema de Cronometragem permanentemente alimentado, não precisará se preocupar com a reciclagem do "millis".

      O código do Arduino, o arquivo do Proteus (incluindo a biblioteca para o Arduino), e o "Diagrama de Estados" (formato Visio), estão no anexo logo no final deste post.

      Caso vc tenha alguma dúvida, post aqui que te auxiliamos.

      Abrçs,

      Elcids

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço