Professional Documents
Culture Documents
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
Uno, Ethernet
int.2
int.3
int.4
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.
RISING: kch hot khi trng thi ca chn digital chuyn t mc in p thp sang mc
in p cao.
FALLING: kch hot khi trng thi ca chn digital chuyn t mc in p cao sang mc
in p thp.
Lu : vi mode LOW v HIGH, chng trnh ngt s c gi lin tc khi chn digital cn gi
mc in p tng ng.
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()
{
// tt n led khi nhn nt, nh ra led nhp nhy tr li
digitalWrite(ledPin, LOW);
}
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();
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
}