Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Olá a todos, Isso acontece com todos nós. Você constrói um projeto, conecta com entusiasmo todos os sensores e, de repente, o Arduino trava e nenhuma entrada é processada.
“O que está acontecendo?”, Você perguntará e começará a vasculhar seu código, apenas para perceber que ficou preso em um loop infinito. Graças a Deus, o Arduino estava em sua bancada e não em um local remoto.
Hoje, veremos como podemos usar o temporizador de watchdog no Arduino para evitar que isso aconteça.
Etapa 1: O que é este temporizador de watchdog?
O cronômetro de watchdog do Arduino, como o nome indica, é um cronômetro que funciona separadamente da CPU principal da placa. Esse cronômetro pode ser usado para verificar periodicamente o estado da placa e, em circunstâncias em que a placa travou em um loop de software ou devido a uma falha de hardware, o cronômetro de watchdog pode redefinir o Arduino e fazer com que ele reinicie.
Por padrão, quando não está em uso, este temporizador é desabilitado em todos os projetos e apenas quando o habilitamos, precisamos ter certeza de dizer a ele periodicamente para não reinicializar nossa placa se ela ainda estiver operando conforme o esperado.
Para poder usar o cronômetro de watchdog, primeiro precisamos incluir o arquivo avr / wdt.h em nosso esboço do Arduino. Esta é a biblioteca padrão que contém as ações de watchdog.
Etapa 2: Como habilitar o temporizador do Watchdog?
Para habilitar o temporizador, usamos a função “wdt_enable” onde precisamos passar o intervalo limite no qual a placa será reinicializada. Dependendo do nosso caso de uso, isso pode ir de 15 milissegundos a até 8 segundos em configurações predefinidas que estão contidas na biblioteca watchdog.
LIMIAR - NOME DA CONSTANTE
15 ms WDTO_15MS 30 ms WDTO_30MS 60 ms WDTO_60MS 120 ms WDTO_120MS 250 ms WDTO_250MS 500 ms WDTO_500MS 1s WDTO_1S 2s WDTO_2S 4s WDTO_4S 8s WDTO_8S
Etapa 3: mantenha seu programa funcionando
Agora, com o cronômetro habilitado, para evitar que ele reinicie nosso Arduino, precisamos chamar periodicamente a função “wdt_reset” para reiniciar o cronômetro de watchdog antes que o intervalo de limite expire.
Ao escolher um intervalo de reinicialização, é crucial levar em consideração qualquer operação demorada, como ler ou enviar dados ou conectar-se a sensores externos. O limite de reinicialização deve ser pelo menos uma vez e meia maior do que esses tempos para evitar reinicializações acidentais.
Etapa 4: Exemplo de uso
No programa de exemplo que você pode baixar aqui, primeiro configuramos o cronômetro de watchdog com um intervalo de reinicialização de 4 segundos. Então, para saber que estamos na função de configuração, piscamos um LED 3 vezes rapidamente e, em seguida, no loop principal, primeiro zeramos o cronômetro, acendemos um LED com intervalos progressivamente maiores e depois o desligamos. O próximo ciclo zera o cronômetro novamente até que o tempo de acendimento seja superior a 4 segundos.
Quando isso acontece, o temporizador de watchdog zera a placa e o setup é executado novamente.
Etapa 5: problemas de cronômetro de watchdog
Um possível problema com o cronômetro de watchdog, dependendo do bootloader do seu Arduino é que se o valor do cronômetro de watchdog for muito baixo e o bootloader não zerar o cronômetro ao carregar um novo código, você pode acabar danificando sua placa Arduino de uma forma que ele sempre ficará travado na fase de inicialização. O bootloader tentará iniciar, mas o cronômetro continuará reiniciando a placa, nunca permitindo que ela inicie corretamente. Para evitar problemas como esse, sempre use intervalos de limite de 2 segundos ou mais.
Etapa 6: aproveite
Se você tiver um exemplo de onde usou o watchdog timer em um projeto real, deixe-me saber nos comentários, certifique-se de gostar do vídeo e não se esqueça de se inscrever.
Parabéns e obrigado por ler / assistir!