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
Prochaine révisionLes deux révisions suivantes
obc2012:dikogeek [2013/05/02 14:46] – [Technique] florianhobc2012:dikogeek [2013/05/09 16:42] – [Code source] florianh
Ligne 61: Ligne 61:
   - Etc.   - Etc.
  
-=== Vidéo ===+==== Vidéo  ==== 
  
 J'ai testé différente manières de lire une vidéo sous Raspi. \\ \\ J'ai testé différente manières de lire une vidéo sous Raspi. \\ \\
Ligne 80: Ligne 81:
 Je vous laisse rajouter des idées si vous avez de l'expérience là dedans. Je vous laisse rajouter des idées si vous avez de l'expérience là dedans.
  
-=== Interaction homme/machine ===+ 
 +=== Vos idées === 
 + 
 +  * C'est par ici 
 + 
 +==== Interaction homme/machine ====
  
 Nous aurons probablement besoins d'utiliser au moins une trentaine de bouton... \\ \\ Nous aurons probablement besoins d'utiliser au moins une trentaine de bouton... \\ \\
Ligne 90: Ligne 96:
   * Utiliser un clavier PS2 ou USB et utiliser le contrôle du clavier   * Utiliser un clavier PS2 ou USB et utiliser le contrôle du clavier
   * Registre à décalage    * Registre à décalage 
 +
 +=== Vos idées ===
 +
 +  * C'est par ici
 +
 +===== Code source =====
 +<code>
 +#!/usr/bin/python2.7
 +# -*-coding:Utf-8 -*
 +
 +#Import des librairies nécessaires
 +import select
 +import sys, tty, termios
 +import os
 +import pygame
 +import subprocess, signal
 +from subprocess import Popen, PIPE
 +from pygame.locals import *
 +import RPi.GPIO as GPIO  
 +GPIO.setmode(GPIO.BCM)  
 + 
 +#Configuration de deux ports du GPIO (inter)
 +GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 +GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 +
 +pygame.init()
 +pygame.display.init()
 +
 +def accueil():
 +    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
 +    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.
 +
 +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
 +def fct_movie(channel):  
 +    print ('Lancement clip', channel)
 +    #Lancement d'un sous process pour récuperer la liste des processes en cours
 +    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
 +    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
 +    retcode = p.wait()
 +
 +    if retcode is not None:
 +        accueil()
 +
 +#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(23, GPIO.FALLING, callback=fct_movie, bouncetime=600)  
 +
 +done = False
 +while not done:
 +   print ("line", getch())
 +   if getch() == "a":
 +       print("touche a")
 +       fct_movie(17)
 +   if getch() == "b":
 +       print("touche b")
 +       fct_movie(23)
 +
 +#   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.quit()
 +</code>
 +
 +
 +
  
evenements/obc2012/dikogeek.txt · Dernière modification : 2024/04/26 14:48 de 127.0.0.1