Hallo zusammen!
Ich spiele seit einigen Tagen mit meinem Pi herum, bin aber ein ziemlicher Elektronik-Noob. Nun bin ich auf ein Problem gestoßen (Taster-Prellen) für das mir so recht nichts einfällt. Die Schaltung an der ich bastle, soll eigentlich nur zwei GPIO-Pins des Pi ansteuern, der dann auf einem Display vor- oder zurückblättert. Vorher, und einige Zeit nach dem letzten Tasterdruck, sollen die Seiten zeitlich gesteuert durchlaufen. So ist der Plan
Das Ansteuern des Displays habe ich hinbekommen, jetzt bin ich an der Blätter-Funktion und da bin ich momentan ein wenig ratlos.
Ich habe erstmal die Schaltung wie folgt aufgebaut (RasPi 2, 2 Taster, 2 Widerstände 1kOhm):
Pin29 und 39 an die Taster-"Ausgänge"
Die Taster-"Eingänge" mit je 1kOhm auf 3.3V (Pin1)
An dieser Stelle Verständnisfragen:
1.1) Da die Widerstände zwischen 3.3 und Bauteilen liegen, ist das dann schon eine als 'Pull-up' bezeichnete Schaltung?
2.2) Sind die Pins 29 und 31 Überhaupt auf Masse (hängt das dann von der Initialisierung im Code ab, denn ich könnte die Pins ja auch durch Schalten auf Masse nutzen?)? oder müsste ich neben der Verbindung zu den beiden Pins jeweils noch einen separate Verbindung zur Masse haben (habe solche Schaltungen ergoogelt, werde daraus aber nicht so ganz schlau).
Hier jetzt der Python-Code den ich nutze:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import datetime
BtnForw = 29 # Pin 29 fuer den Vorwaerts-Taster
BtnBack = 31 # Pin 31 fuer den Rueckwaerts-Taster
BounceTime = 200 # Prellen des Schalters abfangen
# Initialisierung
def setup():
GPIO.setmode(GPIO.BOARD) # Pins anhand der Position auf der Platine bezeichnen
GPIO.setup([BtnBack, BtnForw], GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Setzt den Modus der Pins auf input und ihren Status auf LOW
def loop():
GPIO.add_event_detect(BtnBack, GPIO.RISING, callback=FktBack, bouncetime=BounceTime) # Event-Listener fuer Rueckwaertsbutton, Ausloeser steigende Flanke
GPIO.add_event_detect(BtnForw, GPIO.RISING, callback=FktForw, bouncetime=BounceTime) # Event-Listener fuer Vorwaertsbutton, Ausloeser steigende Flanke
while True:
pass # Digitales Nasebohren
def FktForw(channel):
print(str(datetime.datetime.now()) + ': Button Vor (' + str(channel) + ') gedrückt ...')
def FktBack(channel):
print(str(datetime.datetime.now()) + ': Button Zurück (' + str(channel) + ') gedrückt ...')
def destroy():
GPIO.cleanup() # Ressourcen freigeben
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt: # Strg+C abfangen und geplantes terminieren
destroy()
print('\n\n\nAnd now for something completely different ...\n')
Alles anzeigen
Das Problem was ich nun habe ist scheinbar das Prellen - immer wieder löst ein Druck auf den Taster mehrfach das Event aus, hält man ihn einen Moment und lässt ihn dann erst los, kommt es ebenfalls zu mehrfachen Eventauslösungen. Auch wenn ich die Bouncetime erhöhe, scheint das nichts zu bringen.
Weil ich es irgendwo im Web gefunden hatte, habe ich auch mal einen herumliegenden Kondensator mit 100nF am Schalter mit auf das Steckbrett gesteckt (je einen Fuß auf eine Tasterseite, also parallel eben) - hat aber keine für mich erkennbare Wirkung gehabt.
Dann habe ich in die Leitung zwischen Taster und Pin 29 bzw 31 einen zusätzlichen 220 Ohm Widerstand geklemmt, dass schien die Problematik etwas zu entschärfen.
Aber letztlich habe ich irgendwie die Vermutung, dass ich irgendwas wesentliches nicht weiß oder begriffen habe und deswegen wollte ich jetzt mal lieber bei Menschen nachfragen die sich damit auskennen. Macht es aus irgendwelchen Gründen vielleicht mehr Sinn mit dem Taster auf Masse zu gehen?
Fließt durch die beiden Pins (29 und 31) in diesem Beispiel überhaupt ein Strom, oder liegt an denen nur eine Spannung an?
Sorry für die vielleicht seltsamen Fragen, aber wie gesagt, ich habe noch nicht so recht den Einblick
Und leider bin ich mir noch nicht mal sicher ob diese Sektion hier die richtige ist, vielleicht ist der Code ja OK, aber die Schaltung totaler Humbug (oder umgekehrt, oder beides :))
Besten Dank aber schon mal und viele Grüße
JC