Morgen zusammen,
ich fand die Idee toll, mittels der Drück-Zeit, wie lange ein Taster gedrückt wird entweder mein Pythonprogramm zu starten (<4 sek) oder es zu stoppen (>4). Dafür habe ich mich des Skriptes von hier (Reboot / Shutdown PI & Reboot Windows Rechner) entschieden. Dieses soll als unabhäniges Programm direkt beim Start geladen werden und ich könnte dann über meinen Taster mein Programm starten oder stoppen.
Mein Code sieht im Moment so aus:
#!/usr/bin/python2
# -*- coding: utf-8 -*-
#
# https://forum-raspberrypi.de/forum/thread/32316-reboot-shutdown-pi-reboot-windows-rechner/?pid=265171#pid265171
#
# v0.1 by meigrafd
#
from __future__ import print_function
from time import sleep, time
from RPi import GPIO
from Queue import Queue
from functools import partial
import os
def interrupt_Event(q, channel):
q.put( (channel, GPIO.input(channel)) )
def main(switchPi=18, specialTime=4):
GPIO.setmode(GPIO.BCM)
GPIO.setup(switchPi, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
queue=Queue()
triggerTime=0
GPIO.add_event_detect(switchPi, GPIO.BOTH, callback=partial(interrupt_Event, queue), bouncetime=150)
try:
while True:
job = queue.get()
pin = job[0]
state = job[1]
if pin == switchPi:
if state == GPIO.HIGH:
triggerTime = time()
elif state == GPIO.LOW:
triggerTime = time() - triggerTime
if triggerTime < specialTime:
os.system("python test.py")
elif triggerTime > specialTime:
os.system("kill -s SIGINT $(ps aux | grep -v grep | grep test.py | awk {'print $2'})")
else:
print("time '%s' not valid" % triggerTime)
except (KeyboardInterrupt, SystemExit):
GPIO.cleanup()
print("\nQuit\n")
if __name__ == "__main__":
main()
#EOF
Alles anzeigen
Das tolle, mein Programm startet auch direkt wenn ich unter 4 sek drücke und läuft...und läuft.. ...leider stoppt es aber nicht, wenn ich danach >4 sek drücke bzw. wird nicht "gekilled" ähnlich Strg-C. Den Killbefehl habe ich von hier: https://forum-raspberrypi.de/forum/thread/14857-script-beenden/?highlight=%22kill+-s+SIGINT+$(ps+aux+%7c+grep+-v+grep
Das Testprogramm sieht so aus und macht nicht viel:
import RPi.GPIO as GPIO
import spidev
import time
import glob
xaxis = 1 # Initialisiere Beschleunigungssensor X-Achse auf 1; Y-Achse auf 2; Z-Achse auf 3
yaxis = 2
zaxis = 3
spi = spidev.SpiDev()
spi.open(0,0)
def xreadadc(adcnum):
r = spi.xfer2([1,8+adcnum <<4,0])
adcout = ((r[1] &3) <<8)+r[2]
return adcout
try:
while True:
xvalue = readadc(xaxis) #Uebergabe x
yvalue = readadc(yaxis) #Uebergabe y
zvalue = readadc(zaxis) #Uebergabe z
xvolt = (xvalue+3.3)/1024
yvolt = (yvalue+3.3)/1024
zvolt = (zvalue+3.3)/1024
print '---------------------------------------'
print("X-Value: " %4d/1023 => %5.3f V" % (xvalue, xvolts), "Y-Value: " %4d/1023 => %5.3f V" % (yvalue, yvolts), "Z-Value: " %4d/1023 => %5.3f V" % (zvalue, zvolts))
except KeyboardInterrupt:
PIO.cleanup()
Alles anzeigen
Meine erste Frage wäre natürlich, mache ich das überhaupt richtig?
Aber gleichzeitig verstehe ich den Zusatz:
vom oben nicht. Muss da mein Code vom Test rein? Wenn nicht, worfür sind diese Zeilen da?
Danke schon mal für eure Antwort.
David