ajout commentaires

This commit is contained in:
Jérémie DUCASTEL
2020-05-26 22:14:02 +02:00
parent efb10c9127
commit 320333cc16

View File

@ -6,30 +6,25 @@ sur raspberry pi + sense hat
principe : saisie d'un message en morse via le joystick de la sense hat
la grille LED permet d'avoir un retour / analyse de ce qui est saisi
une fois le message construit, transmission via la matrice LED
utilisation du joystick de la sense hat
gauche = saisir un point
droit = saisir un trait
haut = valider (selon le contexte : lettre, mot, message), ajouter un espace
bas = corriger / annuler la dernière entrée
haut = saisir un point
bas = saisir un trait
droite = valider (selon le contexte : lettre, mot, message), ajouter un espace
gauche = corriger / annuler la dernière entrée
utilise la lib morse-talk pour le decodage / encodage
utilise la lib morse-talk pour le decodage / encodage. pour l'installation :
$ pip install morse-talk
utilisation :
$ python sense_morse.py
"""
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
from signal import pause
import time, morse_talk
DOT = '.'
DASH = '-'
PAUSE = ' '
END_CHAR = ' '
END_WORD = ' '
class MorseSenseHatKeyer:
green = [0, 255, 0]
@ -38,16 +33,19 @@ class MorseSenseHatKeyer:
def __init__(self):
self.sense = SenseHat()
# association des evenements générés par le joystick de la SenseHat
# aux méthodes de traitement internes
self.sense.stick.direction_up = self.pushed_up
self.sense.stick.direction_down = self.pushed_down
self.sense.stick.direction_left = self.pushed_left
self.sense.stick.direction_right = self.pushed_right
self.sense.stick.direction_any = self.refresh
self.message_ascii = ''
self.current_morse_char = ''
# initalisation des variables de traitement
self.message_ascii = '' # message construit sous forme ASCII
self.current_morse_char = '' # caractère morse en cours de construction
def pushed_left(self, event):
""" correction """
""" correction (réinitialise caractère courant) """
# correction
if event.action != ACTION_RELEASED:
self.current_morse_char = ''
@ -62,48 +60,49 @@ class MorseSenseHatKeyer:
self.validate_char()
def pushed_down(self, event):
""" ajout trait """
if event.action == ACTION_HELD:
self.show_dash()
if event.action == ACTION_RELEASED:
self.add_dash()
""" ajout d'un trait """
if event.action == ACTION_HELD: # tant que le bouton est pressé
self.show_dash() # affichage d'un trait
if event.action == ACTION_RELEASED: # au relachement
self.add_dash() # ajout du trait si possible
def pushed_up(self, event):
""" ajout point """
if event.action == ACTION_HELD:
self.show_dot()
if event.action == ACTION_HELD: # tant que le bouton est pressé
self.show_dot() # affichage d'un point
if event.action == ACTION_RELEASED:
self.add_dot()
self.add_dot() # ajout du point si possible
def show_dot(self, rgb=None):
# affichage d'un point sur la matrice LED
rgb = rgb or [150, 150, 150]
self.sense.clear()
for x in range(3, 5):
for y in range(3, 5):
self.sense.set_pixel(x, y, rgb)
# time.sleep(duration)
def show_dash(self, rgb=None):
# affichage d'un trait sur la matrice LED
rgb = rgb or [150, 150, 150]
self.sense.clear()
for x in range(1, 7):
for y in range(3, 5):
self.sense.set_pixel(x, y, rgb)
# time.sleep(duration)
def refresh(self, event):
pass
# self.sense.clear()
def show_char(self, char, rgb=None):
""" affiche un caractère """
""" affiche un caractère dans la couleur définie (gris par defaut)"""
rgb = rgb or [150, 150, 150]
self.sense.clear()
self.sense.show_letter(char, rgb)
def add_dot(self):
""" ajout d'un point au caractère courant """
""" ajout d'un point au caractère courant
tant que le caractère courant reste interpretable
sinon, affichage d'une erreur et reinitialise le caractère courant """
try:
self.current_morse_char += '.'
char = morse_talk.decode(self.current_morse_char)
@ -113,7 +112,9 @@ class MorseSenseHatKeyer:
self.current_morse_char = ''
def add_dash(self):
""" ajout d'un trait au caractère courant """
""" ajout d'un trait au caractère courant
tant que le caractère courant reste interpretable
sinon, affichage d'une erreur et reinitialise le caractère courant """
self.current_morse_char += '-'
try:
char = morse_talk.decode(self.current_morse_char)
@ -122,13 +123,15 @@ class MorseSenseHatKeyer:
self.show_char('X', self.red)
self.current_morse_char = ''
def show_error(self):
pass
def reset_char(self):
""" annule le caractère courant """
pass
self.current_morse_char = ''
def validate_char(self):
""" valide la lettre courante """
""" valide la lettre courante, et donne un retour visuel """
char = morse_talk.decode(self.current_morse_char)
self.show_char(char, self.green)
self.message_ascii += char
@ -138,13 +141,13 @@ class MorseSenseHatKeyer:
""" affiche le message courant """
if __name__ == "__main__":
if __name__ == "__main__": # lors de l'execution du script en standalone
try:
keyer = MorseSenseHatKeyer()
keyer.sense.show_message("morse://", 0.02)
# waiting for jostick events and directing them to keyer
# waiting for joystick events and directing them to keyer
pause()
except (KeyboardInterrupt, SystemExit) as err:
except (KeyboardInterrupt, SystemExit) as err: # lors d'un CTRL+C pour interruption
sense = SenseHat()
sense.show_message('out', 0.02)
sense.show_message('bye', 0.02)
sense.clear()