Professional Documents
Culture Documents
Phan 25 Ham Ngat (Interrupt) Arduino
Phan 25 Ham Ngat (Interrupt) Arduino
Ngt (interrupt)
attachInterrupt()
detachInterrupt()
interrupts()
noInterrupts()
1/ attachInterrupt() :
Gii thiu
Ngt (interrupt) l nhng li gi hm t ng khi h thng sinh ra mt s
kin. Nhng s kin ny c nh sn xut vi iu khin thit lp bng phn
cng v c cu hnh trong phn mm bng nhng tn gi c nh.
V ngt hot ng c lp v t sinh ra khi c cu hnh nn chng trnh
chnh s n gin hn. Mt v d in hnh v ngt l hm millis(). Hm ny
t ng chy cng vi chng trnh v tr v 1 con s tng dn theo thi gian
mc d chng ta khng ci t n. Vic ci t hmmillis() s dng n ngt
v c cu hnh t ng bn trong m chng trnh Arduino.
V sao cn phi dng n ngt?
Ngt gip chng trnh gn nh v x l nhanh hn. Chng hn, khi kim tra
1 nt nhn c c nhn hay khng, thng thng bn cn kim tra trng
thi nt nhn bng hm digitalRead() trong on chng trnh loop(). Vi
vic s dng ngt, bn ch cn ni nt nhn n ng chn c h tr ngt,
sau ci t ngt s sinh ra khi trng thi nt chuyn t HIGH->LOW. Thm
1 tn hm s gi khi ngt sinh ra. Vy l xong, bin trong on chng trnh
ngt s cho ta bit trng thi nt nhn.
S lng cc ngt ph thuc vo tng dng vi iu khin. Vi Arduino Uno
bn ch c 2 ngt, Mega 2560 c 6 ngt v Leonardo c 5 ngt.
Board
int.0
int.1
int.2
int.3
in
Uno, Ethernet
Mega2560
21
20
19
Leonardo
C php
attachInterrupt(interrupt, ISR, mode);
Thng s
interrupt: S th t ca ngt. Trn Arduino Uno, bn c 2 ngt vi s th t
l 0 v 1. Ngt s 0 ni vi chn digital s 2 v ngt s 1 ni vi chn digital
s 3. Mun dng ngt bn phi gn nt nhn hoc cm bin vo ng cc
chn ny th mi sinh ra s kin ngt. Nu dng ngt s 0 m gn nt nhn
chn digital 4 th khng chy c ri.
ISR: tn hm s gi khi c s kin ngt c sinh ra.
mode: kiu kch hot ngt, bao gm
LOW: kch hot lin tc khi trng thi chn digital c mc thp
HIGH: kch hot lin tc khi trng thi chn digital c mc cao.
Tr v
khng
V d
void tatled()
{
digitalWrite(ledPin, LOW); // tt n led
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(2, INPUT_PULLUP); // s dng in tr ko ln cho chn s 2, ngt
0
attachInterrupt(0, tatled, LOW); // gi hm tatled lin tc khi cn nhn nt
}
void loop()
{
digitalWrite(ledPin, HIGH); // bt n led
}
Mt v d khc khi s dng ngt, cc bn c th thot khi cc hm delay
x l 1 on chng trnh khc
int ledPin = 13;
void tatled()
{
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(2, INPUT_PULLUP); // s dng in tr ko ln cho chn s 2, ngt
0
attachInterrupt(0, tatled, LOW);
}
void loop()
{
// on chng trnh ny nhp nhy led sau 500ms
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
2/ detachInterrupt() :
Gii thiu
Nu bn cha bit Ngt (interrupt) l g, vui lng tham kho thm ti
bi attachInterrupt().
Hm detachInterrupt() s tt cc ngt c kch hot tng ng vi thng
s truyn vo. Gi s sau khi nhn nt bm ln u tin n led s tt nhng
nhn ln th 2 n s khng tt na. Lc ny cn dng n detachInterrupt()
tt ngt chng ta to ra.
C php
detachInterrupt(interrupt);
Thng s
interrupt: s th t ngt (xem thm bi attachInterrupt() )
Tr v
khng
V d
void tatled()
{
digitalWrite(ledPin, LOW); // tt n led khi cn nhn nt
void setup()
{
pinMode(ledPin, OUTPUT);
void loop()
{
digitalWrite(ledPin, HIGH); // bt n led
if (daNhan == true)
{
// Nu nhn nt th tt ngt i
detachInterrupt(0);
}
}
3/ interrupts() :
Gii thiu
Nu bn cha bit Ngt (interrupt) l g, vui lng tham kho thm ti
bi attachInterrupt().
Mc nh, Arduino lun bt cc ngt nn trong phn setup(), bn khng cn
gi hm ny bt cc ngt. Hm interrupts() s bt ton b cc ngt
c ci t. Nu v l do no bn tt cc ngt bng hm noInterrupts(),
bn s dng hm ny bt li cc ngt.
C php
interrupts();
Thng s
khng
Tr v
khng
V d
void setup() {}
void loop()
{
noInterrupts();
// tt cc ngt chy
// on chng trnh yu cu cao v thi gian
interrupts();
// bt li cc ngt, cc ngt hot ng
// bnh thng tr li
}
4/ noInterrupts() :
Gii thiu
Nu bn cha bit Ngt (interrupt) l g, vui lng tham kho thm ti
bi attachInterrupt().
Khi cn chy cc on chng trnh yu cu chnh xc v thi gian, bn cn
tt cc ngt Arduino ch tp trung vo x l cc tc v cn thit v ch duy
nht cc tc v ny. Cc ngt chy nn s khng c thc thi sau khi gi
hm noInterrupts().
C php
noInterrupts();
Thng s
khng
Tr v
khng
V d
void setup() {}
void loop()
{
noInterrupts();
// tt cc ngt chy
// on chng trnh yu cu cao v thi gian
interrupts();
// bt li cc ngt, cc ngt hot ng
// bnh thng tr li
}