Comment lire un bouton via le GPIO?

15

Je me considérais comme étant hors de ce genre de choses de niveau débutant il y a longtemps, mais je suppose que je ne suis pas aussi intelligent que je le pensais parce que je semble avoir un niveau exceptionnel de problèmes avec ça!

J'ai donc finalement terminé les examens et je peux jouer avec mon nouveau jouet, donc la première chose que j'ai faite a été de configurer un écran LCD avec UART. J'ai eu ce travail sans problème, donc j'ai vraiment du mal à comprendre pourquoi j'ai du mal avec ce bouton!

J'ai donc mis en place un bouton similaire à celui d'un arduino; avec une résistance 1k reliée à la terre. J'ai utilisé mon multimètre pour m'assurer que le bouton fonctionnait et éteindre la bonne quantité d'énergie, ce qui est le cas. Je SSH dans mon shell, branchez le bouton dans la broche GPIO 7 et je suis allé en python. Voici ce que j'ai essayé:

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

Cela me donne une boucle sans fin Falsequelle que soit la façon dont j'appuie sur le bouton. Je l'ai également essayé avec GPIO.PUD_UPet j'ai obtenu une boucle sans fin à la Trueplace. J'ai aussi essayé avec GPIO.PUD_OFFet j'en ai eu plus False.

Est-ce que j'ai râté quelque chose?

Michael
la source
Vous avez donc le commutateur en série avec la résistance 1k à GND? Cela devrait fonctionner avec GPIO.PUD_UP. Quelle tension voyez-vous avec GPIO.PUD_UPallumé et le bouton enfoncé?
John La Rooy
Légèrement confus; À quoi le commutateur est-il connecté?
Alex Chamberlain
Bonjour Michael et bienvenue sur Raspberry Pi ! J'ai pris la liberté de fusionner vos deux comptes. Merci!

Réponses:

6

Mon GPIO n'a pas pinout, je devais le changer poursetmode

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)

Puisque vous utilisez la GPIO.BOARDbroche 7, celle-ci est étiquetée GPIO 4(GPCLK0). Si vous vouliez utiliser GPIO 7(CE1), vous devriez utiliser à la GPIO.setmode(GPIO.BCM)place

entrez la description de l'image ici

J'ai testé le code en touchant une résistance 1k de 3V3 PoweràGPIO 4(GPCLK0)

John La Rooy
la source
Je suis presque certain que vous avez raison sur le fait que cela ne fonctionnait pas. J'avais l'impression que GPIO.BOARDc'était pour le brochage de la carte elle-même comme indiqué sur les photos, pas pour le schéma de numérotation des broches physiques. Quand je rentrerai du travail, je l'essayerai et je suis sûr que cela fonctionnera.
Michael
1

Je n'utilise jamais "pull_up_down = GPIO.PUD_DOWN" dans la configuration de la broche. Essaye ça:

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

Comme l'a dit gnibbler, assurez-vous que PinNum est pour le BCM GPIO.

Matthieu
la source