#!/usr/bin/python3 # -*- coding: utf-8 -*- """ test d'aide à l'écriture de message en morse 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 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 utilise la lib morse-talk pour le decodage / encodage $ pip install morse-talk """ 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: def __init__(self): self.sense = SenseHat() 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 = '' def pushed_left(self, event): """ correction """ # correction if event.action != ACTION_RELEASED: self.current_morse_char = '' def pushed_right(self, event): """ validation """ # 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 = '' def pushed_down(self, event): """ ajout trait """ if event.action != ACTION_RELEASED: self.show_dash() self.current_morse_char += '-' self.show_char() def pushed_up(self, event): """ ajout point """ if event.action != ACTION_RELEASED: self.show_dot() self.current_morse_char += '.' self.show_char() def show_dot(self, duration=0.1): 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) def show_dash(self, duration=0.1): 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) def refresh(self, event): pass # self.sense.clear() def show_char(self): char = morse_talk.decode(self.current_morse_char) self.sense.clear() self.sense.show_letter(char) def add_dot(self): pass def add_dash(self): pass def reset_char(self): """ annule le caractère courant """ pass def validate_char(self): """ valide la lettre et ajoute un espace """ pass def show_message(self): """ affiche le message courant """ if __name__ == "__main__": try: keyer = MorseSenseHatKeyer() keyer.sense.show_message("morse://") # waiting for jostick events and directing them to keyer pause() except (KeyboardInterrupt, SystemExit) as err: sense = SenseHat() sense.show_message('out') sense.clear()