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

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.

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