Utföra kommando fram tills en knapp släpps.

Permalänk
Avstängd

Utföra kommando fram tills en knapp släpps.

Hej!

Håller på med ett litet projekt med min raspberry , jag kommer att köra ett SHELL program som jag ska kunna styra vid tagentbordet.

När man trycker ner knappen så börjar scriptet, jag vill inte att scriptet stannar förrens jag släpper knappen den ska dock inte loopa scriptet.

Bifogar koden nedanför:

prompt='Press w for forward or n for backward Q for exit ' echo -n "$prompt" while read -n1 char do case $char in n | N ) gpio write 1 0; clear echo 'Press w for forward or n for backward Q for exit ' ;; y | Y ) gpio write 2 0; clear echo 'Press w for forward or n for backward Q for exit ' ;; q | Q ) clear break; ;; * ) echo -ne "\nInvalid character '$char' entered. $prompt" esac done

Visa signatur

:: [ Intel Core i7 Extreme Edition 5960X watercooled ] [ ASUS RAMPAGE V EXTREME ] :: [32 GB DDR4 Corsair Dominator Platinum] :: [ ASUS ROG 780TI SLI] [ HDD system ASUS ROG SSD PCI-E 250
GB ] ::

Permalänk
Hedersmedlem

Inte den bästa lösningen kanske, men read har även en t-parameter som kan användas för att specificera hur lång tid man har på sig att svara.

Permalänk
Avstängd
Skrivet av Elgot:

Inte den bästa lösningen kanske, men read har även en t-parameter som kan användas för att specificera hur lång tid man har på sig att svara.

Nja , det stämmer inte riktigt överrens med hur jag tänkt.
Tack ändå för svaret!

Skickades från m.sweclockers.com

Visa signatur

:: [ Intel Core i7 Extreme Edition 5960X watercooled ] [ ASUS RAMPAGE V EXTREME ] :: [32 GB DDR4 Corsair Dominator Platinum] :: [ ASUS ROG 780TI SLI] [ HDD system ASUS ROG SSD PCI-E 250
GB ] ::

Permalänk
Hedersmedlem

Perl eller Python rekommenderas "egentligen" för detta, då det säkerligen finns färdiga moduler för att lyssna på tangentbordet.

Om du märker att du är på väg in för att lyssna på råa signaler från `/dev/input/event1` eller pipea output från `xev` till AWK el dyl så glöm vad du gör och gå över till Perl/Python .

Med det sagt, här är en fulhacksprototyp för att polla tangentbordsstatus med inbyggda shellfunktioner (`read -n` och `-t` är inte POSIX, men finns i Bash, och jag ser att du redan använder `-n`):

OLDSTTYMODE=$(stty -g) stty -echo while read -n1 -t1 myinput; do if [ "$myinput" = "w" ]; then #Gör vad du tänkt att du ska göra else break fi done stty $OLDSTTYMODE

För att kolla vad som händer ovan, kommentera bort "stty"-raderna och släng in något echo på relevanta ställen i satserna.

När väl ovanstående snurra satts igång så kommer den lyssna på tangentbordet, och om du antingen skriver ett tecken som inte är "w" eller du inte skriver något alls på en sekund så avbryter den. Detta emulerar att fånga KeyRelease med en fördröjning på upp till en sekund. För bättre lösningar, som sagt: Perl/Python.

EDIT: Alternativt, om du vill göra något speciellt när "w" släppts oavsett om "fel" tangent tryckts ner eller ingen tangent tryckts ner:

OLDSTTYMODE=$(stty -g) stty -echo while true; do read -n1 -t1 myinput if [ "$myinput" = "w" ]; then #Gör vad du tänkt att du ska göra else break fi done stty $OLDSTTYMODE

eftersom read returnerar false om den inte fått ett tecken.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Avstängd
Skrivet av phz:

Perl eller Python rekommenderas "egentligen" för detta, då det säkerligen finns färdiga moduler för att lyssna på tangentbordet.

Om du märker att du är på väg in för att lyssna på råa signaler från `/dev/input/event1` eller pipea output från `xev` till AWK el dyl så glöm vad du gör och gå över till Perl/Python .

Med det sagt, här är en fulhacksprototyp för att polla tangentbordsstatus med inbyggda shellfunktioner (`read -n` och `-t` är inte POSIX, men finns i Bash, och jag ser att du redan använder `-n`):

OLDSTTYMODE=$(stty -g) stty -echo while read -n1 -t1 myinput; do if [ "$myinput" = "w" ]; then #Gör vad du tänkt att du ska göra else break fi done stty $OLDSTTYMODE

För att kolla vad som händer ovan, kommentera bort "stty"-raderna och släng in något echo på relevanta ställen i satserna.

När väl ovanstående snurra satts igång så kommer den lyssna på tangentbordet, och om du antingen skriver ett tecken som inte är "w" eller du inte skriver något alls på en sekund så avbryter den. Detta emulerar att fånga KeyRelease med en fördröjning på upp till en sekund. För bättre lösningar, som sagt: Perl/Python.

EDIT: Alternativt, om du vill göra något speciellt när "w" släppts oavsett om "fel" tangent tryckts ner eller ingen tangent tryckts ner:

OLDSTTYMODE=$(stty -g) stty -echo while true; do read -n1 -t1 myinput if [ "$myinput" = "w" ]; then #Gör vad du tänkt att du ska göra else break fi done stty $OLDSTTYMODE

eftersom read returnerar false om den inte fått ett tecken.

Ska kolla på detta, finns ju python moduler färdiga till raspberryns gpio så det borde inte vara några svårigheter att få det att funka.

Skickades från m.sweclockers.com

Visa signatur

:: [ Intel Core i7 Extreme Edition 5960X watercooled ] [ ASUS RAMPAGE V EXTREME ] :: [32 GB DDR4 Corsair Dominator Platinum] :: [ ASUS ROG 780TI SLI] [ HDD system ASUS ROG SSD PCI-E 250
GB ] ::