You are on page 1of 9

Usando a interrupo externa no

seu Arduino
Imagine que voc esteja fazendo seu bolo e no meio da receita seu telefone toque.
Possivelmente voc ir parar o que est fazendo e ir atender o telefone, assim que
encerrar a chamada voc ir retornar ao ponto que parou em sua receita.

Quando estamos executando um tarefa muitas vezes temos que a interromper para
resolver outra tarefa importante para s depois retornar do ponto que se parou. Isso
se chama interrupo e usada com frequncia na programao de
microcontroladores.

Uma interrupo tem dois pontos chaves, so eles:


Condio de interrupo: a condio que indica uma interrupo. Ela avisa ao
programa que a hora de executar uma tarefa extraordinria. No nosso exemplo,
essa condio o toque do telefone.
Funo a ser executada: Quando algo indica a interrupo, temos que executar
uma lista de instrues referentes a essa interrupo. No exemplo dado, temos
que parar de fazer o bolo e ir atender ao telefone. A funo atender telefone uma
funo extraordinria que s executada pelo fato de ter ocorrido a condio de
interrupo, o toque do telefone.

Para aprender como implementar uma interrupo, vamos fazer uma experincia
simples para depois explica-l. Nela voc poder entender melhor esse conceito de
interrupo em um microcontrolador.
ndice [Ocultar]
1 Usando a interrupo externa no seu Arduino
2 Mos obra Implementando uma interrupo
o 2.1 Montando o projeto
o 2.2 Conectando o Arduino ao computador
o 2.3 Programando
o 2.4 Colocando para funcionar
3 Entendendo a fundo
o 3.1 Entendendo o Hardware
o 3.2 Entendendo o programa
4 Fechamento

Mos obra Implementando uma


interrupo
Componentes necessrios
Boto de presso
LED 5mm
Resistor 1k
Resistor 470
Fios Jumpers
Protoboard

Montando o projeto
Agora vamos conectar os componentes do projeto. Para isso, monte seu circuito
conforme a figura a seguir.

Garanta que seu Arduino esteja desligado durante a montagem e que o seu LED
esteja conectado corretamente, com a perna mais longa (Anodo) conectado ao
resistor e a perna menor (catodo) ao GND.

Conectando o Arduino ao computador


Conecte seu Arduino ao computador e abra a IDE Arduino.

Antes de carregar um programa, voc precisa selecionar qual porta voc deseja
usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE,
clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta
que seu Arduino est conectado, tal como COM3 ou COM4. Geralmente aparece o
nome da placa Arduino : COM3 (Arduino/Genuino Uno).
Voc tambm precisa garantir que o tipo de placa apropriado est selecionado em
Ferramentas(Tools) no submenu Placa (Board).
Programando
Crie um programa (sketch) e salve com o nome de programa_interrupcao_externa.

Com o seu programa salvo, escreva nele o cdigo conforme escrito abaixo.

1 // Daremos um nome ao pino que ficara o LED:


2 int led = 13;
3
4 void interrupcao(){
5 digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
6 delay(5000);
7 }
8
9 // Esta funo "setup" roda uma vez quando a placa e ligada ou resetada
10 void setup() {
11 pinMode(led, OUTPUT); // Configura o pino do led (digital) como sada
12 attachInterrupt(0,interrupcao,RISING); //Configurando a interrupo
13 }
14
15 // Funo que se repete infinitamente quando a placa ligada
16 void loop() {
17 digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
18 delay(1000); // Espera um segundo
19 digitalWrite(led, LOW);// Desliga o LED (LOW = nvel lgico baixo)
20 delay(1000); // Espera um segundo
21 }

Aps escrever o cdigo, clique em Carregar (Upload) para que o programa seja
transferido para seu Arduino.

Colocando para funcionar


Caso tenha ocorrido tudo como esperado, o LED deve piscar intermitentemente.
Quando voc apertar o boto, o LED da protoboard permanecer aceso por 5
segundos. Caso voc no pressione o boto novamente, ele voltar a piscar.

Entendendo a fundo
Entendendo o Hardware
As placas Arduino possuem pinos que podem desempenhar a funo de entrada de
sinal para interrupo externa. No Arduino UNO so as portas digitais 2 e 3, que
para tal funo so nomeadas de INT0 e INT1, respectivamente. Veja a tabela a
seguir com os pinos de cada placa Arduino que possuem essa qualidade.

Board Digital Pins Usable For Interrupts

Uno, Nano, Mini, other


2, 3
328-based

