Sei sulla pagina 1di 4

Macagno Michele

Rosa Marco ITIS M. DELPOZZO CUNEO


18/0/!01!
La gestione degli Interrupt con Arduino
Obiettivo: S"#$io $el %#n&iona'en"o $egli in"err#(" $el 'icrocon"rollore )"'ega 'on"a"o a *or$o $elle
*ase""e )r$#ino.
Materiale utilizzato+
)r$#ino UNO ,o ME-).
1 LED
1 resis"ore $a !!0/
1 P#lsan"e (er circ#i"o s"a'(a"o
Ca0e""i $i collega'en"o
1rea$*oar$
Gli Interrupt:
La "ecnica $ell2in"err#&ione ,in"err#(". consis"e nell2in0iare3 $a (ar"e $elle (eri%eriche3 #n segnale $i
richies"a $i in"err#&ione4 il 'icrocon"rollore (#5 ges"ire le in"err#&ioni ris(e""an$o le (riori"6 nel caso 0i
siano (i7 richies"e $i in"err#&ione in con"e'(oranea4 (ri'a $i in"erro'(ere il (rogra''a3 il
'icrocon"rollore %inisce l2is"r#&ione in corso e (oi (assa alla s#*ro#"ine $i ges"ione $ell2in"err#&ione.
Pi7 se'(lice'en"e3 il (rocessore eseg#e nor'al'en"e il s#o la0oro3 'a 8#an$o s#cce$e 8#alcosa $i
i'(or"an"e rice0e #na chia'a"a $al ges"ore $egli in"err#(" che gli $ice $i ini&iare la In"err#(" Ser0ice
Ro#"ine ,ISR.. )n&ich9 i'(iegare "#""o il "e'(o a 0eri%icare #na cer"a con$i&ione all2in"erno $el co$ice3
0iene #sa"o #n *i" $el 'icrocon"rollore (er segnalare il 0eri%icarsi $i #na $e"er'ina"a con$i&ione.
S#i chi( s"an$ar$ )"'ega sono (resen"i solo $#e ingressi $i in"err#("3 che sono collega"i agli ingressi $igi"ali
! e :. La s#*ro#"ine $i in"err#(" (#5 essere eseg#i"a s#l %ron"e $i $iscesa ,;)LLIN-.3 $i sali"a ,RISIN-.
o((#re 8#an$o l2ingresso $el (ie$ino ca'*ia $i s"a"o ,C<)N-E..
L2is"r#&ione %on$a'en"ale (er l2#so $egli in"err#(" =+ attachInterrupt() la 8#ale rice0e "re (ara'e"ri+ il
(ie$ino $a #"ili&&are3 il no'e $ella (roce$#ra $a eseg#ire e il "i(o $i e0en"o che si in"en$e in"erce""are.
Procedimento:
Il (rogra''a reali&&a"o = #"ile escl#si0a'en"e all2a((ren$i'en"o e all2#so $egli in"err#(" e consis"e
nell2accensione $i #n Le$ ,collega"o al (in $igi"ale 1!. nel 'o'en"o in c#i 0iene (re'#"o il (#lsan"e
,collega"o in0ece al (in $igi"ale ! $i in"err#(".. >#al#n8#e sia l2o(era&ione che il 'icrocon"rollore s"ia
eseg#en$o3 0iene a00ia"a la (roce$#ra rela"i0a all2in"err#(" e ges"i"i l2accensione $el Le$ e l2in0io $i #n
'essaggio "ra'i"e (or"a seriale che ci con%er'i l2e%%e""i0a esec#&ione $ella (roce$#ra associa"a
all2in"err#(". Lo sche'a ele""rico $el sis"e'a $escri""o = ra((resen"a"o nella %ig#ra seg#en"e.
Codice utilizzato:

int valoreSensore=LOW;
#define BUTTON 2;

void setup(){
Serial.begin(9600);
pinMode(2,INPUT);
digitalWrite(2,HIGH);
pinMode(12,OUTPUT);
attachInterrupt(0,catturato0
}

void loop(){
int j;
for(int i=0;i<100;i++){
j=j+i*i;
Serial.println("Ora attendo..."
delay(5000);

j=1;
}
}
//metodo asincrono richiamato
sociato allinterrupt
void catturato0(){
valoreSensore=digitalRead
digitalWrite(12,!valoreSensore);
Serial.println("interrupt
}


catturato0,CHANGE);
"Ora attendo...");
richiamato dall'evento asincrono della pressione
lRead(2);
(12,!valoreSensore);
interrupt");

pressione del tasto as
Ese'(io $i (rogra''a %#n&ionan"e

Conclusioni:
L2#"ili&&o $egli in"err#(" (#5 essere (ar"icolar'en"e #"ile nel caso in c#i ci si 0oglia accer"are che
#n2o(era&ione 0enga eseg#i"a is"an"anea'en"e o((#re nel caso in c#i ci si 0oglia accer"are che 0enga
eseg#i"a #n2o(era&ione in corris(on$en&a $i #n e0en"o asincrono es"erno. Per ese'(io nel caso in c#i si
$e**a con"rollare lo s"a"o $i $i0ersi (in $i in(#"3 si (o"re**e rischiare che il (rogra''a non si accorga $i #n
e0en"#ale ca'*ia'en"o $i s"a"o $i #n (in4 8#es"a si"#a&ione (o"re**e 0eri%icarsi se il 'icrocon"rollore s"a
con"rollan$o lo s"a"o $i al"ri (ie$ini $i in(#". )*ili"an$o gli in"err#(" ci si (#5 assic#rare che il
'icrocon"rollore eseg#a i''e$ia"a'en"e la (roce$#ra associa"a all2in"err#(" e che 8#in$i 0enga ges"i"a la
(riori"6 $egli e0en"i asincroni. Il 'icrocon"rollore )"'ega a *or$o $ell2)r$#ino Uno3 (re0e$e solo $#e
ingressi $i in"err#("3 'en"re la )"'ega!?@0 a *or$o $ell2)r$#ino Mega (resen"a 8#a""ro ingressi $i
in"err#(".
Nel caso in c#i si 0ogliano collegare (i7 ele'en"i agli ingressi $i in"err#("3 si (#5 %ar #so $i '#l"i(leAer3
o((#re $i (or"e logiche OR che (er'e""ano $i a&ionare gli in"err#(" ogni 0ol"a che al'eno #no $ei
$is(osi"i0i collega"i al ga"e raggi#nga #n 0alore logico al"o.
)l"ra consi$era&ione $a %arsi nel caso in c#i si %accia #so3 a$ ese'(io3 $i (#lsan"i $a circ#i"o s"a'(a"o3 = la
ges"ione $ei ri'*al&i. Sare**e o((or"#no reali&&are o((or"#ni circ#i"i an"iri'*al&o3 %acen$o #so $i (or"e
NOT Triggera"e e $i %il"ri (assi0i RC (assa *asso che (er'e""ano $i ren$ere in0isi*ili al 'icrocon"rollore il
0eri%icarsi $i ri'*al&i a %re8#en&a ele0a"a e3 8#in$i3 in$esi$era"i. Una sol#&ione analoga 'a (i7 $is(en$iosa
in %a""o $i risorse (er l2)r$#ino3 consis"e nel reali&&are3 scri0en$o a((osi"o co$ice3 #na sor"a $i an"iri'*al&o
so%"Bare che ges"isca le 0aria&ioni $i s"a"o all2in"erno $i #n cer"o in"er0allo $i "e'(o.



Ese'(io $i an"iri'*al&o so%"Bare+
volatile unsigned long bounceTime=0;
void catturato0(){
if (abs(millis() - bounceTime) > BOUNCE_DURATION){
valoreSensore=digitalRead(2);
digitalWrite(12,!valoreSensore);
Serial.println("interrupt");
bounceTime = millis();
}
else{
digitalWrite(12,LOW);
}
}