ajout commentaires
This commit is contained in:
@ -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()
|
||||||
|
Reference in New Issue
Block a user