Python et PiFace

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

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

Re: Python et PiFace

Message par Manfraid » mar. 21 oct. 2014 11:01

Tien cadeau une nouvelle version
donc le Start compte, le stop arrête le comptage et le rev décompte

et pour quitter normalement un Ctrl+C fonctionne

Code : Tout sélectionner

import pifacedigitalio as p
from chiffre import SevenSegment
from time import sleep
from threading import Thread
import os
import random
import sys

class App(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.tc = 0.1
        self.s = SevenSegment()
        self._inc = 0
        self._Stop = False
        self.v = 0
        self.
    def run(self):
        while not self._Stop:
            # Incrementation ou decrementation
            self.v += self._inc
            # Vérification de la plage d'utilisation
            if self.v > 9:
                self.v = 0
            elif self.v < 0:
                self.v = 9
            print("Valeur : {} mode {}".format(self.v, {1 : "Incrémentation", -1 : "Décrémentation"}[self._inc]))
            self.s.writeDigit(self.v)
            if self._inc:
                sleep(self.tc)
            else:
                sleep(0.05)
            self.s.clear()
        print("Fin du programme")        
        sys.exit(1)    
    
    def Compte(self,event):
        self._inc = 1
    def Arret(self,event):
        self._inc = 0
    def Decompte(self,event):
        self._inc = -1

    def Stop(self):
        self._Stop = True
        
    def SpeedUp(self,event):
        # Vérouillage pour eviter d'avoir un temp null
        self.tc = max(self.tc - 0.1,0.1)
    def SpeedDown(self,event):
        # Vérouillage pour eviter d'avoir un temp trop long 5seconde
        self.tc = min(self.tc + 0.1, 5)

    


p.init()
pfd = p.PiFaceDigital() #pour listerner
app = App()
os.system('clear')
print ("")
print ("DIGIT")
print ("")
print ("Appuyer sur un des boutons pour commencer")
print ("")
print ("Bouton 1 = Start")
print ("Bouton 2 = Stop")
print ("Bouton 3 = Inverse")
print ("Bouton 4 = + rapide")
print ("Bouton 5 = + lent")
print ("")
########################
# Evenements
########################
app.start()
listener = p.InputEventListener(chip=pfd)
listener.register(0, p.IODIR_FALLING_EDGE, app.Compte)
listener.register(1, p.IODIR_FALLING_EDGE, app.Arret)
listener.register(2, p.IODIR_FALLING_EDGE, app.Decompte)
listener.register(3, p.IODIR_FALLING_EDGE, app.SpeedUp)
listener.register(4, p.IODIR_FALLING_EDGE, app.SpeedDown)
try:
    listener.activate()
except:
    listener.deactivate()
    app.Stop()
    app.join()
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.

salade
Messages : 26
Enregistré le : dim. 19 oct. 2014 20:36

Re: Python et PiFace

Message par salade » mar. 21 oct. 2014 11:40

Manfraid a écrit :Tien cadeau une nouvelle version
donc le Start compte, le stop arrête le comptage et le rev décompte

et pour quitter normalement un Ctrl+C fonctionne

Code : Tout sélectionner

import pifacedigitalio as p
from chiffre import SevenSegment
from time import sleep
from threading import Thread
import os
import random
import sys

class App(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.tc = 0.1
        self.s = SevenSegment()
        self._inc = 0
        self._Stop = False
        self.v = 0
        self.
    def run(self):
        while not self._Stop:
            # Incrementation ou decrementation
            self.v += self._inc
            # Vérification de la plage d'utilisation
            if self.v > 9:
                self.v = 0
            elif self.v < 0:
                self.v = 9
            print("Valeur : {} mode {}".format(self.v, {1 : "Incrémentation", -1 : "Décrémentation"}[self._inc]))
            self.s.writeDigit(self.v)
            if self._inc:
                sleep(self.tc)
            else:
                sleep(0.05)
            self.s.clear()
        print("Fin du programme")        
        sys.exit(1)    
    
    def Compte(self,event):
        self._inc = 1
    def Arret(self,event):
        self._inc = 0
    def Decompte(self,event):
        self._inc = -1

    def Stop(self):
        self._Stop = True
        
    def SpeedUp(self,event):
        # Vérouillage pour eviter d'avoir un temp null
        self.tc = max(self.tc - 0.1,0.1)
    def SpeedDown(self,event):
        # Vérouillage pour eviter d'avoir un temp trop long 5seconde
        self.tc = min(self.tc + 0.1, 5)

    


p.init()
pfd = p.PiFaceDigital() #pour listerner
app = App()
os.system('clear')
print ("")
print ("DIGIT")
print ("")
print ("Appuyer sur un des boutons pour commencer")
print ("")
print ("Bouton 1 = Start")
print ("Bouton 2 = Stop")
print ("Bouton 3 = Inverse")
print ("Bouton 4 = + rapide")
print ("Bouton 5 = + lent")
print ("")
########################
# Evenements
########################
app.start()
listener = p.InputEventListener(chip=pfd)
listener.register(0, p.IODIR_FALLING_EDGE, app.Compte)
listener.register(1, p.IODIR_FALLING_EDGE, app.Arret)
listener.register(2, p.IODIR_FALLING_EDGE, app.Decompte)
listener.register(3, p.IODIR_FALLING_EDGE, app.SpeedUp)
listener.register(4, p.IODIR_FALLING_EDGE, app.SpeedDown)
try:
    listener.activate()
except:
    listener.deactivate()
    app.Stop()
    app.join()
Hello !

C'est noel ;-)
(la neige arrive ici ...)

J'ai une erreur à la ligne 17, le self.

Code : Tout sélectionner

pi@ras-design ~/Documents/Digit/2.0 $ python3 compteur.py 
  File "compteur.py", line 17
    self.
        ^
TabError: inconsistent use of tabs and spaces in indentation

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

Re: Python et PiFace

Message par Manfraid » mar. 21 oct. 2014 11:43

Erreur de ma part supprime la ligne et c'est bon
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.

salade
Messages : 26
Enregistré le : dim. 19 oct. 2014 20:36

Re: Python et PiFace

Message par salade » mar. 21 oct. 2014 11:55

Manfraid a écrit :Erreur de ma part supprime la ligne et c'est bon
J'avais déjà essayé en supprimant la ligne mais :

Code : Tout sélectionner

DIGIT

Appuyer sur un des boutons pour commencer

Bouton 1 = Start
Bouton 2 = Stop
Bouton 3 = Inverse
Bouton 4 = + rapide
Bouton 5 = + lent

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.2/threading.py", line 740, in _bootstrap_inner
    self.run()
  File "compteur.py", line 26, in run
    print("Valeur : {} mode {}".format(self.v, {1 : "Incrementation", -1 : "Decrementation"}[self._inc]))
KeyError: 0

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

Re: Python et PiFace

Message par Manfraid » mar. 21 oct. 2014 11:58

arf c'est ça de pas pouvoir tester soit même

avec cette version ça devrai aller mieux

pour info l'affichage disparais si tu fait stop

Code : Tout sélectionner

import pifacedigitalio as p
from chiffre import SevenSegment
from time import sleep
from threading import Thread
import os
import random
import sys

class App(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.tc = 0.1
        self.s = SevenSegment()
        self._inc = 0
        self._Stop = False
        self.v = 0

    def run(self):
        while not self._Stop:
            # Incrementation ou decrementation
            self.v += self._inc
            # Vérification de la plage d'utilisation
            if self.v > 9:
                self.v = 0
            elif self.v < 0:
                self.v = 9        
            if self._inc:
                print("Valeur : {} mode {}".format(self.v, {1 : "Incrémentation", -1 : "Décrémentation"}[self._inc]))
                self.s.writeDigit(self.v)
                sleep(self.tc)
            else:
                sleep(0.05)
            self.s.clear()
        print("Fin du programme")        
        sys.exit(1)    
    
    def Compte(self,event):
        self._inc = 1
    def Arret(self,event):
        self._inc = 0
    def Decompte(self,event):
        self._inc = -1

    def Stop(self):
        self._Stop = True
        
    def SpeedUp(self,event):
        # Vérouillage pour eviter d'avoir un temp null
        self.tc = max(self.tc - 0.1,0.1)
    def SpeedDown(self,event):
        # Vérouillage pour eviter d'avoir un temp trop long 5seconde
        self.tc = min(self.tc + 0.1, 5)

    


p.init()
pfd = p.PiFaceDigital() #pour listerner
app = App()
os.system('clear')
print ("")
print ("DIGIT")
print ("")
print ("Appuyer sur un des boutons pour commencer")
print ("")
print ("Bouton 1 = Start")
print ("Bouton 2 = Stop")
print ("Bouton 3 = Inverse")
print ("Bouton 4 = + rapide")
print ("Bouton 5 = + lent")
print ("")
########################
# Evenements
########################
app.start()
listener = p.InputEventListener(chip=pfd)
listener.register(0, p.IODIR_FALLING_EDGE, app.Compte)
listener.register(1, p.IODIR_FALLING_EDGE, app.Arret)
listener.register(2, p.IODIR_FALLING_EDGE, app.Decompte)
listener.register(3, p.IODIR_FALLING_EDGE, app.SpeedUp)
listener.register(4, p.IODIR_FALLING_EDGE, app.SpeedDown)
try:
    listener.activate()
except:
    listener.deactivate()
    app.Stop()
    app.join()
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.

salade
Messages : 26
Enregistré le : dim. 19 oct. 2014 20:36

Re: Python et PiFace

Message par salade » mar. 21 oct. 2014 12:15

Manfraid a écrit :arf c'est ça de pas pouvoir tester soit même

avec cette version ça devrai aller mieux

pour info l'affichage disparais si tu fait stop

Code : Tout sélectionner

import pifacedigitalio as p
from chiffre import SevenSegment
from time import sleep
from threading import Thread
import os
import random
import sys

class App(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.tc = 0.1
        self.s = SevenSegment()
        self._inc = 0
        self._Stop = False
        self.v = 0

    def run(self):
        while not self._Stop:
            # Incrementation ou decrementation
            self.v += self._inc
            # Vérification de la plage d'utilisation
            if self.v > 9:
                self.v = 0
            elif self.v < 0:
                self.v = 9        
            if self._inc:
                print("Valeur : {} mode {}".format(self.v, {1 : "Incrémentation", -1 : "Décrémentation"}[self._inc]))
                self.s.writeDigit(self.v)
                sleep(self.tc)
            else:
                sleep(0.05)
            self.s.clear()
        print("Fin du programme")        
        sys.exit(1)    
    
    def Compte(self,event):
        self._inc = 1
    def Arret(self,event):
        self._inc = 0
    def Decompte(self,event):
        self._inc = -1

    def Stop(self):
        self._Stop = True
        
    def SpeedUp(self,event):
        # Vérouillage pour eviter d'avoir un temp null
        self.tc = max(self.tc - 0.1,0.1)
    def SpeedDown(self,event):
        # Vérouillage pour eviter d'avoir un temp trop long 5seconde
        self.tc = min(self.tc + 0.1, 5)

    


p.init()
pfd = p.PiFaceDigital() #pour listerner
app = App()
os.system('clear')
print ("")
print ("DIGIT")
print ("")
print ("Appuyer sur un des boutons pour commencer")
print ("")
print ("Bouton 1 = Start")
print ("Bouton 2 = Stop")
print ("Bouton 3 = Inverse")
print ("Bouton 4 = + rapide")
print ("Bouton 5 = + lent")
print ("")
########################
# Evenements
########################
app.start()
listener = p.InputEventListener(chip=pfd)
listener.register(0, p.IODIR_FALLING_EDGE, app.Compte)
listener.register(1, p.IODIR_FALLING_EDGE, app.Arret)
listener.register(2, p.IODIR_FALLING_EDGE, app.Decompte)
listener.register(3, p.IODIR_FALLING_EDGE, app.SpeedUp)
listener.register(4, p.IODIR_FALLING_EDGE, app.SpeedDown)
try:
    listener.activate()
except:
    listener.deactivate()
    app.Stop()
    app.join()
Merci, ça fonctionne tip-top !
Il ne me reste plus qu'a comprendre le code :oops:
intégrer la notion de "class" ...

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

Re: Python et PiFace

Message par Manfraid » mar. 21 oct. 2014 12:30

Pas de soucis, Si tu veux plus d'explication n'hésite pas
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.

salade
Messages : 26
Enregistré le : dim. 19 oct. 2014 20:36

Re: Python et PiFace

Message par salade » mar. 21 oct. 2014 12:41

Je me disais :

Le programme interagi en fonction des entrées physiques (boutons) via le "listener"
Est-il envisageable que les événements soit associés à des entrées clavier pour une utilisation en mode console, via ssh ?

On pourrait imaginer:
  • touche "c" pour compter
  • touche "d" pour décompter
  • touche "s" pour stopper
  • touche "+" pour incrémenter tc
  • touche "-" pour décrémenter tc
Se servirait-on toujours du "listener" (qui est propre à PiFace ?) ou pour le coup de fonction propre à python ?
Les 2 options pourraient-elles être conjuguées (même programme permettant d'interagir via les boutons et également par les touches clavier) ou un programme dédié serait-il nécessaire ?

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

Re: Python et PiFace

Message par Manfraid » mar. 21 oct. 2014 12:54

Donc je pense que c'est largement faisable, comme j'ai le temps je vais voir ce que je peu faire
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.

Répondre

Retourner vers « Python »