Mega,
2, 3, 18, 19, 20, 21
Mega2560, MegaADK

Micro, Leonardo, other


0, 1, 2, 3, 7
32u4-based

Zero all digital pins, except 4

MKR1000 Rev.1 0, 1, 4, 5, 6, 7, 8, 9, A1, A2

Due all digital pins

all digital pins (Only pins 2, 5, 7, 8,


101
10, 11, 12, 13 work with CHANGE

Board int.0 int.1 int.2 int.3 int.4 int.5

Uno, Ethernet 2 3

Mega2560 2 3 21 20 19 18

32u4 based (e.g


Leonardo, 3 2 0 1 7
Micro)

Due,
Zero, MKR1000, interrupt number = pin number
101

Dessa forma, para que seja possvel o uso da interrupo externa, escolhemos o
pino digital 2 (INT0), no qual conectamos o boto.

Entendendo o programa
Considerando que voc j sabe o bsico , voc j pode entender a maioria dos
programas. Dessa forma, iremos nos ater s novidades.
Configurando a interrupo externa no Arduino
Para que o Arduino leia uma interrupo, devemos configur-lo. Para tal usaremos
o comando attachInterrupt().

1 attachInterrupt(INT,FUNCAO,MODO); //Configurando a interrupo

INT: Nmero da porta usada para a interrupo. No Arduino UNO INT 0 corresponde
porta digital 2 e INT 1 corresponde porta digital 3; Como explicado anteriormente,
numa interrupo temos dois pontos chaves: a condio da interrupo e a funo
que ser executada. Dessa forma, o comando attachInterrupt usado para informar
ao programa esses dados. So eles:

FUNO: Nome da funo que ser chamada e executada quando ocorrer a


interrupo;

MODO: Define em qual tipo de variao do sinal a interrupo ser disparada. As


opes so:
LOW: Dispara a interrupo quando a tenso no pino est em 0V
CHANGE: Dispara sempre que o sinal no pino muda de estado, borda 0V (0) para
5V(1) ou vice-versa;
RISING: Dispara somente borda de subida, 0v (0) para 5V (1);
FALLING: Dispara somente borda de descida, 5V (1) para 0V (0)

Em nosso programa, usaremos esse comando da seguinte forma:

1 attachInterrupt(0,interrupcao,RISING); //Configurando a interrupo

Portanto, temos como condio de interrupo a mudana de estado de 0V (0) para


5V(1) no pino digital 2 (INT 0) e a funo a ser executa se chama interrupo.

Funo interrupcao()
Funo um bloco de tarefas a serem executadas pelo programa quando solicitada.

1 void interrupcao(){ //Funo executada quando ocorre a interrupo externa


2 digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
3 delay(5000);
4 }
No nosso caso, a funo ser solicitada quando ocorrer a interrupo. As tarefas a
serem executadas sero: acender o LED e esperar 5 segundos.

Caso voc queira saber mais sobre interrupo externa no Arduino, voc pode ler
sobre ela no site oficial da Arduino. Link

Fechamento
Esperamos que tenham gostado, deixe seu comentrio com duvidas, sugestes ou
com a foto ou vdeo de seu projeto!! Compartilhe vontade.

Allan Mota
Estudante de Engenharia Eltrica da UFES e Fundador do Vida de Silcio. Sonhador com
uma nica pretenso, fazer a diferena.
Post Views: 1.427
Compartilhe:


inShare

Salvar

Curtir isso:

4 COMMENTS

Eduardo
24 de setembro de 2017, 13:40
Gostei muito, claro, direto e tem tudo o que precisa, obrigado
REPLY

Guilherme
27 de setembro de 2017, 01:50
Boa noite.
Como possvel adicionar um parmetro funo a ser chamada na interrupo?
Usei o seguinte:
void interruptButton1(int estado){
}
void setup(){
()
attachInterrupt(0, interruptButton1(estado), RISING);

}
e obtive o seguinte error de compilao:
error: invalid use of void expression
REPLY

Allan Mota
27 de setembro de 2017, 09:33
Essa funo interruptButton1 no para ter esse parmetro estado. Caso precise
usar algum dado dentro da funo, voc pode usar uma varivel global.
Ex.:
int estado
void interruptButton1(){
estado=estado+1;
}
Essa varivel estado pode ser usada no loop para verificar uma condio, por
exemplo.
REPLY

ALVACIR JOAO FERREIRA


9 de outubro de 2017, 09:55
Muito bom este post. Parabns pea iniciativa!

You might also like