Page 1 sur 2

[Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 10:53
par Roulian
Bonjour, actuellement en terminale STI2D spécialité SIN, pour la fin de l'année mon groupe et moi devons faire un système de chronométrage pour notre projet de bac avec une raspberry PI ainsi que la carte Explore NFC d'élément 14.
Nous avons tout mis en place concernant la raspberry PI et les softwares pour la Explore NFC pour que nos badges soient détectés, nous avons réussi à les faire détecter mais maintenant nous devons importer un système de chronométrage avec un chronomètre codé en python.

Notre projet consiste à créer une simulation de course de cyclisme, il y a normalement deux coureurs qui possèdent un badge NFC, nous devons faire détecter le temps, les départs, arrivés, nombre tours et faux départs.
Nous sommes actuellement perdus, vu que notre prof est ignorant avec nous, celui-ci s'occupe que du groupe qui représentera le lycée pour un évènement de course, nous, nous sommes mis de côté et devons être "autonome" selon lui ainsi que de trouver des solutions, mais après maintes recherche sur le web, nous n'avons toujours pas de solutions..
Si vous pouviez nous éclaircir sur comment procéder à l'installation d'un programme python sur notre carte raspberry PI, nous commençons à douter de notre projet et de sa facilité / difficulté,
Je vous remercie.

Voici notre programme en python:

Code : Tout sélectionner

[code]#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
from tkinter import *
import time
from functools import partial
 
class Chronometre(Frame):  # definition de la class'Chronomètre' dans Frame                                                            
    def __init__(self, parent=None, **kw):    # definition initiale de la class   
        Frame.__init__(self, parent, kw)
        self._start = 0.0      
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()             
        self.makeWidgets()    
   
    def makeWidgets(self): #definition pour afficher le temps                       
        l = Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        l.pack(fill=X, expand=NO, pady=10, padx=10)                    
   
    def _update(self): # definition du reset
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)
   
    def _setTime(self, elap): #définition du temps en minutes/secondes/millisecondes
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)              
        self.timestr.set('%02d:%02d:%03d' % (minutes, seconds, hseconds))
   
    def Start(self, event=None): #lancement du chrono s'il est en arrêt                                                   
        if not self._running:          
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1      
   
    def Stop(self): # arrêt du chrono s'il est en marche                                  
        if self._running:
            self.after_cancel(self._timer)          
            self._elapsedtime = time.time() - self._start  
            self._setTime(self._elapsedtime)
            self._running = 0
   
    def Reset(self): # remise à zéro du chrono                               
        self._start = time.time()       
        self._elapsedtime = 0.0  
        self._setTime(self._elapsedtime)
   
    def get(self) :
        return self._running
   
   
def masw(Event,sw):
    if  sw.get() :
        sw.Stop
        print ('stop')
    else:
        sw.Start
        print ('start')
  
def masv(Event,sv):
    if  sv.get() :
        sv.Stop
        print ('stop')
    else:
        sv.Start
        print ('start')
          
def start_chronos(chronos, event):
    for chrono in chronos:
        chrono.Start()

def reset_chronos(chronos, event):
    for chrono in chronos:
        chrono.Reset()

def stop_chrono_gauche(chrono, event):
    chrono.Stop()

def stop_chrono_droit(chrono, event):
    chrono.Stop()
   
def main(): # definition de la fenetre de tkinter
    root = Tk()
    root.title('projet 2014-2015')
    sw = Chronometre(root)
    sw.pack(side=LEFT,padx=30,pady=30)
    sv = Chronometre(root)
    sv.pack(side=RIGHT,padx=30,pady=30)
  
    root.bind('<a>', partial(start_chronos, (sw, sv)))
    root.bind('<z>', partial(stop_chrono_gauche, (sw)))
    root.bind('<e>', partial(stop_chrono_droit, (sv)))
    root.bind('<r>', partial(reset_chronos, (sw, sv)))
    
      
    root.mainloop()
   
  
if __name__ == '__main__':
    main()
[/code]

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 11:44
par domi
Bonjour,

