FVM Learning

Nosso maior compromisso é compartilhar conhecimentos, somos simples, mas não simplórios, astuto, mas não pacóvio, nos posicionamos empenhados em mostrar o caminho para desmistificação do opróbrio em legítima defesa do conhecimento compartilhado. Eng. Jemerson Marques!

domingo, 8 de dezembro de 2019

Piscando LEDs Independentes sem delay() utilizando Função millis() - Blink LEDs Without Delay


Olá a Todos!

Fazer LEDs piscar em alguns tipos de embarcados como os: Arduíno, os ESP8266, ou os ESP32, não são tarefas complexas de se fazer, e qualquer um com conhecimento básico consegue fazer.

Mas, o que precisamos entender é que, há um problema ao utilizamos a função delay(). Essa função básica para fazer um led Piscar, pausa o andamento do processamento de um microcontrolador, fazendo com que o tempo de delay mantenha o Microcontrolador tecnicamente parado, a espera do delay acabar.

No post de hoje, mostraremos como programar os: Arduíno, ESP8266, ESP32, para piscar 1, 2, 3, 4… ou quanto de LEDs você quiser colocar, sem a utilização da função delay().

Utilizaremos a função mills(), que diferente da função delay(), contará o tempo sem pausar as atividades e processamento do microcontrolador.

E através dessa básica noção é que poderemos não só fazer os LEDs piscarem, mas também executarmos atividades, como, por exemplo: piscar um LED, enquanto fazemos a leitura de algum sensor ou porta.
 
Podemos também pressionar um botão, enquanto o LED pisca, ou que outras atividades de leitura de sensores não sejam interrompidas.

Funcionamento da função Delay();

A função Delay(), pausa o programa por uma quantidade especificada de tempo (em milissegundos). Cada segundo equivale a 1000 milissegundos, e sua sintaxe é: delay(ms), cujo parâmetro ms é o número de milissegundos para pausar o programa, e não retorna nada. 

Funcionamento da função Millis();

A unção Millis(), retorna o número de milissegundos passados desde que o embarcado começou a executar o programa. Esse número irá sofrer overflow (chegar ao maior número possível e então voltar para zero), após aproximadamente 50 dias

Sua sintaxe é: time = millis(), não tendo nenhum parâmetro e, retorna o número de milissegundos passados desde que o programa iniciou (unsigned long).

Ao compararmos as funções Delay e a função Millis, podemos visualizar o modo de trabalho de cada um, e o porquê não devemos utilizar a função delay com projetos mais elaborados.

Não estamos falando de um pequeno código que sirva apenas para piscar um LED sem muito controle e leitura de sensores simultâneos, etc. 

Estamos falando de código que precisem fazer leituras simultâneas, piscar LEDs, variar um PWM, tendo que ficar lendo um botão para ver se foi pressionando ou não.

Isso é necessário realmente utilizar a função millis, pois com o delay fica impossível um código desses funcionar de forma estabilizada.

No nosso exemplo, utilizamos o NodeMCU ESP8266, mas a mesma Sketch servirá tanto para o NodeMCU como para o Arduíno, como sugerido na Figura 2 abaixo. 

A diferença em utilizar o NodeMCU e o Arduíno, é que o NodeMCU não é necessário a utilização de resistores limitadores de corrente em série com os LEDs, devido à saída do NodeMCU em nível alto ser de 3.3V. Essa tensão para alguns LEDs principalmente os brancos, funcionam sem problemas.

No Arduíno, a saída é de 5V, necessitando assim os resistores de limitação, e será também necessário setar a definição do número da GPIO do Arduíno pelo qual está conectado cada LED.
Fig. 2 - Esquemático de ligação dos Leds no Arduíno

O Sketch do Código

O Sketch completa do código está disposto logo abaixo para poder baixar, é bem simples de entender e tem uma eficácia ótima.

E por hoje é só, espero que tenham gostado!

Qualquer dúvida, digita nos comentários que logos estaremos respondendo.

Se inscreva no nosso BlogClique Aqui FVM Learning!

Forte abraço.

Deus vos Abençoe!
Shalom!

2 comentários: