Jak odczytać przycisk za pomocą GPIO?

15

Dawno temu zastanawiałem się nad tym rodzajem rzeczy dla początkujących, ale wydaje mi się, że nie jestem tak mądry, jak mi się wydawało, ponieważ wydaje mi się, że mam z tym wyjątkowy problem!

W końcu skończyłem egzaminy i mogłem grać z moją nową zabawką, więc pierwszą rzeczą, jaką zrobiłem, było ustawienie wyświetlacza LCD nad UART. Nie mam z tym problemu, więc ciężko mi jest zrozumieć, dlaczego tak trudno mi się z tym przyciskiem!

Więc ustawiłem przycisk podobny do tego, który można by zrobić z arduino; z rezystorem 1k łączącym z masą. Użyłem multimetru, aby upewnić się, że przycisk działa, i wyzwolić odpowiednią ilość energii. Włączam SSH do mojej powłoki, podłączam przycisk do GPIO pin 7 i przeszedłem do Pythona. Oto, co próbowałem:

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

Daje mi to nieskończoną pętlę Falseniezależnie od tego, jak naciskam przycisk. Próbowałem też z GPIO.PUD_UPtym i Truezamiast tego dostałem nieskończoną pętlę . Próbowałem też GPIO.PUD_OFFi dostałem więcej False.

Czy coś mi umyka?

Michael
źródło
Więc masz przełącznik szeregowy z rezystorem 1k do GND? To powinno działać GPIO.PUD_UP. Jakie napięcie widzisz po GPIO.PUD_UPwłączeniu i naciśnięciu przycisku?
John La Rooy,
Lekko zmieszany; do jakiego przełącznika jest podłączony?
Alex Chamberlain,
Witaj Michael i witaj w Raspberry Pi ! Pozwoliłem na połączenie twoich dwóch kont. Dzięki!

Odpowiedzi:

6

Moje GPIO nie ma pinout, musiałem to zmienićsetmode

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)

Ponieważ używasz GPIO.BOARDpinu 7, ten jest oznaczony GPIO 4(GPCLK0). Jeśli chciałeś użyć GPIO 7(CE1), powinieneś użyć GPIO.setmode(GPIO.BCM)zamiast tego

wprowadź opis zdjęcia tutaj

Przetestowałem kod, dotykając rezystora 1k od 3V3 PowerdoGPIO 4(GPCLK0)

John La Rooy
źródło
Jestem prawie pewien, że masz rację, dlaczego to nie działało. Byłem pod wrażeniem, GPIO.BOARDże pinout samej płyty, jak pokazano na zdjęciach, a nie fizyczny schemat numeracji pinów. Kiedy wrócę do domu z pracy, wypróbuję go i jestem pewien, że zadziała.
Michael
1

Nigdy nie używam „pull_up_down = GPIO.PUD_DOWN” w konfiguracji pinu. Spróbuj tego:

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

Jak powiedział gnibbler, upewnij się, że PinNum jest dla GPIO BCM.

Mateusz
źródło