Stap 5: Code
Ik zal niet ingaan op de details over Raspbian Linux commando's of uitvoerbare shell-scripts schrijven in dit document. Er is overvloed van informatie die er over het. Vergeet niet om Wijzig de modus van Maak het uitvoerbaar met de opdracht chmod a + x wanneer u klaar bent met het definitieve script bewerken.
Wanneer ik de video video bestanden hebt uitgepakt, werden ze vernoemd naar het corresponderende nummer van de bron-DVD met de extensie .mp4. Op de pi, Raspbian uitgevoerd, werden de uitgepakte en bewerkte video's overgedragen naar een submap genaamd Video onder de standaardgebruiker (gebruikersnaam pi).
Ik schreef een eenvoudige bash shell-script dat gebruikmaakt van de gpio opdracht uit de WiringPi bibliotheek om continu lezen de GPIO pin verbonden met de PIR-sensor en te lezen van de 4 voelbare knoppen op het bord van de PiFace. De uitvoerbare shellscript heet scareme en bevindt zich in de basismap voor de gebruiker pi.
Notities
De bibliotheek en gpio nut ondersteunen de PiFace addon board. U toegang tot de PiFace GPIO pinnen door 200 aan het pin-nummer toe te voegen. Het script maakt ook gebruik van de Piface vier voelbare input knoppen (i/o-pinnen 200-203). De code definieert de input knoppen als volgt:
- 200 - handmatige trigger
- 201 - volume omhoog
- 202 - volume omlaag
- 203 - Schakel video toestel. De knop schakelt u tussen 3 verschillende soorten video's die kunnen worden gebruikt voor het effect (niet eng, eng en extra lang)
In het script, zijn de voelbare knoppen aanvankelijk ingesteld om te gebruiken van de board ingebouwde pull-up weerstanden. Daarom lezen dat de invoerwaarde voor de knop is altijd 1 totdat iemand drukt op een knop en schakelt het over naar 0. (Vandaar de omgekeerde logica voor het lezen van deze pinnen).
scareme script
#!/bin/bash # Detect motion on PiFace and play scary video. # Define PiFace Pins MotionPin=207 TriggerPin=200 VolUpPin=201 VolDownPin=202 ModePin=203 Volume=1500 Volstep=50 CurrentState=0 CurrentMode=0 DoFlip="" # If you need to flip the video upside down, uncomment the following line # DoFlip="--orientation 180" # Assign numbered videos to one of three video modes. Also define the order in which the videos appear VidMode=0 # 0=Not Scary, 1=Scary, 2=Extra Long VidOrder[0]="14 30 46 62" VidOrder[1]="12 32 44 64 16 28 48 60" VidOrder[2]="6 22 38 54" PriorVid=$VidMode # Use piface internal pullup resistors on tactile button pins gpio -p mode $TriggerPin up gpio -p mode $VolUpPin up gpio -p mode $VolDownPin up gpio -p mode $ModePin up # Main Program Loop clear while : ; do for i in ${VidOrder[$VidMode]}; do if [ $VidMode -ne $PriorVid ] ; then echo -ne "Video Set $VidMode\r" ; PriorVid=$VidMode; break ; fi while : ; do PriorState=$CurrentState PriorVolume=$Volume PriorMode=$CurrentMode let "CurrentState=(! `gpio -p read $TriggerPin`) | (`gpio -p read $MotionPin`)" let "Volume += ( (! `gpio -p read $VolUpPin`) - (! `gpio -p read $VolDownPin`) )* $Volstep" let "CurrentMode=(! `gpio -p read $ModePin`)" if [ $Volume -ne $PriorVolume ] ; then echo -ne "$Volume\r" ; fi if [ $CurrentMode -gt $PriorMode ] ; then let "VidMode = ($VidMode + 1) % 3"; break ; fi if [ $CurrentState -gt $PriorState ] ; then omxplayer -b --vol $Volume $DoFlip ./Video/$i.mp4 >> /dev/null clear break fi done done done