Hallo Himbeer-Freunde, Linux-Freaks und Forumsbewohner,
in den vergangenen Tagen habe ich mir überlegt, wie man einen Reset-Taster an der GPIO-Schnittstelle anschließen und so programmieren kann, das er z.B.nach einem kurzen Tasten rebootet, nach längerem Drücken sauber herunterfährt.
Und natürlich wollte ich das Ganze in Icon programmieren (weil ich Python nicht kann und C nicht mag).
Herausgekommen sind:
- Schaltplan als Einzeiler:
GPIO14 ==> R=330 Ohm ==> Kathode-LED-Anode ==> 3.3V ==> Taster ==> R=620 Ohm ==> GPIO10 ==> R=11 kOhm ==> GND
- ein überschaubar kurzes Progrmm
link GPIO
$define Taster 10
$define LED 14
procedure main()
dauer := 0
repeat
{ status := abs(GPIO(Taster) - 1)
GPIO(LED, status)
delay(500)
if status = 0 then dauer +:= 1
else
{ if dauer > 0 then
{ if dauer < 3 then system("sudo shutdown -r now")
else system("sudo shutdown -h now")
dauer := 0
}
}
}
end
Alles anzeigen
Was macht das Programm im Einzelnen?
Es öffnet die GPIO-Library (auch in Icon geschrieben). Zwei Variablen werden definiert, die darauf hinweisen, dass am GPIO10 ein Taster und eine LED am GPIO14 hängt.
In einer Endlosschleife wird der dem Taster zugeordnete GPIO10 abgefragt und invertiert. Dieser invertierte Wert wird auf dem GPIO14 gesetzt (ich möchte, dass beim Drücken des Tasters (Signal auf HIGH) die LED leuchtet (Signal auf LOW).
Während der Taster gedrückt wird, zählt eine Variable solange hoch, bis der Taster losgelassen wird.
Falls der Taster losgelassen wird, wird beim kurzen Tasten rebootet, bei längerem Drücken sauber heruntergefahren.
Natürlich kann man hier die Dauer des Taster-Drückens weiter aufteilen und andere Aktionen erfolgen lassen.
Das Programm ist auch deswegen so kurz, weill die GPIO-Library sehr viel (in meinen Augen unnütze) Arbeit abnimmt. So gibt es eigentlich nur einen Befehl GPIO(), der sowohl zum Lesen als auch zum Schreiben verwendet werden kann.
Syntax 1: w := GPIO(pin) zum Auslesen des GPIO-Pins pin
Syntax 2: GPIO(pin, wert) zum Setzen eines Wertes auf dem GPIO-Pin pin.
Die Library prüft, ob Version 1 oder Version 2 des Raspberry Pi vorliegt und erlaubt die in den einschlägigen Tabellen angegebenen Pin-Bezeichnungen.
Alles andere wie GPIO exportieren oder Richtung definieren erledigt die GPIO-Library ebenfalls im Hintergrund.
Beste Grüße
Andreas
____________
Hier die GPIO-Library (bitte nach /home/pi/icon9_51/lib kopieren und die Dateiendung .txt entfernen - leider lässt sich die Datei mit der .u1 oder .u2 nicht hochladen):er
GPIO.u1.txt
GPIO.u2.txt
EDIT 08-OKT-2017: Wer die aktuellste in Icon programmierte GPIO-Library nutzen möchte, suche bitte danach. Sobald ich meine eigenen Beiträge wieder gefunden habe, verlinke ich auch hier darauf.