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

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Roulian
Messages : 6
Enregistré le : ven. 10 avr. 2015 10:47

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

Message par Roulian » ven. 10 avr. 2015 10:53

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]

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

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

Message par domi » ven. 10 avr. 2015 11:44

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 ;-)
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Roulian
Messages : 6
Enregistré le : ven. 10 avr. 2015 10:47

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

Message par Roulian » ven. 10 avr. 2015 13:23

Oui c'est principalement pour savoir si c'était possible et comment configurer le python pour la EXPLORE-NFC ?

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

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

Message par dbrion0606 » ven. 10 avr. 2015 14:15

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/

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

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

Message par Manfraid » ven. 10 avr. 2015 14:22

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
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

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

Message par dbrion0606 » ven. 10 avr. 2015 14:54

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....

Roulian
Messages : 6
Enregistré le : ven. 10 avr. 2015 10:47

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

Message par Roulian » lun. 13 avr. 2015 16:48

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

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

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

Message par Manfraid » lun. 13 avr. 2015 19:26

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
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Roulian
Messages : 6
Enregistré le : ven. 10 avr. 2015 10:47

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

Message par Roulian » jeu. 16 avr. 2015 15:00

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.. :( :(

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

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

Message par dbrion0606 » ven. 17 avr. 2015 11:39

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

Répondre

Retourner vers « Python »