Come faccio a leggere un pulsante tramite GPIO?


15

Molto tempo fa mi sono considerato fuori da questo genere di cose per principianti, ma credo di non essere così intelligente come pensavo perché sembra che abbia un livello eccezionale di problemi!

Quindi ho finalmente finito gli esami e posso giocare con il mio nuovo giocattolo, quindi la prima cosa che ho fatto è stato ottenere un display a caratteri LCD su UART. Ho funzionato senza problemi, quindi sto facendo davvero fatica a capire perché sto facendo così fatica con questo pulsante!

Quindi ho impostato un pulsante simile a quello che si farebbe con un arduino; con una resistenza da 1k collegata a terra. Ho usato il mio multimetro per assicurarmi che il pulsante funzionasse e che emettesse la giusta quantità di energia, che è. Ho SSH nella mia shell, ho inserito il pulsante nel pin GPIO 7 e sono entrato in Python. Ecco cosa ho provato:

GPIO.pinout(GPIO.BOARD)
GPIO.setup(7,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
while 1==1:
    inputval = GPIO.input(7)
    print inputval

Questo mi dà un ciclo infinito di Falseindipendentemente da come premo il pulsante. L'ho provato anche con GPIO.PUD_UPe ho ottenuto un ciclo infinito di Trueinvece. Ho anche provato con GPIO.PUD_OFFe ne ho ottenuto di più False.

Mi sto perdendo qualcosa qui?


Quindi hai l'interruttore in serie con la resistenza da 1k a GND? Dovrebbe funzionare con GPIO.PUD_UP. Quale tensione vedi con GPIO.PUD_UPacceso e il pulsante premuto?
John La Rooy,

Leggermente confuso; a cosa è collegato lo switch?
Alex Chamberlain,

Ciao Michael e benvenuto su Raspberry Pi ! Mi sono preso la libertà di fondere i tuoi due account. Grazie!

Risposte:


6

Il mio GPIO non ha pinout, ho dovuto cambiarlo insetmode

import time
from RPi import GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
while True:
    inputval = GPIO.input(7)
    print inputval
    time.sleep(1)

Poiché stai usando il GPIO.BOARDpin 7 è quello etichettato GPIO 4(GPCLK0). Se intendevi usare GPIO 7(CE1), dovresti usare GPIO.setmode(GPIO.BCM)invece

inserisci qui la descrizione dell'immagine

Ho testato il codice toccando una resistenza da 1k da 3V3 PoweraGPIO 4(GPCLK0)


Sono quasi certo che tu abbia ragione sul perché non funzionasse. Avevo l'impressione che GPIO.BOARDfosse per il pinout della scheda stessa, come mostrato nelle immagini, non per lo schema di numerazione dei pin fisici. Quando torno a casa dal lavoro lo proverò e sono sicuro che funzionerà.
Michael,

1

Non ho mai usato "pull_up_down = GPIO.PUD_DOWN" nella configurazione del pin. Prova questo:

GPIO.setmode(GPIO.BCM)
GPIO.setup(PinNum,GPIO.IN)
while 1==1:
    if GPIO.input(PinNum)==1:
        print "True"
    else:
        print "False"

Come ha detto gnibbler, assicurati che PinNum sia per BCM GPIO.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.