sexta-feira, 2 de outubro de 2015

Interrupções Arduino

    Há algum tempo eu comentei sobre interrupções, hoje novamente irei abordar sobre esse assunto tão importante mas pouco usado no Arduino. 
    As interrupções permitem que os microcontroladores respondam a eventos sem que seja preciso consultá-los a toda hora ára verificar se houve alguma alteração. 

Interrupções de hardware:


    No arduino UNO você pode usar apenas dois pinos para as interrupções de hardware, sendo essa uma das razões de serem pouco utilizadas. Abaixo temos uma tabela mostrando algumas placas e seus respectivos pinos de interrupções. 


    Abaixo temos um exemplo de aplicação de interrupção usado no arduino. Refaça o circuito abaixo e também carregue a sketch para seu arduino.



 int ledPin = 13;  
 void setup()  
 {  
  pinMode(ledPin, OUTPUT);  
  attachInterrupt(0, funcao, FALLING);  
 }  
 void loop()  
 {  
 }  
 void funcao()  
 {  
  digitalWrite(ledPin, HIGH);  
 }  

    Além de definir o pino LED como sendo saída, a função setup também contém uma linha que associa uma função a uma interrupção. Assim, sempre que ocorre a interrupção, a função é executada.
  attachInterrupt(0, funcao, FALLING);  

    O primeiro argumento, 0, é o número da interrupção. Faria mais sentido se esse número representasse um pino do Arduino, mas não é o caso. Em um Arduino UNO, a interrupção 0 corresponde ao pino D2, e a interrupção 1, ao pino D3. O argumento funcao é o nome da função que será chamada quando ocorrer uma interrupção. Você também pode ver essa função definida mais adiante no sketch. Essas funções recebem um nome especial: são denominadas Rotinas de Serviço ou Atendimento de Interrupção, ou simplesmente ISR. Elas não podem ter parâmetros e não devem retornar valor algum. Isso faz sentido porque, ebora possam ser chamadas de qualquer lugar de dentro do sketch, nenhuma linha de códio do sketch fará isso. Por essa razão, não há maneira delas receberem parâmetros ou retornarem um valor.

   O parêmetro final, attachInterrupt, é uma constante, no casoo, FALLING. Isso significa que a rotina de serviço de interrupção (ISR) só será chamada se a tensão presente em D2 estiver indo do nível HIGH para LOW. Isso é o que acontece quando o botão pressionado: D2 vai de alto para baixo. 

    Ao executar esse projeto você deverá apertar o botão e mantê-lo pressionado, o LED deverá permanecer apagado até que você solte. Ao liberá-lo, a interrupção é disparada porque a tensão em D2, que ra baixa enquanto o botão estava sendo apertado, somente subirá para alto quando você soltá-lo.

    Abaixo temos uma tabela com os modos de operação usando interrupções.


Fonte:

Programação com Arduino vol 2 -  Simon Monk

Nenhum comentário:

Postar um comentário