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 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 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 utilisation du joystick de la sense hat
gauche = saisir un point haut = saisir un point
droit = saisir un trait bas = saisir un trait
haut = valider (selon le contexte : lettre, mot, message), ajouter un espace droite = valider (selon le contexte : lettre, mot, message), ajouter un espace
bas = corriger / annuler la dernière entrée 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 $ pip install morse-talk
utilisation :
$ python sense_morse.py
""" """
from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
from signal import pause from signal import pause
import time, morse_talk import time, morse_talk
DOT = '.'
DASH = '-'
PAUSE = ' '
END_CHAR = ' '
END_WORD = ' '
class MorseSenseHatKeyer: class MorseSenseHatKeyer:
green = [0, 255, 0] green = [0, 255, 0]
@ -38,16 +33,19 @@ class MorseSenseHatKeyer:
def __init__(self): def __init__(self):
self.sense = SenseHat() 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_up = self.pushed_up
self.sense.stick.direction_down = self.pushed_down self.sense.stick.direction_down = self.pushed_down
self.sense.stick.direction_left = self.pushed_left self.sense.stick.direction_left = self.pushed_left
self.sense.stick.direction_right = self.pushed_right self.sense.stick.direction_right = self.pushed_right
self.sense.stick.direction_any = self.refresh self.sense.stick.direction_any = self.refresh
self.message_ascii = '' # initalisation des variables de traitement
self.current_morse_char = '' self.message_ascii = '' # message construit sous forme ASCII
self.current_morse_char = '' # caractère morse en cours de construction
def pushed_left(self, event): def pushed_left(self, event):
""" correction """ """ correction (réinitialise caractère courant) """
# correction # correction
if event.action != ACTION_RELEASED: if event.action != ACTION_RELEASED:
self.current_morse_char = '' self.current_morse_char = ''
@ -62,48 +60,49 @@ class MorseSenseHatKeyer:
self.validate_char() self.validate_char()
def pushed_down(self, event): def pushed_down(self, event):
""" ajout trait """ """ ajout d'un trait """
if event.action == ACTION_HELD: if event.action == ACTION_HELD: # tant que le bouton est pressé
self.show_dash() self.show_dash() # affichage d'un trait
if event.action == ACTION_RELEASED: if event.action == ACTION_RELEASED: # au relachement
self.add_dash() self.add_dash() # ajout du trait si possible
def pushed_up(self, event): def pushed_up(self, event):
""" ajout point """ """ ajout point """
if event.action == ACTION_HELD: if event.action == ACTION_HELD: # tant que le bouton est pressé
self.show_dot() self.show_dot() # affichage d'un point
if event.action == ACTION_RELEASED: if event.action == ACTION_RELEASED:
self.add_dot() self.add_dot() # ajout du point si possible
def show_dot(self, rgb=None): def show_dot(self, rgb=None):
# affichage d'un point sur la matrice LED
rgb = rgb or [150, 150, 150] rgb = rgb or [150, 150, 150]
self.sense.clear() self.sense.clear()
for x in range(3, 5): for x in range(3, 5):
for y in range(3, 5): for y in range(3, 5):
self.sense.set_pixel(x, y, rgb) self.sense.set_pixel(x, y, rgb)
# time.sleep(duration)
def show_dash(self, rgb=None): def show_dash(self, rgb=None):
# affichage d'un trait sur la matrice LED
rgb = rgb or [150, 150, 150] rgb = rgb or [150, 150, 150]
self.sense.clear() self.sense.clear()
for x in range(1, 7): for x in range(1, 7):
for y in range(3, 5): for y in range(3, 5):
self.sense.set_pixel(x, y, rgb) self.sense.set_pixel(x, y, rgb)
# time.sleep(duration)
def refresh(self, event): def refresh(self, event):
pass pass
# self.sense.clear() # self.sense.clear()
def show_char(self, char, rgb=None): 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] rgb = rgb or [150, 150, 150]
self.sense.clear() self.sense.clear()
self.sense.show_letter(char, rgb) self.sense.show_letter(char, rgb)
def add_dot(self): 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: try:
self.current_morse_char += '.' self.current_morse_char += '.'
char = morse_talk.decode(self.current_morse_char) char = morse_talk.decode(self.current_morse_char)
@ -113,7 +112,9 @@ class MorseSenseHatKeyer:
self.current_morse_char = '' self.current_morse_char = ''
def add_dash(self): 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 += '-' self.current_morse_char += '-'
try: try:
char = morse_talk.decode(self.current_morse_char) char = morse_talk.decode(self.current_morse_char)
@ -122,13 +123,15 @@ class MorseSenseHatKeyer:
self.show_char('X', self.red) self.show_char('X', self.red)
self.current_morse_char = '' self.current_morse_char = ''
def show_error(self):
pass
def reset_char(self): def reset_char(self):
""" annule le caractère courant """ """ annule le caractère courant """
pass self.current_morse_char = ''
def validate_char(self): 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) char = morse_talk.decode(self.current_morse_char)
self.show_char(char, self.green) self.show_char(char, self.green)
self.message_ascii += char self.message_ascii += char
@ -138,13 +141,13 @@ class MorseSenseHatKeyer:
""" affiche le message courant """ """ affiche le message courant """
if __name__ == "__main__": if __name__ == "__main__": # lors de l'execution du script en standalone
try: try:
keyer = MorseSenseHatKeyer() keyer = MorseSenseHatKeyer()
keyer.sense.show_message("morse://", 0.02) 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() pause()
except (KeyboardInterrupt, SystemExit) as err: except (KeyboardInterrupt, SystemExit) as err: # lors d'un CTRL+C pour interruption
sense = SenseHat() sense = SenseHat()
sense.show_message('out', 0.02) sense.show_message('bye', 0.02)
sense.clear() sense.clear()