You are on page 1of 11

Phn 25: Hm Ngt (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

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

on chng trnh di y s lm sng n led khi khng nhn nt v lm n led tt i khi


ngi dng nhn nt, nu vn gi nt nhn th n led vn cn tt. Sau khi th nt nhn, n led
s sng tr li.
int ledPin = 13;

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

on chng trnh di y s bt sng n led v ch tt n khi nhn ln u tin, th ra n s


sng li. Nu tip tc nhn na th n vn sng m khng b tt i.
int ledPin = 13;

// n LED c kt ni vi chn digital 13

boolean daNhan = false; // lu gi gi tr cho bit nhn nt hay cha

void tatled()
{
digitalWrite(ledPin, LOW); // tt n led khi cn nhn nt

daNhan = true; // lc ny nhn nt


}

void setup()
{
pinMode(ledPin, OUTPUT);

// thit t chn ledPin l OUTPUT

pinMode(2, INPUT_PULLUP); // s dng in tr ko ln cho chn s 2, ngt 0


attachInterrupt(0, tatled, LOW); // ci t ngt gi hm tatled
}

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
}

You might also like