WIP sense_morse : refactoring, gestion code morse incorrect / non interpretable
This commit is contained in:
@ -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()
|
||||||
|
Reference in New Issue
Block a user