Utilizando a Interface GPIO do Raspberry Pi – Parte 3

No post anterior vimos como trabalhar com entradas da GPIO em polling. Aqui veremos como fazer o mesmo porém com interrupções, o que não ocupa muito recurso do processador.Não esquecer que as entradas trabalham apenas com 3,3v, portando não confundam em ligar nas entradas 5V, que também estão disponíveis na GPIO.

Para o RPi temos interrupções por detecção de borda (subida, descida e mudança). Em um primeiro exemplo usaremos um try/except, onde o programa fica em espera por alguma ação. A ação no caso será a wait_for_edge ou aguardando pela borda, neste exemplo ele fica esperando uma borda de subida (GPIO.EDGE) Apertando o botão ele mostra na tela "Entrada em nível alto" e sai. Ou pressionando CRTL+C sai do programa direto.

O circuito usado é o abaixo:

Aqui o programa:

 

Em um outro exemplo, usaremos um while e o programa ficará em loop, necessitando CRTL+C para sair caso esteja em um terminal, ou CRTL+F6 caso esteja no Idle.

O problema deste exemplo é que caso adicione mais de uma entrada no loop, conforme abaixo, somente uma ação é executada por vez e em sequencia, ou seja, para o botão 24 funcionar, primeiro é necessário pressionar o botão 23 e vice-versa.

Podemos então usar a função add_event_detect, onde deixando a chamada de interrupção na estrutura do programa, ela estará sempre na espera por alguma ação na porta designada. Caso aconteça ela chama outra função (callback), sem para isso interromper o que estiver rodando. Neste exemplo existe duas entradas (23 e 24) a espera de uma interrupção e um loop com um blink (piscando um led).

 

Comentários