Menu
CoddyTech

Dois LEDs, duas velocidades

Parte da seção Temporização sem delay do Journey de Arduino da Coddy. Lição 4 de 18.

Com delay(), fazer dois LEDs piscarem em velocidades diferentes é um quebra-cabeça: cada espera atrasa o outro LED. Com millis(), é fácil, porque nada precisa esperar.

Dê a cada tarefa suas próprias variáveis: seu próprio horário anterior e seu próprio estado. Depois, dê a cada tarefa seu próprio if em loop(). A cada loop, cada tarefa verifica seu próprio relógio e age somente quando chega a hora:

unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;

void loop() {
  unsigned long now = millis();
  if (now - redPrevious >= 500) {
    redPrevious = now;
    // alterna o estado do LED vermelho
  }
  if (now - greenPrevious >= 200) {
    greenPrevious = now;
    // alterna o estado do LED verde
  }
}

As duas tarefas nunca atrapalham uma à outra. Você pode adicionar uma terceira e uma quarta da mesma forma: um conjunto de variáveis e um if para cada uma.

Nunca compartilhe uma única variável de horário anterior entre duas tarefas. A tarefa mais rápida a redefine com tanta frequência que a mais lenta nunca alcança seu intervalo.

challenge icon

Desafio

Fácil

O LED vermelho no pino 13 já alterna a cada 500 ms. Faça o LED verde no pino 12 alternar a cada 200 ms ao mesmo tempo:

  • adicione as variáveis greenPrevious e greenState
  • adicione um segundo if em loop() para o LED verde

Pressione Run e observe os dois piscarem; depois, Check.

Experimente você mesmo

const int redLed = 13;
const int greenLed = 12;

unsigned long redPrevious = 0;
int redState = LOW;

// adicione aqui as duas variáveis do LED verde

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
}

void loop() {
  unsigned long now = millis();

  // o LED vermelho muda de estado a cada 500 ms
  if (now - redPrevious >= 500) {
    redPrevious = now;
    if (redState == LOW) {
      redState = HIGH;
    } else {
      redState = LOW;
    }
    digitalWrite(redLed, redState);
  }

  // faça o LED verde mudar de estado a cada 200 ms aqui
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Temporização sem delay

Pratique por conta própria: Playground de Arduino