Skript dauerhaft ausführen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du kurze Impulse ignorieren willst, musst du die filtern. Da geht kein weg dran vorbei. Ich habe deine Frage diesbezueglich uebrigens missverstanden, ich dachte, das ist ein Problem fuer dich, und nicht ein gewuenschtes verhalten, das 10ms-Impulse ignoriert werden.

Natuerlich laesst sich das problemlos auch programmieren, allerdings kommen wir dann in die Wunderwelt der timer-programmierung, und da greifen die hier so salopp vorgestellten ansaetze nicht mehr.

Was stattdessen hilft ist entweder ein RC-Glied zu verbauen (ich bin da kein Experte, aber damit bekommt man ja einen Bandpass, und den kannst du so auslegen, das er eben Frequenzen nur unter zB 50 Hz durchlaesst).

Oder du versuchst mal das hier: https://gpiozero.readthedocs.io/en/stab ... nputdevice

gpiozero ist eh viel besser als das leider oft verwante RPI.GPIO.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Noch ein kleiner Nachtrag: wenn du damit klarkommst, dass du sowohl die steigende als auch die fallende Flanke beruecksichtigen kannst, dann ist das Problem milde einfacher. Dann kannst du dir bei steigender Flanke einfach einen Timestamp merken, und bei fallender die verflossene Zeit messen. Eine Verarbeitung findet dann nur statt, wenn genug Zeit vergangen ist.

Das heisst aber, das zB eine Klingel erst beim loslassen schellt.
Pascal09
User
Beiträge: 20
Registriert: Donnerstag 4. Januar 2018, 19:04

Also ich verwende ja eh Schalter und keine Taster.
Desswegen soll ja nur was ausgeführt werden wenn der Status zB eine gewisse Zeit besteht.

Kannst du mir vielleicht ein Beispiel geben wie ich das (11.8. SmoothedInputDevice) einsetzen muss?
Pascal09
User
Beiträge: 20
Registriert: Donnerstag 4. Januar 2018, 19:04

Oder ich hab grad noch eine andere Idee.
Wie kann ich abfragen ob eine steigende oder fallende Flanke erkannt wurde?


http://www.netzmafia.de/skripten/hardwa ... O_int.html
Im letzten Fall muss dann innerhalb der Callback-Funktion der entsprechende Port ausgelesen werden, um festzustellen, ob der Auslöser eine steigende Flanke (Port-Wert "1") oder eine fallende war (Port-Wert "0").


Leider steht da nicht wie man es auslesen kann.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Beispiel von Sirius3 zeigt das doch. Er steckt den Pegel doch in die Queue. Und auch gpiozero kann das natuerlich.

Nachtrag: und in deinem eigenen Link wird das doch auch gezeigt.
Pascal09
User
Beiträge: 20
Registriert: Donnerstag 4. Januar 2018, 19:04

Ja hab ich wohl überlesen...

also es geht mit der Funktion measure().
Aber wie genau frage ich jetzt den Port daraus ab?

NACHTRAG:
OK habs kapiert...das hilft mir nicht weiter :D.
Ich dachte das vielleicht die Störung so kurz ist das im Programm eine LOW Flanke erkannt wird aber wenn er in die def springt ist der Zustand schon wieder High. Wär das möglich?
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin mir nicht sicher was du meinst. Aber ich habe gerade geschaut: die eh beste GPIO-Bibliothek (ja, gpiozero ist schon deutlich besser als,was du benutzt, aber treotzdem...) ist pigpio. Und das kennt eine glitch_filter:

http://abyz.me.uk/rpi/pigpio/python.htm ... tch_filter
Pascal09
User
Beiträge: 20
Registriert: Donnerstag 4. Januar 2018, 19:04

Wenn ich pigpio verwende muss ich aber alle anderen Befehle auch anpassen oder? Also man kann immer nur eine Bibliothek verwenden oder?!
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Wenn das dauerhaft laufen soll, ist das aber eh zu empfehlen. Mit RPI.GPIO gibts schonmal Aussetzer.
Pascal09
User
Beiträge: 20
Registriert: Donnerstag 4. Januar 2018, 19:04

habe es jetzt mit pigpio gemacht. Läuft jetzt 1a danke :!: :!: :!:
Antworten