Hallo Leute,
für meinen Pi möchte ich eine "Steuerung" realisieren. Im Prinzip sollen
Taster einen Impuls an den Pi senden der einen Reboot auslöst. Je
nachdem welcher Taster gedrückt wird, soll ein anderer Reboot erfolgen
(2 verschiedene PIN´s am PI).
Nachdem ich gut 10 Jahre nicht mehr wirklich programmiert habe war schon
das eine Herausforderung was ich als Code angehängt habe. Andererseits
denke ich, ist es eine gute Übung, da es im Prinzip ähnliche Routinen
sind und es einfach Tasterabfragen.
Meine Frage ist nun: ENTPRELLEN... im Internet findet man tausende
Philosopienen (die einfachste ist ein delay). Allerdings würde ich gerne
eine Lösung anstreben, die für diesen Anwendungsfall passt und nicht zu
kompliziert ist. Hier würde ich einen Tipp benötigen. Könnt ihr mir hier
helfen? Vielen Dank!
Code:
Tekkineo T. schrieb:> Je> nachdem welcher Taster gedrückt wird, soll ein anderer Reboot erfolgen> (2 verschiedene PIN´s am PI).
Wozu will man denn sowas verrücktes?
Das erinnert mich an mein Praktikum im Studium. Da gab es einen
Mainframe, an 2 Tagen wurde VMS gebootet und an 3 Tagen UNIX.
Tekkineo T. schrieb:> Meine Frage ist nun: ENTPRELLEN... im Internet findet man tausende> Philosopienen (die einfachste ist ein delay).
Im Internet findet man leider viel Müll und nur wenige Perlen.
Der Grund ist, daß viele das Problem nicht verstehen (wollen) und
Entprellen für popeleinfach halten, was man ohne Überlegen einfach so
hinrotzen kann.
Tekkineo T. schrieb:> Allerdings würde ich gerne> eine Lösung anstreben, die für diesen Anwendungsfall passt
Das ist der falsche Ansatz. Da muß man ja bei jedem Programm von neuem
darüber nachdenken, d.h man verschwendet nur unnötig Entwicklungszeit.
Besser ist eine Lösung, die für jeden Anwendungsfall paßt und so wenig
wie möglich Seiteneffekte hat.
Was genau bedeutet "ein anderer Reboot"?
Worin unterscheiden sich die beiden Reboot's und reden wir wirklich vom
Rebooten im Sinne des "reboot" Kommandos?
Warum du da etwas entprellen willst, ist mir völlig rätselhaft. Man muss
Taster nur entprellen, wenn die ANzahl der Tastendrücke eine Rolle
spielt. Also wenn man damit zum Beispiel die Zeit einer Uhr einstellt.
Ich verstehe deinen Anwendungsfall aber so: Jeder Taster löst genau eine
Reaktion aus. Dann mach das doch. Was gibt es da zu entprellen? Bis der
Rechner rebootet hat, ist der Taste schon laaaaaange fertig mit Prellen.
> Ach das hatten wir doch schon 1000 mal erklärt.
Der Tekkineo kennt deine Entprellroutine und vor allem die Erklärungen
dazu offensichtlich noch nicht. Sonst hätte er warscheinlich nicht
gefragt.
@Tekkineo: Such mal nach "Peter Dannegger Entprellen", der hat sich mit
dem Thema wirklich intensiv auseinandergesetzt und eine Menge gutes dazu
geschrieben.
Allerdings sehe ich in dieser konkreten Anwendung tatsächlich keinen
Bedarf, überhaupt zu entprellen. Vielleicht liegt es auch daran, dass du
nur einen Teil des Programmes gezeigt hast.
Stefan U. schrieb:> Jeder Taster löst genau eine> Reaktion aus. Dann mach das doch. Was gibt es da zu entprellen?
Es gibt wohl Anwendungsfälle, da soll eine Taste eine Aktion ausführen,
aber eben nur einmal pro Drücken.
Hallo,
nun, einmal soll ein Reboot in Kodi erfolgen und einmal nach Raspian
bzw. Recalbox. der Pi so an seinen IO "gucken". Jenachdem welcher Io
eben ausgelöst wird soll ein script starten, dass einen Reboot mit dem
entsprechend passenden OS ausführt. Daher diese idee.
Grundsätzlich habt ihr recht. Ein Taster soll eine Aktion auslösen. Dass
man dann diese Taste 5Minuten lang gedrückt hält ist eher
unwahrscheinlich :). Aber man soll einen Anwender (oder Kinder) nicht
unterschätzen :).
Ohne entprellen wäre es mir sicherlich lieber, da dann der Aufwand auch
sinkt (und ich das iwann nachprogrammieren kann. Danke für den Tipp
bzgl. Peter Dannegger. Ich werde mir das mal zu gemüte füren und hoffe
etwas schlauer zu werden was die Wissenschaft des Entprellen angeht.
spätestens bei einem Drehimpulsgeber holt mich das ganze ja doch wieder
ein...
Eine Taste wird ja nicht entprellt, weil sie von irgendwem 5Min lang
gedrückt werden könnte, sondern weil sie auch schon bei einem kurzem
Druck "schwingt".
Entprellen ist eigtl. keine große Sache und sollte m.M. nach so gut wie
immer gemacht werden.
Damit schließt man schon einmal eine große Fehlerquelle, bzw.
ungewolltes Programmverhalten aus und mit der Zeit erachtet man es als
Routine und kann sich auf den Rest des Programmes, bzw. der Schaltung
konzentrieren.
Tekkineo T. schrieb:> Ich werde mir das mal zu gemüte füren und hoffe> etwas schlauer zu werden was die Wissenschaft des Entprellen angeht.
Ausserdem solltest du dich dringend schlau machen, was es mit
Bit-Schiebe-, Bit-Setz- und Bit-Löschbefehlen auf sich hat.
Da Du ja eh noch Software auf dem RPi brauchst, um die Signale
auszuwerten, kannst Du die Taster auch gleich an dessen GPIOs hängen.
Ich weiß nicht, was da ein extra Controller bringen soll.
@Clemens:
Ja, ich bin auch der Meinung dass die Enptrellung dazu gehört (sicher
ist eben sicher)... vorteil ist dass ich das Nachträglich ja recht
einfach implementieren könnte, sofern die Experten hier meinen es ist
(noch) nicht notwendig.
@Mario:
wie gesagt möchte ich die Steuerung aus zweierlei Gründen realisieren:
Primär: umd den Pi zu entlasten
Sekundär: damit ich mich mit der Materie besser beschäftige
@Route66:
warum meinst du das Bit-Schiebe-, Bit-Setz- und Bit-Löschbefehlen hier
sehr von vorteil sind?
Nachdem ich heute heim gekommen bin hoffe ich das Programm am WE mal auf
die schnelle auf den Mega32 spielen zu können und dann mal kurz
probelaufen zu lassen. Die Beschaltung ist ja recht schnell aufgebaut
bzw. am STK500 kann ich das ja ganz gut sehen was passiert
1) Beide Tasten lösen den RESET aus.
Entprellen nicht nötig, muss SOFORT wirken.
2) Beim (Re)-BOOT wird geschaut, welche Taste (noch) gedrückt ist.
(Default - keine Taste: Code 1.)
3) Es wird gewartet, bis beide Tasten "lange genug" wieder
losgelassen, also unbetätigt sind (z.B. 100...500 ms), dann
wird je nach Taste in den gewünschten Code 1 / 2 gesprungen.
Fertig.
Und wenn beide Tasten gedrückt werden, kommt halt was Unbestimmtes
raus. Das kann auch niemand "entprellen"...