Bonjour,
j'ai fusionné deux codes récupérés sur internet, l'un pour lire une capteur d'infra-rouges, l'autre pour afficher du texte déroulant sur une cellule DEL 8x8.
J'en fais l'affichage sur 8x8 de ce qui est poussé par une télécommande à infra-rouges (genres télécommande de TV).
Dans mon système, l'usager doit avoir le choix d'un texte défilant sur la surface 8x8 ou d'un texte statique.
Je récupère donc la valeur reçue par le capteur IR et -selon le bouton appuyé - j'opère des actions.
Ci-bas, la partie pertinente du code ( les fonctions sont celles de la classe nommée « matrix » )
Voici la partie de code où je gère la commande de Défilement / Statisme
Voici la boucle de lecture infinie qui fonctionne très bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 class matrix() { def text_scroll(self): p = self.MAX7219_NUM * 8 for p in range(self.MAX7219_NUM * 8, len(self.VISIBLE) * -8 - 1, -1): self.display.fill(self.MAX7219_INVERT) self.display.text(self.VISIBLE, p, 1, not self.MAX7219_INVERT) self.display.show() sleep(self.MAX7219_SCROLL_DELAY) def text_fixe(self): self.display.fill(self.MAX7219_INVERT) self.display.text(self.VISIBLE, 0, 1, not self.MAX7219_INVERT) self.display.show() def affiche(self): if self.MAX7219_SCROLL_DELAY == 0: self.text_fixe() else: self.text_scroll() def ir_rcv(self, data): if data == "FIN": self.VISIBLE = self.LECTURE self.LECTURE = "" if data == "Defilement": #Touche "Pause" self.LECTURE = "" if self.MAX7219_SCROLL_DELAY > 0: self.MAX7219_SCROLL_DELAY = 0.15 else: self.MAX7219_SCROLL_DELAY = 0 else: self.LECTURE = self.LECTURE + data
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 led = matrix() classes = (NEC_8, NEC_16, SONY_12, SONY_15, SONY_20, RC5_IR, RC6_M0, MCE) ir = classes[0](p, cb) # Instantiate receiver ir.error_function(print_error) # Show debug information try: while True: gc.collect() led.affiche() # if valeurLue != "Rien" and valeurLue != None: # print(valeurLue) except KeyboardInterrupt: ir.close() print("Fin du test")
Mon problème est le suivant:
Lors que je appuie sur le bouton qui provoque le basculement entre "Défilement" et "Statique" :
- Ça fonctionne quand ....
1) la valeur de MAX7219_SCROLL_DELAY est plus grande que zéro ( MAX7219_SCROLL_DELAY > 0)
ça met la valeur à zéro et ça coupe le défilement- Ça ne fonctionne pas quand ...
1) je définis la valeur de MAX7219_SCROLL_DELAY à zéro par défaut
2) après avoir fait passer le texte de « défilement » ( MAX7219_SCROLL_DELAY > ) à « statique » ( MAX7219_SCROLL_DELAY = 0)
Bref, ça bloque systématiquement lorsque MAX7219_SCROLL_DELAY = 0
Je ne comprends pas pourquoi.
[*]J'ai pensé que ce pouvait être un problème de « zéro » comme valeur interdite (comme annoncé dans le titre), j'ai donc tenté le coup de gérer des valeur comme 25 ou 30 et inverser mes conditions dans le style « si MAX7219_SCROLL_DELAY > 20 => passe au mode statique »
[*]J'ai aussi pensé confier cette gestion à un autre bouton de ma télécommande en me disant que la télécommande changeait peut-être de valeur envoyée après avoir appuyé sur tel ou tel bouton : rien
Là, je me tourne vers vous, car je suis bloqué.
Voici le message d'erreur qui m'est retourné:
Error: bad block
Invalid start pulse
Pourtant, il me semble que la fin d'interprétation du code reçu soit la même pour ce bouton que pour les autres!!!
Merci à l'avance de votre aide et - déjà - de m'avoir lu jusques ici.
Ah oui --- si vous voulez la source complète, voici le lien: https://github.com/Patriboom/rpi_pico_max7219
Partager