GPIO Ausgänge nach inaktivität auf low setzen
Verfasst: Freitag 2. Februar 2018, 16:56
Hallo
ich bin neu hier im Forum und hab mir hier früher immer wieder kleine Anregungen für meine kleinen Spielerein mit der Pi holen könne.
Dafür erst mal danke sehr.
Nun habe ich ein Problem, ich habe mir ein Skript in Python herrunter geladen und für mein Projekt angepasst.
Projekt:
Über Sensorfelder die an einem Fenster befestigt sind, werden beim Touch die entsprechenden GPIO Ausgänge geschaltet. Soweit alles gut.
Ich möchte aber dass nach einer Zeit (x) der Inaktivität alle Ausgänge wieder den Zustand "aus" also Low einnehmen.
Hintergrund ist, dass man von außen über eine Scheibe alles einschaltet und es sonst an bleibt. Das skript sollte dann die Abschaltfunktion übernehmen und wieder in Start Ausgang gehen.
Nachfolgend hab ich das Skript beigefügt.
Danke schon mal für Tips und Hinweise.
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import sys
import pygame
import time
from pygame.locals import *
from RPi import GPIO
#------------------------------------------------------------------------
red = 17
green = 22
white = 27
yellow = 5
orange = 6
grey = 13
brown = 23
black = 24
GPIO.setmode(GPIO.BCM)
#------------------------------------------------------------------------
GPIO.setwarnings(False)
GPIO.setup(red, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(white, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(orange, GPIO.OUT)
GPIO.setup(grey, GPIO.OUT)
GPIO.setup(brown, GPIO.OUT)
GPIO.setup(black, GPIO.OUT)
os.environ["SDL_FBDEV"] = "/dev/fb1"
width = 320
height = 240
size = (width, height)
pygame.display.init()
screen = pygame.display.set_mode(size)
def schalten(pin):
current_state = GPIO.input(pin)
GPIO.output(pin, not current_state)
print('switched GPIOpin {} from {} to {}' . format(pin, current_state, (not current_state)))
try:
running=True
clock = pygame.time.Clock()
while running:
clock.tick(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == K_a:
print('Key "a" is pressed')
schalten(red)
elif event.key == K_b:
print('Key "b" is pressed')
schalten(green)
elif event.key == K_c:
print('Key "c" is pressed')
schalten(white)
elif event.key == K_d:
print('Key "d" is pressed')
schalten(yellow)
elif event.key == K_e:
print('Key "e" is pressed')
schalten(orange)
elif event.key == K_f:
print('Key "f" is pressed')
schalten(grey)
elif event.key == K_g:
print('Key "g" is pressed')
schalten(brown)
elif event.key == K_h:
print('Key "h" is pressed')
schalten(black)
else:
print('Unknown Key: "{}"'.format(str(pygame.key.name(event.key))))
except pygame.error, perr:
print('pygame Error: ' + str(perr))
except (KeyboardInterrupt, SystemExit):
running = False
GPIO.cleanup()
print('\nQuit\n')
Danke nochmals für eure Hilfe.
ich bin neu hier im Forum und hab mir hier früher immer wieder kleine Anregungen für meine kleinen Spielerein mit der Pi holen könne.
Dafür erst mal danke sehr.
Nun habe ich ein Problem, ich habe mir ein Skript in Python herrunter geladen und für mein Projekt angepasst.
Projekt:
Über Sensorfelder die an einem Fenster befestigt sind, werden beim Touch die entsprechenden GPIO Ausgänge geschaltet. Soweit alles gut.
Ich möchte aber dass nach einer Zeit (x) der Inaktivität alle Ausgänge wieder den Zustand "aus" also Low einnehmen.
Hintergrund ist, dass man von außen über eine Scheibe alles einschaltet und es sonst an bleibt. Das skript sollte dann die Abschaltfunktion übernehmen und wieder in Start Ausgang gehen.
Nachfolgend hab ich das Skript beigefügt.
Danke schon mal für Tips und Hinweise.
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import sys
import pygame
import time
from pygame.locals import *
from RPi import GPIO
#------------------------------------------------------------------------
red = 17
green = 22
white = 27
yellow = 5
orange = 6
grey = 13
brown = 23
black = 24
GPIO.setmode(GPIO.BCM)
#------------------------------------------------------------------------
GPIO.setwarnings(False)
GPIO.setup(red, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(white, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(orange, GPIO.OUT)
GPIO.setup(grey, GPIO.OUT)
GPIO.setup(brown, GPIO.OUT)
GPIO.setup(black, GPIO.OUT)
os.environ["SDL_FBDEV"] = "/dev/fb1"
width = 320
height = 240
size = (width, height)
pygame.display.init()
screen = pygame.display.set_mode(size)
def schalten(pin):
current_state = GPIO.input(pin)
GPIO.output(pin, not current_state)
print('switched GPIOpin {} from {} to {}' . format(pin, current_state, (not current_state)))
try:
running=True
clock = pygame.time.Clock()
while running:
clock.tick(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == K_a:
print('Key "a" is pressed')
schalten(red)
elif event.key == K_b:
print('Key "b" is pressed')
schalten(green)
elif event.key == K_c:
print('Key "c" is pressed')
schalten(white)
elif event.key == K_d:
print('Key "d" is pressed')
schalten(yellow)
elif event.key == K_e:
print('Key "e" is pressed')
schalten(orange)
elif event.key == K_f:
print('Key "f" is pressed')
schalten(grey)
elif event.key == K_g:
print('Key "g" is pressed')
schalten(brown)
elif event.key == K_h:
print('Key "h" is pressed')
schalten(black)
else:
print('Unknown Key: "{}"'.format(str(pygame.key.name(event.key))))
except pygame.error, perr:
print('pygame Error: ' + str(perr))
except (KeyboardInterrupt, SystemExit):
running = False
GPIO.cleanup()
print('\nQuit\n')
Danke nochmals für eure Hilfe.