Ir para conteúdo
  • Cadastre-se

resolvido Ajuda com python, botões na raspberry

Avalie este tópico:


Posts em destaque

Bom dia colegas do fórum!

Estou com um projetinho de programar uma senha em python com uma raspberry onde devo apertar 4 botões  push button numa sequencia especifica tipo 1234 e se for digitado a sequencia correta aparecerá num display LCD senha correta e caso digite na sequencia incorreta aparecerá senha incorreta. A parte de programação das GPIO e do LCD é traquilo mas estou com dificuldade para amarrar as variaveis na memoria para acertar a sequencia dos botões. Alguém poderia me dar uma idéia?

 

Segue o início do codigo

import RPi.GPIO as GPIO
import board
import digitalio
import adafruit_character_lcd.character_lcd as character_lcd
import time
GPIO.setwarnings(False)


lcd_rs = digitalio.DigitalInOut(board.D18)
lcd_en = digitalio.DigitalInOut(board.D23)
lcd_d7 = digitalio.DigitalInOut(board.D21)
lcd_d6 = digitalio.DigitalInOut(board.D20)
lcd_d5 = digitalio.DigitalInOut(board.D16)
lcd_d4 = digitalio.DigitalInOut(board.D12)
lcd_backlight = digitalio.DigitalInOut(board.D13)
PIN1 = 4
PIN2 = 15
PIN3 = 17
PIN4 = 27


# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN1, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 1

# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN2, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 2

# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN3, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 3

# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN4, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 4

lcd_columns = 16
lcd_rows = 2

lcd = character_lcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)

while True:
    button1_state = GPIO.input(PIN1)
    button2_state = GPIO.input(PIN2)
    button3_state = GPIO.input(PIN3)
    button4_state = GPIO.input(PIN4)

    
    if button1_state == 0:
       
    
        print("senha correta")
    else
       

 

Obrigado!

Léo

Editado: por Léo Nichele
Link para o comentário
Compartilhar em outros sites

Mudei o tópico para ficar melhor entendido e direcionar ao pessoal que conhece programação em Python.

Fiz vários testes com variáveis e incrementação de soma nas mesmas mas ainda não consegui acertar o codigo. Segue uma nova tentativa.

import RPi.GPIO as GPIO
import board
import digitalio
import adafruit_character_lcd.character_lcd as character_lcd
import time
GPIO.setwarnings(False)


lcd_rs = digitalio.DigitalInOut(board.D18)
lcd_en = digitalio.DigitalInOut(board.D23)
lcd_d7 = digitalio.DigitalInOut(board.D21)
lcd_d6 = digitalio.DigitalInOut(board.D20)
lcd_d5 = digitalio.DigitalInOut(board.D16)
lcd_d4 = digitalio.DigitalInOut(board.D12)
lcd_backlight = digitalio.DigitalInOut(board.D13)
PIN1 = 4
PIN2 = 15
PIN3 = 17
PIN4 = 27

A = ''
B = ''
C = ''
D = ''
E = ''    
# Configurando PIN como INPUT e modo PULL_UP interno
          