Peux tu me confirmer que ta question est principalement une demande d'aide concernant le langage Python sur Raspberry ?

Si c'est le cas, merci de confirmer, je déplacerai ta demande dans la rubrique "Python" qui sera mieux adaptée.

Cdt,
Domi

[Edition Domi] OK, vu ta réponse ci-dessous, je déplace donc le sujet afin qu'il soit plus facilement visible dans la bonne catégorie ;-)

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 13:23
par Roulian
Oui c'est principalement pour savoir si c'était possible et comment configurer le python pour la EXPLORE-NFC ?

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 14:15
par dbrion0606
Excusez ma curiosité, mais que fait import (de la contrebande d'horloges avec la Suisse)?
Auriez vous lu, au hasard de Google ou par miracle
http://www.framboise314.fr/jai-teste-po ... ent-14-22/

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 14:22
par Manfraid
Salut,

Normalement c'est faisable, par contre de mémoire il faut utilisé python2.7 et d’après ce que je vois tu utilise python3.

Et je ne sait pas si c'est possible de compiler les sources pour le NFC avec python3

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 10 avr. 2015 14:54
par dbrion0606
Selon https://github.com/svvitale/nxppy/issues/12 , python3 est supporté par nxppy à condition d'installer les headers de ... python3 sudo apt-get install python3-dev

Une autre solution consisterait à vérifier que Tkinter (qui a plus de 10 ans...) et time (quel est l'âge de ma Rollex) restent supportés par python2-7....

Re: [Débutant] Chronométrer le passage des badges

Posté : lun. 13 avr. 2015 16:48
par Roulian
Manfraid a écrit :Salut,

Normalement c'est faisable, par contre de mémoire il faut utilisé python2.7 et d’après ce que je vois tu utilise python3.

Et je ne sait pas si c'est possible de compiler les sources pour le NFC avec python3
dbrion0606 a écrit :Selon https://github.com/svvitale/nxppy/issues/12 , python3 est supporté par nxppy à condition d'installer les headers de ... python3 sudo apt-get install python3-dev

Une autre solution consisterait à vérifier que Tkinter (qui a plus de 10 ans...) et time (quel est l'âge de ma Rollex) restent supportés par python2-7....
Bonjour, j'ai importé le programme en python 2 sur ma raspberry, il fonctionne parfaitement.

Mais le plus gros est que l'on voudrait associer le programme du chronomètre en python 2 (dont le démarrage du chronometre se fait avec une touche du clavier la touche "D" pour départ et la touche "A" pour arret) avec LXTerminal et qu'à chaque détection du badge l'heure ou le temps au tour soit affiché.
Comment pourrions-nous mettre cela en oeuvre svp ?
Merci. :D

Re: [Débutant] Chronométrer le passage des badges

Posté : lun. 13 avr. 2015 19:26
par Manfraid
Je n'ai pas le temps pour te trouver la solution, par contre regarde du coté des thread pour en avoir un qui puisse lire les tag NFC en continue, et a la lecture des bon TAG tu lance la fonction pour démarrer le chrono correspondant

Re: [Débutant] Chronométrer le passage des badges

Posté : jeu. 16 avr. 2015 15:00
par Roulian
Bonjour, c'est à dire ? Les thread c'est à dire ?
Le seul truc que j'trouve c'est sur du RPi.GPIO et nous ne travaillons pas dessus.. :( :(

Re: [Débutant] Chronométrer le passage des badges

Posté : ven. 17 avr. 2015 11:39
par dbrion0606
Un thread, c'est un fil de messages (et aussi une bibliothèque de python http://openclassrooms.com/courses/appre ... -threading mais je ne pense pas, à la lecture de "ire les tag NFC en continue" que ce soit ce que MAnfraid veuille dire : il envisagerait une boucle, dans un seul programme (un thread d'execution implique plusieurs tâches en parallèle) de ce type:

Code : Tout sélectionner

tant que pas_fini
   lire rfctag
   si rfctag == chose1
       executer action_chose1
    .......
   
    calculer pas_fini # peut être toujours vrai