Utilizando um botão para enviar informações para o Raspberry
Fala galera!
Hoje vou demonstrar um processo bem interessante, a parte IN do GPIO.
Como explicado anteriormente em posts, os pinos do Raspberry podem ser utilizados tanto para saída de dados (acender LED , ligar motores e etc), tanto para entrada de informações (botões potenciômetros e etc).
Uma coisa interessante para se utilizar são botões iguais campainha que você aperta e ele volta ao estado original e o circuito só é fechado quando acionado.
No Raspberry podemos capturar esses eventos de forma simples e fácil utilizando métodos próprios e funções de call back, ou seja funções que são executadas a partir de uma ação.
Podemos capturar 3 tipos de ações do botão:
- AO CLICAR (GPIO.FALLING)
- AO SOLTAR (GPIO.RISING)
- AMBOS (GPIO.BOTH)
no caso do 3 a função de call back será executada 2 vezes caso não seja tratado.
Iremos fazer o seguinte exemplo:
- 3 LEDS
- 1 Botão
- 4 Resistores
O intuito será que ao apertar na primeira vez, acende 1 LED, na segunda 2 LEDs , terceira 3 LEDs e na quarta apague tudo.
Então temos o seguinte protótipo:
Utilizaremos os pinos contando sempre no modo BOARD , ou seja contando diretamente na pinagem, desconsiderando os numeros de GPIO
Para esse exemplo utilizaremos:
- pino 11 para o botão
- pino 12 para o led1
- pino 13 para o led2
- pino 15 para o led3
Utilizaremos o seguinte código explicado:
import RPi.GPIO as GPIO; import time; import datetime; qtdApertado = 0; def apertarBotao(channel): global qtdApertado; qtdApertado = qtdApertado + 1 ; if qtdApertado == 1: GPIO.output(12,1); if qtdApertado == 2: GPIO.output(13,1); if qtdApertado == 3: GPIO.output(15,1); if qtdApertado == 4: GPIO.output(12,0); GPIO.output(13,0); GPIO.output(15,0); qtdApertado = 0; def main(): GPIO.setmode(GPIO.BOARD); GPIO.setwarnings(False); GPIO.cleanup(); GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP); GPIO.setup(12, GPIO.OUT); GPIO.setup(13, GPIO.OUT); GPIO.setup(15, GPIO.OUT); GPIO.setup(16, GPIO.OUT); GPIO.output(12,0); GPIO.output(13,0); GPIO.output(15,0); GPIO.output(16,0); GPIO.add_event_detect(11,GPIO.FALLING, bouncetime=1000 , callback=apertarBotao); while (True): time.sleep(.5); if __name__ == "__main__": main()pyt
Temos as funções :
apertarBotao e a main.
A main é a principal do nosso sistema, nela iremos colocar os valores iniciais para cada pino e identificar se ele será entrada ou saída.
Na linha 34 informamos que um call back apertarBotao deve ser adicionado quando o botão for apertado, no caso do FALLING. Também existe uma instrução chamada bouncetime, que informa que o intervalo de apertar o botão será de 1000ms ou 1 segundo, esse valor pode ser aumentado ou diminuído de acordo com a sua necessidade.
Feito isso, o seu sistema irá rodar basicamente igual ao vídeo abaixo:
Espero que tenham gostado, e até a próxima!