Wie lese ich eine Schaltfläche über das GPIO?

15

Ich habe mich vor langer Zeit nicht mehr für Anfänger gehalten, aber ich glaube, ich bin nicht so schlau wie ich dachte, weil ich anscheinend ein außergewöhnliches Maß an Schwierigkeiten damit habe!

Also habe ich endlich die Prüfungen abgeschlossen und kann mit meinem neuen Spielzeug spielen. Als erstes habe ich ein LCD-Zeichen-Display über UART aufgebaut. Ich habe das kein Problem damit, also fällt es mir wirklich schwer herauszufinden, warum es mir mit diesem Knopf so schwer fällt!

Also habe ich eine Taste ähnlich wie bei einem Arduino eingerichtet. mit einem 1k Widerstand an Masse. Ich habe mein Multimeter verwendet, um sicherzustellen, dass der Knopf funktioniert und die richtige Menge an Strom abgibt, die es ist. Ich stecke SSH in meine Shell, stecke den Button in GPIO Pin 7 und gehe in Python. Folgendes habe ich versucht:

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

Dies gibt mir eine Endlosschleife, Falseunabhängig davon, wie ich den Knopf drücke. Ich habe es auch mit probiert GPIO.PUD_UPund Truestattdessen eine Endlosschleife von bekommen . Ich habe es auch mit probiert GPIO.PUD_OFFund mehr bekommen False.

Vermisse ich hier etwas?

Michael
quelle
Sie haben also den Schalter in Reihe mit dem 1k-Widerstand gegen GND geschaltet? Das sollte funktionieren GPIO.PUD_UP. Mit welcher Spannung siehst du GPIO.PUD_UPan und die Taste gedrückt?
John La Rooy
Leicht verwirrt; Womit ist der Switch verbunden?
Alex Chamberlain
Hallo Michael und herzlich willkommen bei Raspberry Pi ! Ich habe mir erlaubt, Ihre beiden Konten zusammenzuführen. Vielen Dank!

Antworten:

6

Mein GPIO hat nicht pinout, ich musste es ändernsetmode

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)

Da Sie GPIO.BOARDPin 7 verwenden, ist dieser mit gekennzeichnet GPIO 4(GPCLK0). Wenn Sie verwenden möchten GPIO 7(CE1), sollten Sie GPIO.setmode(GPIO.BCM)stattdessen verwenden

Bildbeschreibung hier eingeben

Ich habe den Code getestet, indem ich einen 1k-Widerstand von 3V3 Powerbis berührt habeGPIO 4(GPCLK0)

John La Rooy
quelle
Ich bin mir ziemlich sicher, dass Sie richtig liegen, warum es nicht funktioniert hat. Ich hatte den Eindruck, GPIO.BOARDes handele sich um die Pinbelegung der Platine selbst, wie auf den Bildern gezeigt, nicht um das physikalische Pin-Nummerierungsschema. Wenn ich von der Arbeit nach Hause komme, werde ich es ausprobieren und ich bin mir sicher, dass es funktionieren wird.
Michael
1

Ich verwende niemals "pull_up_down = GPIO.PUD_DOWN" im Setup des Pins. Versuche dies:

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

Stellen Sie sicher, dass PinNum für das BCM-GPIO geeignet ist.

Matthew
quelle