Hallo,
für meinen DIY Camcorder möchte ich eine Einknopfbedienung konstruieren, in dem Sinne:
a) 2x kurz hintereinander drücken: Aufnahme Start
b) 1x drücken: Aufnahme Stopp
c) 1x Lang drücken: System herunterfahren
für die Pin Abfrage verwende ich modifizierte Skripte dieser Seite:
http://indibit.de/raspberry-pi-g…ingaenge-lesen/
und zwar folgendes:
Code
#!/usr/bin/env python
#coding: utf8
import os
import time
import RPi.GPIO as GPIO
# Zählweise der Pins festlegen
GPIO.setmode(GPIO.BOARD)
# Pin 18 (GPIO 24) als Eingang festlegen
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
# Schleifenzähler
i = 0
# Ereignis-Prozedur für Eingang HIGH
def doIfHigh(channel):
# Zugriff auf Variable i ermöglichen
global i
# Wenn Eingang HIGH ist, Ausgabe im Terminal erzeugen und Systemaufruf
#print "Eingang HIGH " + str(i)
os.system("bash -c /home/pi/scripts/pushevent &")
# Schleifenzähler erhöhen
i = i + 1
# Ereignis deklarieren
GPIO.add_event_detect(18, GPIO.RISING, callback = doIfHigh, bouncetime = 300)
# Eigentlicher Programmablauf
while 1:
time.sleep(0.1)
Alles anzeigen
Das Skript "pushevent" ist eine Bash Skript, welches zwischen Doppel und Einfachklick unterscheidet. Ich mach das mit Bash, weil ich keine Ahnung von python habe
"pushevent" sieht folgendermaßen aus:
Code
#/bin/bash
if [ -f /tmp/push.tmp ]; then
echo "Start Aufnahme .."
raspivid -o video.h264 -t 3600000 -w 1280 -h 720 &
touch /tmp/push2.tmp
exit 0
else
(touch /tmp/push.tmp; sleep 1; rm /tmp/push.tmp) &
sleep 1;
if [ -f /tmp/push2.tmp ]; then
rm /tmp/push2.tmp;
exit 0;
else
#if [ `ps -ax | grep raspivid | wc -l` = "2" ]; then
if [ -f video.h264 ]; then
echo "Stoppe Aufnahme .."
killall raspivid
mv video.h264 temp.h264
(MP4Box -fps 30 -add temp.h264 `date +%d%h%y_%H%M-%Ss`.mp4 && rm temp.h264) &
else
echo "Es laeuft nix!"
fi
fi
fi
Alles anzeigen
a) und b) funktionieren so einwandfrei. Die Frage ist jetzt: Wie kann er feststellen, ob der Pin 18 für längere Zeit (ca 1-2s) gedrückt gehalten wird?