Je débute avec Python et Raspberry Pi, j’ai quelques notions d’électronique et de programmation.
J’ai réalisé un afficheur 7 segment dans l’idée de contrôler l’affichage de chiffres (0 à 9) en utilisant un Raspberry Pi, une carte d’extension PiFace et Python 3.
La maquette est réalisée à base de plaques d'acrylique (3 mm d'épaisseur) découpées au laser (je post les plan si cela intéresse quelqu'un)
Les segments sont illuminés par 5 led, chaque segment est relié à une sortie du Piface.
Les boutons poussoir sont reliés aux entrées du PiFace.
Après quelques heures (...), j’arrive à compter ou à décompter en fonction de l’entrée activée, yes !
Voilà ce que cela donne en vidéo :
http://youtu.be/ulUchnfMnOQ
J’utilise 2 fichiers :
- compteur : le programme à proprement parler
Code : Tout sélectionner
import pifacedigitalio as p import chiffre as ch from time import sleep import os import random import sys p.init() pfd = p.PiFaceDigital() #pour listerner ######################## tc = 0.1 # delai de comptage ######################## # compter ######################## def compter(): print ("Je compte") print ("") for i in [ch.zero, ch.one, ch.two, ch.three, ch.four, ch.five, ch.six, ch.seven, ch.eight, ch.nine]: i() sleep(tc) ch.digit_off() os.system('clear') ######################## # decompter ######################## def decompter(): print ("Je décompte") print ("") for i in [ch.nine, ch.eight, ch.seven, ch.six, ch.five, ch.four, ch.three, ch.two, ch.one, ch.zero]: i() sleep(tc) ch.digit_off() os.system('clear') ######################## def compte(event): for x in range(0, 4): compter() ######################## def decompte(event): for x in range(0, 4): decompter() ######################## def quitter(event): print ("") print("C'est fini !") print ("") sys.exit(1) ######################## os.system('clear') print ("") print ("DIGIT") print ("") print ("Appuyer sur un des boutons pour commencer") print ("") print ("Bouton 1 = Compter") print ("Bouton 2 = Décompter") print ("Bouton 3 = + rapide") print ("Bouton 4 = + lent") print ("Bouton 5 = Quitter") print ("") ######################## # Evenements ######################## listener = p.InputEventListener(chip=pfd) listener.register(0, p.IODIR_FALLING_EDGE, compte) listener.register(1, p.IODIR_FALLING_EDGE, decompte) #listener.register(2, p.IODIR_FALLING_EDGE, speed+) #listener.register(3, p.IODIR_FALLING_EDGE, speed-) listener.register(4, p.IODIR_FALLING_EDGE, quitter) listener.activate()
- chiffre : le module ou je défini les chiffres en associant les sorties du PiFace aux segments à illuminés en fonction du chiffre.
Code : Tout sélectionner
############################# # Définitions des nombres # et des lettres # affichables ############################# import pifacedigitalio as p ############################# # ZERO ############################ def zero() : print('0') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) ############################# # UN ############################# def one() : print('1') p.digital_write(1,1) p.digital_write(2,1) ############################# # DEUX ############################# def two() : print('2') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(6,1) ############################# # TROIS ############################# def three() : print('3') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(6,1) ############################# # QUATRE ############################# def four() : print('4') p.digital_write(1,1) p.digital_write(2,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # CINQ ############################# def five() : print('5') p.digital_write(0,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # SIX ############################# def six() : print('6') p.digital_write(0,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # SEPT ############################# def seven() : print('7') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) ############################# # HUIT ############################# def eight() : print('8') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # NEUF ############################# def nine() : print('9') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # OFF ############################# def digit_off() : p.digital_write(0,0) p.digital_write(1,0) p.digital_write(2,0) p.digital_write(3,0) p.digital_write(4,0) p.digital_write(5,0) p.digital_write(6,0) p.digital_write(7,0) ############################# # A ############################# def a() : print('A') p.digital_write(0,1) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,0) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # B ############################# def b() : print('B') p.digital_write(0,0) p.digital_write(1,0) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # C ############################# def c() : print('C') p.digital_write(0,1) p.digital_write(1,0) p.digital_write(2,0) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,0) ############################# # D ############################# def d() : print('D') p.digital_write(0,0) p.digital_write(1,1) p.digital_write(2,1) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,0) p.digital_write(6,1) ############################# # E ############################# def e() : print('E') p.digital_write(0,1) p.digital_write(1,0) p.digital_write(2,0) p.digital_write(3,1) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1) ############################# # F ############################# def f() : print('F') p.digital_write(0,1) p.digital_write(1,0) p.digital_write(2,0) p.digital_write(3,0) p.digital_write(4,1) p.digital_write(5,1) p.digital_write(6,1)
Après pas mal de recherche, j’avoue que je suis surpris d'avoir été aussi loin dans la réalisation de ce projet mais je n'arrive pas encore à faire ce que je voulais pour 2 raisons :
1 - Je ne trouve pas ou ne comprends pas la documentation. http://piface.github.io/pifacecommon/re ... interrupts
2 - Mes connaissances en programmations sont limitées (structure, logique ...)
Ou l'inverse mais ça revient au même
Les questions :
Pour définir un chiffre, j’active ou désactive les sorties une par une.
Est-ce possible d’envoyer une commande hexadécimal ?
Si oui, quelle est la syntaxe ?
Exemple du chiffre 8 :
Code : Tout sélectionner
import pifacedigitalio as p
#############################
# HUIT
#############################
def eight() :
print('8')
p.digital_write(0,1)
p.digital_write(1,1)
p.digital_write(2,1)
p.digital_write(3,1)
p.digital_write(4,1)
p.digital_write(5,1)
p.digital_write(6,1)
J’utilise le code suivant :
Code : Tout sélectionner
########################
# Evenements
########################
listener = p.InputEventListener(chip=pfd)
listener.register(0, p.IODIR_FALLING_EDGE, compte)
listener.register(1, p.IODIR_FALLING_EDGE, decompte)
#listener.register(2, p.IODIR_FALLING_EDGE, speed+)
#listener.register(3, p.IODIR_FALLING_EDGE, speed-)
listener.register(4, p.IODIR_FALLING_EDGE, quitter)
listener.activate()
Ceci étant, je pensais que ce “listener” me permettrait de sortir d’une fonction pour en lancer une autre mais il n’en est rien. Si je mets en boucle la fonction “compte”, l’appuie sur l’input 2 qui devrait lancer la fonction “décompte” ne fonctionne pas.
Est-ce lié à un problème de structure de mon programme ou est-ce du au limite du matériel/logiciel ?
De la même manière, j’aurais voulu pouvoir changer la variable “tc” qui défini la vitesse de comptage mais je n’y arrive pas.
Je pensais naïvement qu’un créant 2 fonctions speed+, speed- et qu’en les associant à 2 inputs via le listener j’arriverais à mes fins
Je touche ici mes limites de “programmeur” puisque le message retourné par python suite au essais suivant est fort légitime:
Code : Tout sélectionner
def speed+(event):
tc = tc + 0.1
def speed-(event):
tc = tc - 0.1
#listener.register(2, p.IODIR_FALLING_EDGE, speed+)
#listener.register(3, p.IODIR_FALLING_EDGE, speed-)
Est-il possible de changer la valeur d'une variable "à la volée" ?
Quelle serait la structure du programme ?
Voilà, si vous avez la connaissance, des idées, des liens, je suis preneur.
Cordialement,
Laurent