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