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/09 14:42] – [Code source] 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+import select, time
 import sys, tty, termios import sys, tty, termios
 import os import os
Ligne 114: Ligne 114:
 from subprocess import Popen, PIPE from subprocess import Popen, PIPE
 from pygame.locals import * from pygame.locals import *
-import RPi.GPIO as GPIO   +#import RPi.GPIO as GPIO   
-GPIO.setmode(GPIO.BCM)  +#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)  
  
 pygame.init() pygame.init()
Ligne 126: Ligne 133:
 def accueil(): def accueil():
     ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé     ecran = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) #Crée la fenêtre de tracé
-    image = pygame.image.load("./obc.jpg") #charge une image à partir d'un fichier+    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)     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.     pygame.display.flip() #L'affichage devient effectif : l'image est rendue visible.
- 
-def getch(): 
-    fd = sys.stdin.fileno() 
-    old_settings = termios.tcgetattr(fd) 
-    try: 
-        tty.setraw(sys.stdin.fileno()) 
-        ch = sys.stdin.read(1) 
-    finally: 
-        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) 
-    return ch 
- 
-#accueil() 
  
 #Fonction appelé lors d'un appuie bouton #Fonction appelé lors d'un appuie bouton
 def fct_movie(channel):   def fct_movie(channel):  
-    print ('Lancement clip', 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é (icil'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/videos/'+str(channel)+' +
-.mp4'],stdout=subprocess.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: 
-    if retcode is not None: + os.killpg(p.pid, signal.SIGKILL) 
-        accueil()+ break 
 +    if p.poll() is not None: 
 + accueil()
  
 #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=fct_movie, bouncetime=600)   +#GPIO.add_event_detect(17, GPIO.FALLING, callback=fct_movie, bouncetime=600)   
-GPIO.add_event_detect(23, GPIO.FALLING, callback=fct_movie, bouncetime=600)   +#GPIO.add_event_detect(23, GPIO.FALLING, callback=fct_movie, bouncetime=600)   
- +accueil() 
-done = False +for event in dev.read_loop(): 
-while not done: + if (event.code == ecodes.KEY_A and event.value == 0)
-   print ("line", getch()+ fct_movie('fablab'
-   if getch() == "a"+ if (event.code == ecodes.KEY_B and event.value == 0): 
-       print("touche a") + fct_movie(2
-       fct_movie(17) + if (event.code == ecodes.KEY_C and event.value == 0): 
-   if getch(== "b"+ fct_movie(3
-       print("touche b"+ if (event.code == ecodes.KEY_D and event.value == 0): 
-       fct_movie(23) + fct_movie('Arduino-encoded')
- +
-#   for event in pygame.event.get(): +
-#       if event.type == KEYDOWN: +
-#             keys = pygame.key.get_pressed() +
-+
-#             if (keys[K_a]): +
-# print("touche a") +
-#  fct_movie(17+
-#             if (keys[K_b]): +
-# print("touche b") +
-#  fct_movie(23+
-#       if (event.key == K_ESCAPE): +
-#          done = True +
-       +
  
 pygame.display.quit() pygame.display.quit()
 pygame.quit() pygame.quit()
 </code> </code>
- 
- 
  
  
evenements/obc2012/dikogeek.1368110543.txt.gz · Dernière modification : 2022/09/04 21:49 (modification externe)