Outils pour utilisateurs

Outils du site


evenements:obc2012:dikogeek

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
obc2012:dikogeek [2013/05/03 14:40] – [Interaction homme/machine] florianhevenements:obc2012:dikogeek [2022/09/04 21:50] (Version actuelle) – modification externe 127.0.0.1
Ligne 107: Ligne 107:
  
 #Import des librairies nécessaires #Import des librairies nécessaires
 +import select, time
 +import sys, tty, termios
 import os import os
 +import pygame
 import subprocess, signal import subprocess, signal
-import RPi.GPIO as GPIO   
-GPIO.setmode(GPIO.BCM)   
 from subprocess import Popen, PIPE from subprocess import Popen, PIPE
 +from pygame.locals import *
 +#import RPi.GPIO as GPIO  
 +#GPIO.setmode(GPIO.BCM)  
 +from evdev import InputDevice, categorize, ecodes
 +dev = InputDevice('/dev/input/event1')
  
 +fpid = os.fork()
 +if fpid!=0:
 +   #Running as daemon now. PID is fpid
 +  sys.exit(0)
 + 
 #Configuration de deux ports du GPIO (inter) #Configuration de deux ports du GPIO (inter)
-GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)   +#GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)   
-GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)  +#GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
  
-#Création d'une fonction de rappel (gestion des execptions+pygame.init() 
-def my_callback(channel):  +pygame.display.init()
  
-    print ("Lancement clip 1")+def accueil(): 
 +    ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé 
 +    image = pygame.image.load("/home/pi/dikogeek/obc.jpg"#charge une image à partir d'un fichier 
 +    ecran.blit(image, (0,40)) #Colle l'image en haut à gauche de la fenêtre de tracé (ici, l'ecran) 
 +    pygame.display.flip() #L'affichage devient effectif : l'image est rendue visible. 
 + 
 +#Fonction appelé lors d'un appuie bouton 
 +def fct_movie(channel):   
 +    ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé 
 +    image = pygame.image.load("/home/pi/dikogeek/chargement.jpg") #charge une image à partir d'un fichier 
 +    ecran.blit(image, (10,40)) #Colle l'image en haut à gauche de la fenêtre de tracé (ici, l'ecran) 
 +    pygame.display.flip() #L'affichage devient effectif : l'image est rendue visible.
     #Lancement d'un sous process pour récuperer la liste des processes en cours     #Lancement d'un sous process pour récuperer la liste des processes en cours
-    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE) +    p = subprocess.Popen(['omxplayer', '-r', '/home/pi/dikogeek/videos/'+str(channel)+'.mp4'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,preexec_fn=os.setpgrp)
-    out, err = p.communicate() +
- +
-    #Listing des process +
-    for line in out.splitlines(): +
- #On recherche si le lecteur video est en route +
-        if 'omxplayer' in line: +
-                pid = int(line.split(None, 1)[0]) +
- #On Kill le process +
-                os.kill(pid, signal.SIGKILL) +
-    #Lencement d'un sous process pour lancer le clip +
-    p = subprocess.Popen(['xterm', '-fullscreen', '-fg', 'black', '-bg', 'black', '-e', 'omxplayer', '-r', '/home/pi/clip.avi'],stdout=subpr +
-ocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)+
     #Vérifie si le process se termine naturellement     #Vérifie si le process se termine naturellement
-    retcode = p.wait() +    while (p.poll() is None)
- + if dev.read_one() is not None
-    #Si le process c'est terminé naturellement, lancement d'une page web d'animation ou de présentation du diko geek + os.killpg(p.pid, signal.SIGKILL) 
-    if retcode is not None: + break 
- print "Lancement navigateur" +    if p.poll() is not None: 
- os.system("chromium --user-data-dir=/home/pi/dikogeek/ --app=http://google.fr"+ accueil()
-   +
-def my_callback2(channel):   +
-    print ("Lancement clip 2") +
-    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE) +
-    out, err = p.communicate() +
- +
-    for line in out.splitlines(): +
-        if 'omxplayer' in line: +
-           pid = int(line.split(None, 1)[0]) +
-                   os.kill(pid, signal.SIGKILL) +
-    p = subprocess.Popen(['xterm', '-fullscreen', '-fg', 'black', '-bg', 'black', '-e', 'omxplayer', '-r', '/home/pi/clip2.avi'],stdout=subp +
-rocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE) +
-    retcode = p.wait() +
- +
-    if retcode is not None: +
- print "Lancement navigateur" +
-        os.system("chromium --user-data-dir=/home/pi/dikogeek/ --app=http://google.fr") +
- +
  
 #Configuration des deux ports GPIO, fonction de callback, debounce de 600ms + condo de 0,1nF sur l'inter #Configuration des deux ports GPIO, fonction de callback, debounce de 600ms + condo de 0,1nF sur l'inter
-GPIO.add_event_detect(17, GPIO.FALLING, callback=my_callback, bouncetime=600)   +#GPIO.add_event_detect(17, GPIO.FALLING, callback=fct_movie, bouncetime=600)   
-GPIO.add_event_detect(23, GPIO.FALLING, callback=my_callback2, bouncetime=600)   +#GPIO.add_event_detect(23, GPIO.FALLING, callback=fct_movie, bouncetime=600)   
- +accueil() 
-#Permet de bloquer le programme pour éviter qu'il se termine tout seul +for event in dev.read_loop(): 
-raw_input("> ")+ if (event.code == ecodes.KEY_A and event.value == 0): 
 + fct_movie('fablab') 
 + if (event.code == ecodes.KEY_B and event.value == 0): 
 + fct_movie(2) 
 + if (event.code == ecodes.KEY_C and event.value == 0): 
 + fct_movie(3) 
 + if (event.code == ecodes.KEY_D and event.value == 0): 
 + fct_movie('Arduino-encoded')
  
 +pygame.display.quit()
 +pygame.quit()
 </code> </code>
- 
- 
  
  
evenements/obc2012/dikogeek.1367592054.txt.gz · Dernière modification : 2022/09/04 21:49 (modification externe)