GPIO.setup(PIN1, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão pedestres


# Configurando PIN como INPUT e modo PULL_UP interno
    
GPIO.setup(PIN2, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão pedestres
         
# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN3, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão pedestres
          
# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN4, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão pedestres


lcd_columns = 16
lcd_rows = 2

lcd = character_lcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)

while True:
    if (GPIO.input(PIN1) == GPIO.LOW):
        A = 2
    else:
        A = 1
    if(GPIO.input(PIN2) == GPIO.LOW and A == 2):
        B = 3
    else:
        B = 1
    if(GPIO.input(PIN3) == GPIO.LOW and B == 3):
        C = 4
    else:
        C = 1
    if(GPIO.input(PIN4) == GPIO.LOW and C == 4):
        D = 5
    else:
        D = 1
    if(D == 5):
        lcd.message = "SENHA\nCORRETA  "
    else:
        lcd.message = "SENHA\nINCORRETA"

Link para o comentário
Compartilhar em outros sites

O que vc quer é uma sequencia de botoes pressionados?

Em algum momento o botão tem q ficar pressionado ou apenas pressionar e soltar. Falta vc fazer o debouncing de teclas.
Exemplo 1234:
Pressiona o botão 1 e verifica se está certo, se esta certo verifica botão 2, se esta certo verifica o botão 3, se esta certo verifica o botão 4... Isso???

Já tentou if aninhado?
Ou fazer concatenação da sequencia de teclas e depois comparar???

Flw...

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, nagkiller disse:

O que vc quer é uma sequencia de botoes pressionados?

Em algum momento o botão tem q ficar pressionado ou apenas pressionar e soltar. Falta vc fazer o debouncing de teclas.
Exemplo 1234:
Pressiona o botão 1 e verifica se está certo, se esta certo verifica botão 2, se esta certo verifica o botão 3, se esta certo verifica o botão 4... Isso???

Já tentou if aninhado?
Ou fazer concatenação da sequencia de teclas e depois comparar???

Flw...

Olá amigo, obrigado pela resposta. Hoje consegui terminar depois de sofrer um pouco. Eu precisava da sequencia 1234 mantendo pressionados dando assim senha correta caso contrario sequencia incorreta, tive de colocar times entre os botões pois do terceiro em diante não queria rodar e usei letras para variáveis pois valores como 0 e 1 não deu certo pois quando aperta fisicamente o botão ele gera varios valores.

Segue o resultado, ficou feio mais funcionou legal.

Valeu!

 

import RPi.GPIO as GPIO
import board
import digitalio
import adafruit_character_lcd.character_lcd as character_lcd
import time
from time import sleep
GPIO.setwarnings(False)


lcd_rs = digitalio.DigitalInOut(board.D18)
lcd_en = digitalio.DigitalInOut(board.D23)
lcd_d7 = digitalio.DigitalInOut(board.D21)
lcd_d6 = digitalio.DigitalInOut(board.D20)
lcd_d5 = digitalio.DigitalInOut(board.D16)
lcd_d4 = digitalio.DigitalInOut(board.D12)
lcd_backlight = digitalio.DigitalInOut(board.D13)

PIN1 = 4
PIN2 = 15
PIN3 = 5
PIN4 = 6

aux = ''
A = 0
B = 1
C = 2
D = 3
   
# Configurando PIN como INPUT e modo PULL_UP interno          
GPIO.setup(PIN1, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 1

# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN2, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 2
         
# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN3, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 3
         
# Configurando PIN como INPUT e modo PULL_UP interno
GPIO.setup(PIN4, GPIO.IN, pull_up_down = GPIO.PUD_UP) #botão 4


lcd_columns = 16
lcd_rows = 2

lcd = character_lcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)


                   
while True:

    if(GPIO.input(PIN1) == GPIO.HIGH and GPIO.input(PIN2) == GPIO.HIGH and GPIO.input(PIN3) == GPIO.HIGH): # Digitar Senha
        lcd.message ='Digite a\nsenha!'
       
    elif(GPIO.input(PIN1) == GPIO.LOW and GPIO.input(PIN2) == GPIO.HIGH and GPIO.input(PIN3) == GPIO.HIGH and GPIO.input(PIN4) == GPIO.HIGH): # botao 1
        aux = A
        print("botão1")
        lcd.clear()
        if(GPIO.input(PIN2) == GPIO.LOW and aux == A): # botao 2
            aux = B
            print("botão2")
            sleep(0.5)
            if(GPIO.input(PIN3) == GPIO.LOW and aux == B): # botao 3
                aux = C
                print("botão3")
                sleep(0.5)
                if(GPIO.input(PIN4) == GPIO.LOW and aux == C): # botao 4
                    aux = D
                    print("botão4")
                    lcd.message ='Senha\nCorreta!'
                    sleep(5)
                    lcd.clear()
               
   
    elif(GPIO.input(PIN1) == GPIO.HIGH and GPIO.input(PIN2) == GPIO.LOW and GPIO.input(PIN3) == GPIO.HIGH and GPIO.input(PIN4) == GPIO.HIGH):
        aux = A
        print("botão1")
        lcd.clear()
        if(GPIO.input(PIN2) == GPIO.LOW and aux == A): # botao 2
            aux = B
            print("botão2")
            sleep(0.5)
            if(GPIO.input(PIN3) == GPIO.LOW and aux == B): # botao 3
                aux = C
                print("botão3")
                sleep(0.5)
                if(GPIO.input(PIN4) == GPIO.LOW and aux == C): # botao 4
                    aux = D
                    print("botão4")
                    lcd.message ='Senha\nIncorreta!'
                    sleep(5)
                    lcd.clear()    
    elif(GPIO.input(PIN1) == GPIO.HIGH and GPIO.input(PIN2) == GPIO.HIGH and GPIO.input(PIN3) == GPIO.LOW and GPIO.input(PIN4) == GPIO.HIGH):
        aux = A
        print("botão1")
        lcd.clear()
        if(GPIO.input(PIN2) == GPIO.LOW and aux == A): # botao 2
            aux = B
            print("botão2")
            sleep(0.5)
            if(GPIO.input(PIN3) == GPIO.LOW and aux == B): # botao 3
                aux = C
                print("botão3")
                sleep(0.5)
                if(GPIO.input(PIN4) == GPIO.LOW and aux == C): # botao 4
                    aux = D
                    print("botão4")
                    lcd.message ='Senha\nIncorreta!'
                    sleep(5)
                    lcd.clear()    
    elif(GPIO.input(PIN1) == GPIO.HIGH and GPIO.input(PIN2) == GPIO.LOW and GPIO.input(PIN3) == GPIO.LOW and GPIO.input(PIN4) == GPIO.LOW):
        aux = A
        print("botão1")
        lcd.clear()
        if(GPIO.input(PIN2) == GPIO.LOW and aux == A): # botao 2
            aux = B
            print("botão2")
            sleep(0.5)
            if(GPIO.input(PIN3) == GPIO.LOW and aux == B): # botao 3
                aux = C
                print("botão3")
                sleep(0.5)
                if(GPIO.input(PIN4) == GPIO.LOW and aux == C): # botao 4
                    aux = D
                    print("botão4")
                    lcd.message ='Senha\nIncorreta!'
                    sleep(5)
                    lcd.clear()    
    elif(GPIO.input(PIN1) == GPIO.HIGH and GPIO.input(PIN2) == GPIO.HIGH and GPIO.input(PIN3) == GPIO.HIGH and GPIO.input(PIN4) == GPIO.LOW):
        aux = A
        print("botão1")
        lcd.clear()
        if(GPIO.input(PIN2) == GPIO.LOW and aux == A): # botao 2
            aux = B
            print("botão2")
            sleep(0.5)
            if(GPIO.input(PIN3) == GPIO.LOW and aux == B): # botao 3
                aux = C
                print("botão3")
                sleep(0.5)
                if(GPIO.input(PIN4) == GPIO.LOW and aux == C): # botao 4
                    aux = D
                    print("botão4")
                    lcd.message ='Senha\nIncorreta!'
                    sleep(5)
                    lcd.clear()                                      
     
 

  • Joinha 1
Link para o comentário
Compartilhar em outros sites

Participe agora da conversa!

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, faça login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restaurar formatação

  Apenas 75 emoticons máximos são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir apenas como um link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Você não pode colar imagens diretamente. Envie ou insira imagens do URL.

SOBRE O ELETRÔNICABR

EletrônicaBR é o melhor fórum técnico online, temos o maior e mais atualizado acervo de Esquemas, Bios e Firmwares da internet. Através de nosso sistema de créditos, usuários participativos têm acesso totalmente gratuito. Os melhores técnicos do mundo estão aqui!
Técnico sem o EletrônicaBR não é um técnico completo! Leia Mais...
×
×
  • Criar Novo...