«

»

Lug 20

Stampa Articolo

Tutorial: Arduino interrupt

In questi giorni mi sono imbattuto in alcuni progetti che fanno uso di interrupt e incuriosito ho deciso di approfondire l’argomento, realizzando un tutorial semplice per comprendere meglio come funzionano in arduino.

interrupt

Non voglio dilungarmi su trattati di filosofia informatica in merito a cosa sia un interrupt, per conoscenza e punto di partenza riporto la descrizione pubblicata su wikipedia:

In informatica, un interrupt o interruzione è un segnale asincrono che indica il ‘bisogno di attenzione’ da parte di una periferica finalizzata ad una particolare richiesta di servizio, un evento sincrono che consente l’interruzione di un processo qualora si verifichino determinate condizioni (gestione dei processi) oppure più in generale una particolare richiesta al sistema operativo da parte di un processo in esecuzione.

sottolineo solo la prima riga di questa definizione:

un interrupt é un segnale asincrono che indica il “bisogno di attenzione”

lo so è un po’ psicologico-filosofica come affermazione ma rende bene l’idea, puoi immaginare un interrupt come qualcosa sempre in allerta da parte di arduino, quando su verifica la condizione per cui è stato impostato il programma si sgancia dall’esecuzione in corso e va ad eseguire una parte dello sketch che hai definito come legata all’evento di interrupt.

Cosa ti occorre

per questo esperimento ti occorre:

  • 1 Arduino uno
  • 1 led verde
  • 1 led rosso
  • 1 led giallo
  • 1 pulsante N/A
  • 1 resistenza da 470Ω
  • 1 resistenza da 1KΩ
  • 1 breadboard e relativi cavetti

lo schema

ecco lo schema elettrico:

schema elettrico

collega il pulsante al pin 2 che utilizzerai come interrupt, alla pressione del pulsante il valore letto sul pin 2 sarà HIGH in quanto la pressione dl pulsante mette in contatto il pin 2 di arduino con il polo positivo +5v.

in pratica

parti dallo sketch che ho scritto e ti sarà più chiaro come funziona un interrupt, premetto solo che in Arduino Uno i pin che puoi legare a interrupt sono il pin 2 ed il pin 3 rispettivamente come interrupt 0 ( il pin 2 ) e 1 ( il pin 3 ).

/**
 * Interrupt Test - Alfieri Mauro
 *
 * Web: www.mauroalfieri.it
 * Tw:  @mauroalfieri
 */

int ledRed=8;
int ledGreen=7;
int ledYellow=12;
int interrCount=0;

