Ir para conteúdo
View in the app

A better way to browse. Learn more.

EletrônicaBR.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Navegação Limpa e Sem Anúncios! (Cadastre-se)

O melhor fórum técnico do mundo está de cara nova e de portas abertas! Estamos de cara nova e com ferramentas ainda mais poderosas para a sua bancada. Faça o seu cadastro de forma rápida e simples para acessar o maior e mais atualizado acervo de Esquemas Elétricos, BIOS e Firmwares da internet.

Aqui, o conhecimento vale muito: através do nosso sistema de créditos, membros participativos ganham acesso totalmente gratuito aos downloads. Venha trocar experiências com os melhores especialistas do mercado!

👉 Técnico sem o EletrônicaBR não é um técnico completo!

 

Ajuda com python, botões na raspberry

Featured Replies

Postado

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

Postado
  • Autor

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"

Postado

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...

Postado
  • Autor
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()                                      
     
 

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

Account

Navigation

Pesquisar

Pesquisar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.