Hallo, möchte, dass sobald auf einem Pin eine 1 anliegt auf der Console auch einmalig eine 1 angezeigt wird.
Aber bei diesem Code wird eine 1 angezeigt, solange der Pin den Wert 1 hat. Oder sollte man für so was den Interrupt benutzen? Wollte diesen Code in ein anderes Programm ergänzen. Würde der Interrupt dann den Ablauf des Programms stören?
Einmaliges Anzeigen währed der Abfrage
-
Cool_pi -
11. Februar 2015 um 19:40 -
Erledigt
-
-
Einmaliges Anzeigen währed der Abfrage? Schau mal ob du hier fündig wirst!
-
Die while kannste dann unterbrechen:
Bash
Alles anzeigen#!/bin/bash gpio=4 echo $gpio > /sys/class/gpio/export echo in > /sys/class/gpio/gpio$gpio/direction while true; do wert=$(cat /sys/class/gpio/gpio$gpio/value) if [ $wert -eq 1 ]; then echo 1 break fi if [ $wert -eq 0 ]; then echo 0 fi done
Besser wäre aber in der Tat Interrupts, da dieses Script ziemlich viel CPU Last erzeugen wird
-
Hallo, möchte, dass sobald auf einem Pin eine 1 anliegt auf der Console auch einmalig eine 1 angezeigt wird.
Aber bei diesem Code wird eine 1 angezeigt, solange der Pin den Wert 1 hat. Oder sollte man für so was den Interrupt benutzen? Wollte diesen Code in ein anderes Programm ergänzen. Würde der Interrupt dann den Ablauf des Programms stören?Verstehe ich nicht ganz.
Möchtest du auf eine wechselnde Flanke reagieren ?Das ist dein Script, ein wenig vereinfacht, ohne die überflüssigen if's
Bash#!/bin/bash gpio=4 echo "$gpio" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio4/direction while true; do echo $(cat /sys/class/gpio/gpio4/value) done
Hier mit Flankenwechsel, du merkst dir einfach den letzten Wert.
-
bash mag keine Leerzeichen beim setzen von Variablen ( = ) @ Der_Imperator
Bash
Alles anzeigen#!/bin/bash OLDVAL=0 gpio=4 echo $gpio > /sys/class/gpio/export echo in > /sys/class/gpio/gpio$gpio/direction while true; do NEWVAL=$(cat /sys/class/gpio/gpio$gpio/value) if [ $NEWVAL -ne $OLDVAL ]; then echo "Flankenwechsel von $OLDVAL nach $NEWVAL" OLDVAL=$NEWVAL fi done
//EDIT: und $OLDVAL=$NEWVAL wird auch nix
-
Yepp, du hast recht. Danke für die Korrektur.
Das ist das Elend wenn man mal eben schnell zwischen den Sprachen wechselt ohne das man es testet -
Ok, danke die korrigierte Variante funktioniert.
Allerdings muss ich später mit Zeitstempel arbeiten. Angeblich ist bash etwas zu langsam und kann nicht mikrosekunden genau reagieren? Ist das richtig? Was kann man alternativ machen? -
- Offizieller Beitrag
Python, C oder sonstige Programmiersprachen nehmen. Bash ist keine Programmiersprache
-
Was kann man alternativ machen?
Wie ich bereits sagte wäre es sinnvoller direkt mit Interrupts zu arbeiten, das schont die CPU. Bemüh dazu mal die Forumsuche nach: Python Interrupt
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!