WIP sense_morse : refactoring, gestion code morse incorrect / non interpretable

This commit is contained in:
Jérémie DUCASTEL
2020-05-26 21:38:50 +02:00
parent 239d515fcc
commit efb10c9127

View File

@ -32,6 +32,10 @@ END_WORD = ' '
class MorseSenseHatKeyer: class MorseSenseHatKeyer:
green = [0, 255, 0]
yellow = [255, 255, 0]
red = [255, 0, 0]
def __init__(self): def __init__(self):
self.sense = SenseHat() self.sense = SenseHat()
self.sense.stick.direction_up = self.pushed_up self.sense.stick.direction_up = self.pushed_up
@ -49,66 +53,86 @@ class MorseSenseHatKeyer:
self.current_morse_char = '' self.current_morse_char = ''
def pushed_right(self, event): def pushed_right(self, event):
""" validation """ """ validation : caractère, mot, message """
# selon le cas : validation de la lettre, du mot etc # selon le cas : validation de la lettre, du mot etc
if event.action != ACTION_RELEASED: if event.action != ACTION_RELEASED:
if self.current_morse_char == '': # pas de lettre en cours, validation du mot, et affichage if self.current_morse_char == '': # pas de lettre en cours, validation du mot, et affichage
self.sense.show_message(self.message_ascii) self.sense.show_message(self.message_ascii)
elif self.current_morse_char != '': # validation de la lettre elif self.current_morse_char != '': # validation de la lettre
self.message_ascii += morse_talk.decode(self.current_morse_char) self.validate_char()
self.current_morse_char = ''
def pushed_down(self, event): def pushed_down(self, event):
""" ajout trait """ """ ajout trait """
if event.action != ACTION_RELEASED: if event.action == ACTION_HELD:
self.show_dash() self.show_dash()
self.current_morse_char += '-' if event.action == ACTION_RELEASED:
self.show_char() self.add_dash()
def pushed_up(self, event): def pushed_up(self, event):
""" ajout point """ """ ajout point """
if event.action != ACTION_RELEASED: if event.action == ACTION_HELD:
self.show_dot() self.show_dot()
self.current_morse_char += '.' if event.action == ACTION_RELEASED:
self.show_char() self.add_dot()
def show_dot(self, duration=0.1): def show_dot(self, rgb=None):
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, 255, 255, 255) self.sense.set_pixel(x, y, rgb)
time.sleep(duration) # time.sleep(duration)
def show_dash(self, duration=0.1): def show_dash(self, rgb=None):
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, 255, 255, 255) self.sense.set_pixel(x, y, rgb)
time.sleep(duration) # time.sleep(duration)
def refresh(self, event): def refresh(self, event):
pass pass
# self.sense.clear() # self.sense.clear()
def show_char(self): def show_char(self, char, rgb=None):
char = morse_talk.decode(self.current_morse_char) """ affiche un caractère """
rgb = rgb or [150, 150, 150]
self.sense.clear() self.sense.clear()
self.sense.show_letter(char) self.sense.show_letter(char, rgb)
def add_dot(self): def add_dot(self):
pass """ ajout d'un point au caractère courant """
try:
self.current_morse_char += '.'
char = morse_talk.decode(self.current_morse_char)
self.show_char(char, self.yellow)
except KeyError as err: # l'ajout ne donne pas un caractère interprétable
self.show_char('X', self.red)
self.current_morse_char = ''
def add_dash(self): def add_dash(self):
pass """ ajout d'un trait au caractère courant """
self.current_morse_char += '-'
try:
char = morse_talk.decode(self.current_morse_char)
self.show_char(char, self.yellow)
except KeyError as err: # l'ajout ne donne pas un caractère interprétable
self.show_char('X', self.red)
self.current_morse_char = ''
def reset_char(self): def reset_char(self):
""" annule le caractère courant """ """ annule le caractère courant """
pass pass
def validate_char(self): def validate_char(self):
""" valide la lettre et ajoute un espace """ """ valide la lettre courante """
pass char = morse_talk.decode(self.current_morse_char)
self.show_char(char, self.green)
self.message_ascii += char
self.current_morse_char = ''
def show_message(self): def show_message(self):
""" affiche le message courant """ """ affiche le message courant """
@ -117,10 +141,10 @@ class MorseSenseHatKeyer:
if __name__ == "__main__": if __name__ == "__main__":
try: try:
keyer = MorseSenseHatKeyer() keyer = MorseSenseHatKeyer()
keyer.sense.show_message("morse://") keyer.sense.show_message("morse://", 0.02)
# waiting for jostick events and directing them to keyer # waiting for jostick events and directing them to keyer
pause() pause()
except (KeyboardInterrupt, SystemExit) as err: except (KeyboardInterrupt, SystemExit) as err:
sense = SenseHat() sense = SenseHat()
sense.show_message('out') sense.show_message('out', 0.02)
sense.clear() sense.clear()