void setup()
{
  pinMode(ledRed, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(ledYellow, OUTPUT);     

  digitalWrite(ledRed, LOW);
  digitalWrite(ledGreen, LOW);
  digitalWrite(ledYellow, LOW);

  attachInterrupt(0, interruptGiallo, RISING);
}

void loop() {
  interrCount++;

  digitalWrite(ledRed, HIGH);
  digitalWrite(ledGreen, LOW);
  delay(300);
  digitalWrite(ledRed, LOW);
  digitalWrite(ledGreen, HIGH);
  delay(300);

  if ( interrCount == 10 )
  {
    interrCount = 0;
    digitalWrite(ledYellow, LOW);
  }

}

void interruptGiallo()
{
  digitalWrite(ledYellow, HIGH);
}

lo sketch ha lo scopo di far lampeggiare alternatamente i due led rosso

led rosso

e verde

led verde

con una frequenza di 300 millisecondi tra l’uno e l’altro, alla pressione del pulsante si accende il led giallo e resta accesso fino a quando la funzione loop() non ha eseguito i suoi 10 cicli.

leggendo linea per linea:

linea 08: definisci una variabile di tipo integer denominata ledRed il cui valore è quello del pin a cui è collegato il pin rosso;

linea 09: definisci una variabile simile alla precedente per il led verde;

linea 10: definisci una variabile simile alle precedenti per il led giallo;

linea 11: definisci una variabile che utilizzerai per contare i cicli di loop() dopo cui spegnere il led giallo;

linee 15-17: per ciascun pin legato ad un led imposta la modalità di OUTPUT;

linee 19-21: per ciascun led spegni il led corrispondente portando a LOW il valore digitale del pin corrispondente;

linea 23: è il cuore di questo esempio, il comando attachInterrupt( interrupt, function, mode ) i cui parametri indicano

INTERRUPT: il pin di interrupt ( 0 o 1 ) a cui attaccare la funzione specificata come secondo parametro

FUNCTION: la funzione da richiamare quando si verifica un evento sul pin specificato

MODE: la modalità in cui l’interrupt è attivato, per questo punto sul sito Arduino sono riportate le 4 modalità di funzionamento

  • LOW fa scattare l’evento di interrupt ogni volta che il pin ( 2 o 3 ) ha valore logico basso
  • CHANGE fa scattare l’evento di interrupt quando il pin cambia stato
  • RISING fa scattare l’evento di interrupt quando il pin passa da LOW a HIGH
  • FALLING fa scattare l’evento di interrupt quando il pin passa da HIGH a LOW

nel tuo caso potresti utilizzare sia CHANGE sia RISING io consiglio RISING in modo che il l’interrupt sia verificato solo alla pressione del pulsante e non anche quando rilasci il pulsante.

linea 27: subito dopo la definizione della funzione loop() incrementa il valore della variabile interrCount ad ogni loop();

linea 29-34: si occupano di accendere e spegnere in nodo alternato i due led rosso e verde, queste semplici righe servono anche a dimostrarti come funziona l’interrupt in quanto si alternano indipendentemente dalla funzione di interrupt o dal verificarsi dell’evento;

linea 36: verifica che il numero di cicli di loop eseguiti sia 10;

linea 38: reimposta a 0 il valore di interrCount, in modo che il conteggio possa ricominciare al loop() successivo;

linea 39: spegne il led giallo, indipendentemente se sia mai stato acceso o meno, ha il solo scopo di far continuare l’esperimento.

linea 44: definisci la funzione interruptGiallo che hai indicato, alla linea 23, come funzione da richiamare in caso di evento di interrupt rilevato.

linea 46: accendi il led giallo utilizzando il comando digitalWrite e portando a HIGH il valore del pin a cui è collegato il led.

Il video

ho realizzato anche un piccolo video della mia demo:

Buon divertimento !!!

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/tutorial-arduino-interrupt.html

52 comments

2 pings

Vai al modulo dei commenti

  1. Elia

    Bello e semplice, il tuo progetto può aiutare a spiegare meglio come vengono gestiti gli interrupt dai microcontrollori.
    Grazie della guida 🙂

    1. Mauro Alfieri

      Ciao Elia,
      sono contento ti sia stato utile, scrivo questi tutorial con quell’intento 🙂

      Mauro

  2. santo

    Ciao Mauro, da circa 6 mesi mi sono addentrato nel mondo di Arduino e oggi cercando come creare un interrupt ho scoperto il tuo sito. La domanda che ti pongo è se quando compiliamo un interrupt si possono inserire più istruzioni ed eseguire dei ritardi al suo interno. Ma grazie a te ho trovato la risposta, quindi ho cambiato il programma mettendo i ritardi fuori l’interrupt e avviandoli se un registro (all’interno dell’interupt )cambia da 0 a 1.
    Complimenti per il sito e grazie per tutto quello che metti a disposizione per noi.
    Santo

    1. Mauro Alfieri

      Ciao Santo,
      sono felice della tua riuscita.
      Se vorrai condividere qualcuno dei tuoi progetti con gli appassionati del Blog sarò lieto di pubblicarti un articolo.

      Mauro

  3. michele

    ciao Mauro io ho creato una pagina HTML per gestire l’apertura e la chiusura delle tapparelle di casa ora vorrei inserire uno stop e quindi avevo pensato all’interrupt, però io vorrei creare il pulsante sulla pagina HTML come stop in modo che quando eseguo il loop e per motivi vari voglio fermare le tapparelle a una certa altezza premo il pulsante e blocca tutto
    mi potresti aiutare grazie

    1. Mauro Alfieri

      Ciao Michele,
      l’interrupt, se hai letto bene l’articolo funziona bene con attuatori fisici, non con pulsanti virtuali su HTML

      Per fare quello e vuoi dovrai controllare durante l’apertura/chiusura della tapparella se arriva un comando di STOP dalla tua pagina HTML e fermare l’azione.

      Mauro

  4. michele

    ciao Mauro un altro problema che ho e che invio un comando da HTML ad arduino durante il loop non riesco ad inviare nessun altro comando finché il loop non termina.
    come posso fare per evitare ciò ???

    mi potresti fare un esempio ?

    grazie

    1. Mauro Alfieri

      Ciao Michele,
      probabilmente fai uso dei delay() ossia di tempi di attesa durante i quali Arduino non si aspetta alcun comando.
      Cerca nel blog come sostituirli con il comando millis(), necessita di alcune righe di codice, ma non interrompe il ciclo di attesa comandi.

      Il blog è pieno di esempi che puoi riadattare.

      Mauro

  5. Mauro C.

    In una void cui si accede da interrupt, lettura codici DTMF, ho notato che:
    – alcune righe comando non funzionano e li si blocca tutto
    – funzioni “if ( )” scritte su più righe con le graffe non funzionano, invece scriitte sulla stessa riga funzionano!
    – non riesco a lanciare un altro “void ()” per eseguire altri comandi.
    Non uso delay() nel ciclo o millis(), anche se per prova ho visto che da me invece millis() viene incrementato!

    Mi sembra strano: a te pare normale? magari in interrupt vengono alterati i normali cicli di lavoro del micro?
    Mai sperimentato questi problemi?
    Saluti
    Mauro C.

    1. Mauro Alfieri

      Ciao Mauro,
      francamente non ho mai rilevato i problemi che mi segnali, tuttavia mi sono sempre limitato nell’uso degli interrupt.
      Se mi capita un progetto che coinvolge le situazioni di cui mi scivi cercherò di approfondire i motivi che inducono arduino a causare questi blocchi.

      Oggi ho pubblicato un articolo sui Timer interni di arduino, prova a leggerlo e comprendere se chiarisce il rapporto tra Timer e Interrupt.

      Mauro

      1. Mauro C,

        Grazie per la cortese risposta!

        In effetti la cosa è strana: sposto una riga e funziona. Capitava a volte coi primissimi compilatori.
        Non so invece se da Interrupt è possibile chiamare una altra void/funzione: a me si blocca.
        Il programma è di 16Kb, quindi circa della metà del massimo possibile.
        Al momento ho ovviato portando fuori dall’ISR le variabili “volatile” e processandole nel loop principale, poi se avrò tempo vedrò.
        Ciao ancora e Grazissime!
        Mauro C.

  6. massimo

    Ciao Mauro,
    Complimenti x il sito, davvero ben fatto.
    Ti chiedo solo una delucidazione, dallo sketch che hai pubblicato mi sembra di capire che il led giallo non compie il “loop” completo ( 10 lampeggi ), bensì si spegne quando il contatore arriva a 10, variandone cosi la durata (dipende da quando premi il pulsante),
    A meno che l’interrupt non resetti tuttoresettando il contatore. Grazie Max

    1. Mauro Alfieri

      Ciao Davide,
      in parte ciò c’è scrivi é corretto, il led giallo resta acceso dalla pressione del pulsante fino al raggiungimento del valore 10 del contatore.
      In pratica il tempo in cui il led resta acceso dipende dal momento in cui premi il pulsante rispetto al lampeggio dei due led rosso e verde.
      Se al momento in cui premi il pulsante il contatore vale 5 resterà acceso per i 5 cicli successivi, supponendo che valda 3 resterà acceso per i 7 cicli successivi, ecc…

      Mauro

  7. Aldo

    Ciao Mauro,
    “BRAVISSSIMOOO” e grazie per tutto che ci stai dando.
    Sto usando Arduino 2009 e come estensione di IO il Tlc 5940 che usa i pin 13,11,10,9 e 3 per essere pilotato, volendo utilizzare gli interrupt sono limitato all’ uso del solo pin 2, visto che il 3 e’ utilizzato dal Tlc? Oppure ho altre alternative?
    In attesa grazie e ciao.

    1. Mauro Alfieri

      Ciao Aldo,
      purtroppo su Arduino Uno hai solo 2 pin da utilizzare come interrupt: il pin 2 ed il pin 3.
      Puoi collegare il TLC5940 ad un altro pin di Arduino libero che non possieda caratteristiche di interrupt.

      Mauro

  8. Andrea

    Scusami… So programmare ma ancora non ho messo le mani su arduino e mi sto documentando.

    Leggendo il codice, mi sembra che il led non stia necessariamente acceso 10 cicli perché quando arriva l’interrupt il contatore potrebbe stare a 9 e quindi essere azzerato al primo ciclo successivo…
    Giusto o mi sfugge qualcosa ? Non vedo modifiche al contatore nella routine di interrupt.

    Giusto per capire eh… Non voglio criticare la tua ottima spiegazione !! 😉

    1. Mauro Alfieri

      Ciao Andrea,
      corretto, i led rosso e verde lampeggiano indipendentemente da interrupt o altri eventi. L’interrupt accende il led giallo solo se rileva il cambio di stato del pin 2 e si spegne quando la variabile di count arriva a 10 indipendentemente dal momento di accensione.

      Mauro

  9. Luigi

    Ciao Mauro, ti faccio i compliment per il sito.
    Ho da proporti un quesito e viste le tue conoscenze sono certo che
    mi potrai aiutare.
    Premetto che non capisco niente di elettronica e non sono
    interessato alla materia.
    Mi diletto solo a programmare in Visual Basic, ma da un mese circa
    sto lavorando ad un piccolo progetto ed avrei bisogno
    di visualizzare su un display a segmenti o matrice di led un
    numero che viene restituito da una query eseguita su di un database.
    Ho quindi acquistato una scheda Arduino UNO e un display a matrice
    di led 8×8.
    Ho cominciato a fare dei piccoli esperimenti ma sono ancora ben
    lontano dal raggiungere il risultato sperato.
    Ho pensato di caricare su Arduino il software in C con la gestione
    dei numeri da 1 a 99, ma il mio problema è che non so
    come fare a scatenare l’evento, cioè se la query mi
    restituisce ad esempio il numero 26, come faccio a far scattare
    l’evento che mi ricrea il numero 26 sul display?
    Non posso usare una variabile contatore perchè il numero non è progressivo e non si incrementa sempre
    di 1.
    Non so se sono stato chiaro.
    Puoi illuminarmi?

    Ti ringrazio.
    Ciao.
    Luigi

    1. Mauro Alfieri

      Ciao Luigi,
      hai pensato alla comunicazione seriale?
      Da VB generi un flusso di dati seriali con il numero che vuoi visualizzare e lato Arduino, quando ricevi un input seriale, scrivi il numero che vuoi visualizzare sul display o altro dispositivo.

      Ti potrebbe essere utili leggere i miei ultimi articoli sulla comunicazione con XBee, se elimini la parte di trasmissione via XBee la comunicazione seriale è identica.

      Mauro

  10. fabio

    Ciao Mauro, sono nuovo del forum e visto che sei un esperto di Arduino dati gli innumerevole progetti tutorial e quant’altro hai pubblicato……volevo chiederti una mano alla realizzazione di uno sketch x arduino uno che credo x te risulterà banale ma x me che sono alle prime armi è difficile.
    In breve, con Arduino uno ho bisogno di comandare due led che si devono accendere contemporaneamente per 15min e poi spegnersi x altri 15 min il tutto per un tempo tot di due ore(15min accesi, 15 min spenti, 15 min accesi…).
    Grazie anticipatamente e a presto.
    Ciao Fabio

    1. Mauro Alfieri

      Ciao Fabio,
      il blog è nato per insegnare a tutti gli appassionati a programmare ecco il perché del corso on-line gratuito e dei tanti esperimenti pubblicati.
      La realizzazione di sketch su misura è per chi deve realizzare un proprio progetto e non è interessato ad imparare arduino.

      Se vuoi che ti realizzi uno sketch inviami una richiesta sulla casella info del blog e provvederò a farti un preventivo.

  11. fabio

    capisco la tua filosofia e concordo con il tuo ragionamento, cercherò di studiare da solo e spero di riuscire a creare da me cio di cui ho bisogno. grazie comunque x l’offerta del preventivo

    1. Mauro Alfieri

      Ottimo Fabio,
      spirito giusto.
      Se leggendo qualche tutorial incontri qualcosa di poco chiaro usa pure i commenti per chiedere delucidazioni.
      Io proverò a risponderti e chiarirteli.

  12. Guido

    Ciao Mauro, sto cercando di costruire un “autovelox” con Arduino e vorrei capire come poter far partire un timer al momento giusto, mi spiego meglio. utilizzo un laser ed una fotoresistenza, vorrei che il timer partisse quando il fascio viene interrotto. Tramite la funzione attachInterrupt ho capito come posso richiamare un’altra funzione al momento del cambiamento di stato di un sensore, ma il mio problema riguarda il timer, quale funzione posso usare per calcolare il tempo? Grazie in anticipo

    1. Mauro Alfieri

      Ciao Guido,
      io userei millis(), ho scritto un tutorial ad hoc e mi sembra che possa essere impiegata facilmente nel tuo progetto.

  13. LUIGI

    Ciao Mauro, ho appena finito di costruire unesemplare di motore a scoppio per una squola, tutto in legno ma funzionante.Sezionato frontalmente per vedere il moto dei pistoni. Il problema mio è questo. tu sai benissimo che un motore deve rispettare le 4 fasi aspirazione compressione scoppio e scarico, con punto di inizio del pistone al punto morto superiore. im motore che muove l’albero motore è un passo passo, con semplice andatura regolare. andatura che posso regolare a mio piacimento. Ho voluto colorare le 4 fasi con dei colori led: azzurro aspirazione; verde compressione; rosso scoppio; senza colore l’espulsione. Io avrei gia risolto il problema con dei reed magnetici, ma volevo delgare il tutto all’arduino uno, e vengo al dunque.Premetto che io sono un obbista non un genio come te. Leggevo il tuo tutorial su arduino interrupt…. Quando fermo il motore, la posizione dei pistoni è casuale. Quando lo faccio ripartire,” il motore dovrebbe posizionarsi al punto morto superiore, ma il codice dovrebbe ripartire da capo”. il motore è gestito da un l298 tramite arduino. Il motore è un 200 passi con rapporto pignone corona di 1 a 5 .Cinque giri del motore per un giro dell’albero motore completo. Ogni 2,5 giri del motore dovrei avere un segnale per accendere i reltivi led.
    Non so se sia abbastanza confusa questa mia richiesta, comunque ti ringrazio per quello che ci hai regalato nei tuoi tutorial. Quando avrò finito il motore ti invierò un video.

    1. Mauro Alfieri

      Ciao Luigi,
      bel progetto 🙂 mi piacerebbe potergli dedicare un articolo con tanto di foto e video del progetto.
      Se ho compreso quello che mi chiedi è di riportare la posizione del motore al punto morto superiore all’accensione dell’arduino e quindi al ciclo di demo; io procederei inserendo un microswitch con funzione di finecorsa in corrispondenza del punto morto superiore, in questo modo nella funzione di setup() potresti inserire un while( digitalRead(pinButton) == HIGH ) { — fai girare il motore — } ottenendo che il pistone si posizioni sempre in questo punto all’accensione.

  14. luigi

    Grazie mauro per la risposta
    Però non riesco a tirar fuori un ragno dal buco ….come si suol dire. Ti mostro l’inizio del codice impostato
    mi puoi mostrare come inseriresti i dati che mi hai mandato? Grazie

    [[ codice rimosso in automatico ]]

    Ti ho inserito una parte del void loop , ma tu senz’altro avrai gia capito come prosegue

    Anticipatamente ti ringrazio

    luigi

    1. luigi

      Scusa mauro
      ti ho fatto una domanda un po’ troppo affrettata .Mi riferivo al progetto del motore, dove il moto è dato da motore passo passo con un l298

      Quando hai un po di tempo se puoi darmi una dritta, ti ringrazio

      luigi

      1. Mauro Alfieri

        Ciao Luigi,
        nessun problema ti ho scritto sopra.

    2. Mauro Alfieri

      Ciao Luigi,
      innanzitutto ti chiedo la cortesia di rispettare le poche regole che ha il blog, una tra tutte è scritta in fondo ad ogni articolo ed è vietato incollare codice nei commenti.
      Purtroppo non possiedo doti che tu mi attribuisci per cui oltre a non aver capito cosa vuoi fare non ho possibilità di comprendere come aiutarti.
      Io ti ho scritto la logica da applicare e di metterla nel setup() e non nel loop(), questo ti permette di riportare il pistone sempre in posizione iniziale ogni volta che accendi il circuito, il resto mi hai scritto di averlo già fatto e non devi modificarlo.

  15. luigi

    ciao mauro

    penso di aver risolto il problema. Ho impostato un altro codice ho smanettato un po’ ma adesso funziona .
    Appena finito ti manderò qualche foto se mi dai un indirizzo.

    luigi

    1. Mauro Alfieri

      Bene Luigi,
      sono contento.

  16. ONCIRO

    buon giorno a tutti, io vorrei sapere come posso utilizzare il timer per avere un Interrupt per esempio ogni 100 millisecondi. grazie.

    1. Mauro Alfieri

      Ciao ONCIRO,
      non ho compreso la tua richiesta e lo scopo del tuo progetto.
      Lascio il commento on-line in modo che altri appassionati possano darti risposta.

  17. ONCIRO

    intendevo dire che, mentre il programma esegue altre istruzioni nella routine principale, vorrei che il timer generasse l interrupt per leggere delle istruzioni nel suo interno ogni 100 o 200 millisecondi,giusto per dire un tempo, e non utilizzare il cambiamento di stato su un ingresso del chip.

    nel frattempo ringrazio tutti anticipatamente

    1. Mauro Alfieri

      Attenzione ONCIRO,
      gli interrupt descritti in questo articolo sono in input ad arduino.
      Se devi far generare un pseudo multitasking devi usare il millis e fare tutti i controlli sui cicli, ho scritto alcuni articoli in merito.

      Dico “pseudo” in quanto arduino non è multitasking.

  18. ONCIRO

    grazie Mauro dove posso reperire gli articoli in merito per capire qualcosa in più?
    buona serata.

    1. Mauro Alfieri

      Ciao ONCIRO,
      trovi tutto usando la funzione cerca del Blog o seguendo il mio corso base arduino gratuito on-line.

  19. ONCIRO

    grazie mille Mauro, io ho lavorato per una vita con la serie st6 e 7, ma sembra che il futuro sia questo cominciamo ad entrarci e man mano ci adegueremo.

  20. Daniela Russo

    Salve,
    ho bisogno di avere un ulteriore pin di interrupts su Arduino uno. E’ possibile aggiungere uno?

    Ho trovato questa libreria, l’ha mai usata?
    https://github.com/GreyGnome/EnableInterrupt

    grazie

    1. Mauro Alfieri

      Ciao Daniela,
      purtroppo no. Sto scrivendo proprio in questi giorni degli articoli su come usare degli AtTiny85 per controllare via i2c degli interrupt da arduino, poichè anche a me spesso non bastano i soli 2 presenti nell’arduino uno.

  21. lampone1967

    Ciao interessante ma se volessi usare i minuti come posso fare vorrei evitare di fare la conversione in millisecondo

    1. Mauro Alfieri

      Ciao Lampone,
      non ho compreso la richiesta.

  22. Savogin Amerigo

    Quando compilo la riga :attachInterrupt(0;interruptGiallo,RISING);
    per accendere altervativamente un led rosso e verde, al caricamento del programma mi da sempre il seguente messaggio di errore:interruptGiallo’ was not declaredin in this scope.
    Ho provato in tutti i modi,ma sono sempre bloccato.
    Grazie.

    1. Mauro Alfieri

      Ciao Amerigo,
      sei certo che la funzione “interruptGiallo” esista e non ci sia qualche carattere differente, ricorda che arduino è case sensitive

      1. savogin Amerigo

        Non avevo chiuso la parentesi graffe dopo la riga di comando :voidinterruptGiallo().

        1. Mauro Alfieri

          Grazie Amerigo

  23. Daniele

    Salve,
    ho un semplice programma che conta quanti click vengono fatti con un bottone
    ____________________________________________________
    [[ codice rimosso in automatico ]]
    ______________________

    A volte ad ogni click conta non 1 ma 2 clic, dove potrebbe essere l’errore?

    Daniele

    1. Mauro Alfieri

      Ciao Daniele,
      il codice viene rimosso in automatico nel rispetto delle regole del blog che hai letto in fondo ad ogni articolo.
      con i bottoni può accedere ce tu abbia un doppio conteggio, devi inserire un codice di debouncer.

  24. alex

    ciao Mauro,
    una domanda io dovrei utilizzare 2 interrupt potrei usare lo stesso tu codice (modificandolo per due variabili )
    e poi sul Arduino non si usa l’interrupt solo sui piedini 2 e 3

    1. Mauro Alfieri

      Ciao Alex,
      si puoi utilizzare il mio codice come base se ti serve sperimentare con gli interrupt.
      Gli interrupts su Aruino Uno sono i pin 2 e 3.

  1. Rotary Encoder: utilizza un encoder con Arduino - Mauro Alfieri

    […] eseguito due, entrambi si basano sull’uso degli interrupt di Arduino e prendono spunto da questo esempio di codice ben fatto: Rotary Encoder + Arduino puoi […]

  2. Fingerprint Scanner TTL GT-511C3 seconda parte Domotica e Automazione

    […] Trovi maggiori informazioni sugli interrupt in questo articolo: Tutorial: Arduino interrupt […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>