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!




Publicar comentário