Menu
CoddyTech

Due LED, due velocità

Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 4 di 18.

Con delay(), far lampeggiare due LED a velocità diverse è un rompicapo: ogni attesa blocca l'altro LED. Con millis() è facile, perché non si aspetta mai.

Assegna a ogni attività le proprie variabili: il proprio ultimo orario e il proprio stato. Poi assegna a ogni attività il proprio if in loop(). A ogni ciclo, ciascuna attività controlla il proprio orologio e agisce solo quando è arrivato il momento:

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

void loop() {
  unsigned long now = millis();
  if (now - redPrevious >= 500) {
    redPrevious = now;
    // cambia lo stato del LED rosso
  }
  if (now - greenPrevious >= 200) {
    greenPrevious = now;
    // cambia lo stato del LED verde
  }
}

Le due attività non si intralciano mai. Puoi aggiungerne una terza e una quarta allo stesso modo: un insieme di variabili e un if ciascuna.

Non condividere mai una sola variabile dell'ultimo orario tra due attività. L'attività più veloce la reimposta così spesso che quella più lenta non raggiunge mai il proprio intervallo.

challenge icon

Sfida

Facile

Il LED rosso sul pin 13 si accende e si spegne già ogni 500 ms. Fai in modo che il LED verde sul pin 12 si accenda e si spenga ogni 200 ms contemporaneamente:

  • aggiungi le variabili greenPrevious e greenState
  • aggiungi un secondo if in loop() per il LED verde

Premi Esegui e osserva entrambi lampeggiare, poi Verifica.

Provalo tu

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

unsigned long redPrevious = 0;
int redState = LOW;

// aggiungi qui le due variabili del LED verde

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

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

  // il LED rosso cambia stato ogni 500 ms
  if (now - redPrevious >= 500) {
    redPrevious = now;
    if (redState == LOW) {
      redState = HIGH;
    } else {
      redState = LOW;
    }
    digitalWrite(redLed, redState);
  }

  // fai cambiare stato al LED verde ogni 200 ms qui
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Temporizzazione senza delay

Esercitati da solo: Playground Arduino