Código de Pesquisa

Lição 14/31-1: Arduino Millis (sem delay) e funções map | SunFounder Robojax

Lição 14/31-1: Arduino Millis (sem delay) e funções map | SunFounder Robojax

Este guia apresenta a função millis() do Arduino, uma ferramenta fundamental para projetos baseados em tempo que exigem execução de código não bloqueante. Ao contrário de delay(), que interrompe todo o programa, millis() rastreia o tempo decorrido desde que a placa foi iniciada, permitindo que seu Arduino execute múltiplas tarefas de forma eficaz. Você pode usar esta técnica para construir:

  • Piscadores de LED não bloqueantes que funcionam enquanto outro código é executado.
  • Eventos temporizados acionados por sensores ou botões, como uma luz que desliga 5 segundos após o pressionamento de um botão.
  • Sistemas simples de registro de dados que gravam valores de sensores em intervalos regulares.
  • Sistemas de interface de usuário que respondem a entradas sem congelar.
Carro Sunfounder montado

Entendendo a Função millis()

A função millis() é um comando integrado do Arduino que retorna o número de milissegundos desde que a placa Arduino começou a executar o programa atual. Ela começa em zero na inicialização e incrementa a cada milissegundo. Você pode chamar esta função em qualquer ponto do seu código para obter o valor atual de "tempo de atividade". Por exemplo, após 1 segundo, ela retorna 1000; após 5 segundos, retorna 5000. A principal vantagem é que ela não pausa seu código, então você pode verificar o tempo enquanto outras tarefas continuam em execução.

Por que Evitar delay()?

A função delay() é uma maneira simples de pausar um programa, mas é uma função bloqueante. Quando você chama delay(5000), o Arduino para de executar todo o outro código por 5 segundos, congelando quaisquer componentes conectados. Isso é problemático para projetos que precisam responder a entradas ou atualizar saídas continuamente. Usar millis() permite que você verifique se um determinado período de tempo passou sem interromper o resto do seu programa, tornando-a ideal para multitarefa.

Hardware Necessário

  • Placa Arduino (Uno, Mega, etc.)
  • Cabo USB para programação e alimentação

Guia de Conexões

Este exemplo não requer conexões externas. O Arduino só precisa estar conectado ao seu computador via USB para carregar o código e visualizar a saída do monitor serial.

Explicação do Código

Este primeiro exemplo é uma demonstração simples de como millis() funciona. O código inicializa o monitor serial e imprime o valor de millis() em um loop infinito.

void setup() {
  Serial.begin(9600);//inicializa o monitor serial
  Serial.println("Introdução ao millis");
  delay(2000);
}

void loop() {
  Serial.println(millis());
}

A função setup() inicia a comunicação serial a 9600 baud e imprime uma mensagem de boas-vindas. O delay(2000) aqui é apenas para demonstração, para mostrar que millis() começa a contar a partir do momento em que o programa é executado. A função loop() imprime continuamente o valor atual de millis(). Quando você abre o Monitor Serial, verá o tempo em milissegundos aumentando rapidamente. Isso ilustra que millis() é um contador que nunca para, fornecendo uma referência de tempo contínua para o seu programa.

Este é o bloco de construção fundamental. No vídeo, o instrutor demonstra como usar este valor para acionar ações após um período definido, como verificar se 5000 milissegundos (5 segundos) se passaram antes de executar um bloco de código específico. Isso é feito armazenando o valor atual de millis() em uma variável e depois comparando-o no loop principal.

Acionar um LED com um valor percentual usando a função map() é abordado em Lição 14/31-4: Exemplo 1 de map() na codificação Arduino.

Demonstração do Projeto ao Vivo

No vídeo, o instrutor carrega este código e abre o Monitor Serial. Você pode ver que a saída começa após o atraso inicial de 2 segundos, mostrando um valor próximo de 1999. Os números então aumentam rapidamente, demonstrando a contagem contínua de milissegundos. Esta visão ao vivo confirma que a função está funcionando e fornece uma compreensão visual clara de como o tempo é rastreado.

Projetos relacionados deste vídeo

Capítulos

  • [00:00] Introdução ao millis()
  • [01:19] O que é millis() e por que usá-lo
  • [03:06] Demonstração prática do millis()
  • [05:46] Usando millis() para acionar um evento temporizado
  • [08:29] Exemplo com um botão de pressão
  • [12:14] Exemplo avançado de temporização com botão de pressão
  • [17:20] Introdução à função map()
  • [19:47] Exemplo de código para map() com um LED
  • [22:41] Criando uma função map personalizada

Imagens

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
916-Lesson 14/31-1: Arduino coding millis() example 1
Idioma: C++
/*
Lesson 14/31: Arduino coding millis() example 1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
/*
 * Example-1 of using millis() with Arduino
 * Written by Ahmad Shamshiri on July 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
 */


void setup() {
  Serial.begin(9600);//initialize serial monitor
  Serial.println("Introduction to millis");
  delay(2000);
  


}

void loop() {

  Serial.println(millis());

}// loop end

Arquivos📁

Bibliotecas do Arduino (zip)