0

Usando a interrupção externa no Arduino

Imagine que 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 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 interrupção e é usada com frequência na programação de microcontroladores.

Uma interrupção tem dois pontos chaves, eles são:

  • Condição de interrupção: É a condição que indica uma interrupção. Ela avisa ao programa que é a hora de executar uma tarefa extraordinária. No nosso exemplo, essa condição é o toque do telefone.
  • Função a ser executada: Quando algo indica a interrupção, temos que executar uma lista de instruções referentes a essa interrupção. No exemplo dado, temos que parar de fazer o bolo e ir atender ao telefone. A função atender telefone é uma função extraordinária que só é executada pelo fato de ter ocorrido a condição de interrupção, o toque do telefone.

Para aprender como implementar uma interrupção, vamos fazer uma experiência simples para depois explica-lá. Nela poderá entender melhor esse conceito de interrupção em um microcontrolador.

Experiência – Implementando uma interrupção

Material:

  • Botão de pressão
  • LED 5mm
  • Resistência 1kΩ
  • Resistência 470Ω
  • Fios Jumper’s
  • Protoboard

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 a resistência e a perna menor (catodo) ao GND.

Conecte seu Arduino ao computador e abra a IDE Arduino. No menu Tools, certifique-se que a porta serial (serial port) está selecionada e que a placa configurada é a que você está usando (board).

Crie um programa (sketch) e salve com o nome de “programa_interrupcao_externa”.

Com o seu programa salvo, escreva nele o código conforme escrito abaixo.

// Daremos um nome ao pino que ficara o LED:
int led = 13;
 
void interrupção(){
  digitalWrite(led, HIGH); // Liga o LED (HIGH = nível lógico alto)
  delay(5000);
}
 
// Esta função "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
  pinMode(led, OUTPUT); // Configura o pino do led (digital) como saída
  attachInterrupt(0,interrupcao,RISING); //Configurando a interrupção
}
 
// Função que se repete infinitamente quando a placa é ligada
void loop() {
  digitalWrite(led, HIGH); // Liga o LED (HIGH = nível lógico alto)
  delay(1000);             // Espera um segundo
  digitalWrite(led, LOW);  // Desliga o LED (LOW = nível lógico baixo)
  delay(1000);             // Espera um segundo
}

Depois de escrever o código, clique em Upload para que o programa seja transferido para seu Arduino.

Caso tenha ocorrido tudo como esperado, o LED deve piscar intermitentemente. Quando apertar o botão, o LED da protoboard permanecerá aceso por 5 segundos. Caso não pressione o botão novamente, ele voltará a piscar.

Hardware

As placas Arduino possuem pinos que podem desempenhar a função de entrada de sinal para interrupção externa. No Arduino UNO são as portas digitais 2 e 3, que para tal função são nomeadas de INT0 e INT1, respectivamente. Veja a tabela a seguir com os pinos de cada placa Arduino que possuem essa qualidade.

Dessa forma, para que seja possível o uso da interrupção externa, escolhemos o pino digital 2 (INT0), no qual conectamos o botão.

Obs.: Caso precise de mais portas pode trabalhar com as interrupções do próprio micontrolador Atmega trabalhando com registradores, isso é um pouco avançado mas temos um tutorial explicando como pode trabalhar com eles. Introdução a Interrupções e PCINT

Programa

Considerando que já sabe o básico , já pode entender a maioria dos programas.

Configurar a interrupção externa no Arduino

Para que o Arduino leia uma interrupção, devemos configurá-lo. Para tal usaremos o comando attachInterrupt().

attachInterrupt(INT,FUNÇÂO,MODO); //Configurando a interrupção

INT: Número da porta usada para a interrupção. No Arduino UNO INT 0 corresponde à porta digital 2 e INT 1 corresponde à porta digital 3; Como explicado anteriormente, numa interrupção temos dois pontos chaves: a condição da interrupção e a função que será executada. Dessa forma, o comando attachInterrupt é usado para informar ao programa esses dados. Eles são:

FUNÇÃO: Nome da função que será chamada e executada quando ocorrer a interrupção;

Modo: Define em qual tipo de variação do sinal a interrupção será disparada. As opções são:

  • LOW: Dispara a interrupção quando a tensão 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)

No nosso programa, usaremos esse comando da seguinte forma:

attachInterrupt(0,interrupcao,RISING); //Configurando a interrupção

Portanto, temos como condição de interrupção a mudança de estado de 0V (0) para 5V(1) no pino digital 2 (INT 0) e a função a ser executa se chama interrupção.

Função interrupção()

Função é um bloco de tarefas a serem executadas pelo programa quando solicitada.

void interrupcao(){ //Função executada quando ocorre a interrupção externa
 digitalWrite(led, HIGH); // Liga o LED (HIGH = nível lógico alto)
 delay(5000);
}

No nosso caso, a função será solicitada quando ocorrer a interrupção. As tarefas a serem executadas serão: acender o LED e esperar 5 segundos.

Artigo gentilmente cedido por Vida de Silicio

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

Comments

Comentários

ArduinoPortugal.pt

Deixe uma resposta

O seu endereço de email não será publicado.

To use BrandCaptcha you must get an API Key