pugliasos newlogoDEF

Orario della segreteria: tutti i martedì, dalle ore 17 alle 19, su appuntamento.

A volte Arduino deve fare più cose contemporaneamente: in questi casi, non è opportuno usare delay() che mette in pausa il programma per un tempo indicato e nel frattempo non sarà registrato alcun segnale sia in entrata che in uscita.

Come esempio rieseguiamo l’esperienza del lampeggio di un LED, questa volta però senza l’uso del delay(). Il programma che segue accende un LED collegato al pin 13 e memorizza il momento di accensione, poi controlla continuamente se la differenza fra l’orario corrente e quello dell’ultima accensione (tempo trascorso dall’ultima variazione dello stato del LED) è maggiore o uguale all’intervallo di intermittenza: se lo è, attiva o disattiva il LED prendendo nota del nuovo orario.
In esso viene utilizzata la funzione millis(), un comando che restituisce in millisecondi il tempo trascorso da quando la scheda è stata alimentata o resettata.

#define pinLED 13
/* Per il tempo si usano variabili di tipo "unsigned long" poiché il valore da memorizzare potrebbe diventare troppo grande per un int */
/* la variabile seguente memorizzerà l'ultima volta che lo stato del LED è stato aggiornato*/
unsigned long inizioConteggio = 0;
const long intervalloIntermittenza = 1000; // in millisecondi

void setup () {
  pinMode(pinLED, OUTPUT);
}

void loop() {
   unsigned long commutazione = inizioConteggio + intervalloIntermittenza;
   /* aggiorna l'istante in cui dovrà avvenire la commutazione */

   while (millis() <= commutazione) { }
   /* non compie alcuna azione finché non raggiunge l'istante di commutazione*/

   digitalWrite(pinLED, !digitalRead(13));
   inizioConteggio = millis();
   /* aggiorna l'ora in cui è cambiato lo stato del LED per ripartire con il conto alla rovescia! */

}

Oppure con la funzione1 attendi()

int attendi (int intervallo) {
   static unsigned long inizioConteggio, commutazione;
   int ok = 0;
   commutazione = millis() - inizioConteggio;
     if ( commutazione >= intervallo) {
       inizioConteggio = millis();
     ok = 1;
     }
      return ok;
}

#define pinLED 13

void setup() {
   pinMode(pinLED, OUTPUT);
}

void loop() {
   if (attendi(1000)) {
     digitalWrite(pinLED, !digitalRead(13));
   }
}

 

 

 

 

 

Save
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Read more
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Accept
Decline