From c02d69229f10ac0277d15b4ad6c5c982f16ad81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Je=CC=81re=CC=81mie=20DUCASTEL?= Date: Sun, 24 May 2020 00:31:51 +0200 Subject: [PATCH] ajout quelques scripts de test + WIP morse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pour projet lumières dans la nuit, sense_morse.py --- sense_clear.py | 4 ++ sense_morse.py | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ sense_stick.py | 41 +++++++++++++++++++ sense_temp.py | 12 ++++++ 4 files changed, 161 insertions(+) create mode 100644 sense_clear.py create mode 100644 sense_morse.py create mode 100644 sense_stick.py create mode 100644 sense_temp.py diff --git a/sense_clear.py b/sense_clear.py new file mode 100644 index 0000000..097919e --- /dev/null +++ b/sense_clear.py @@ -0,0 +1,4 @@ +from sense_hat import SenseHat + +sense = SenseHat() +sense.clear() diff --git a/sense_morse.py b/sense_morse.py new file mode 100644 index 0000000..b765d56 --- /dev/null +++ b/sense_morse.py @@ -0,0 +1,104 @@ +#!/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 = pushed_up + # self.sense.stick.direction_down = 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 = '' + self.sense.show_message("morse ready") + + def pushed_left(self, event): + if event.action != ACTION_RELEASED: + self.show_dot() + self.current_morse_char += '.' + self.show_char() + + def pushed_right(self, event): + if event.action != ACTION_RELEASED: + self.show_dash() + self.current_morse_char += '-' + self.show_char() + + def pushed_down(self, event): + # correction + if event.action != ACTION_RELEASED: + self.current_morse_char = '' + + def pushed_up(self, event): + # 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 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) + + +if __name__ == "__main__": + try: + keyer = MorseSenseHatKeyer() + # waiting for jostick events and directing them to keyer + pause() + except (KeyboardInterrupt, SystemExit) as err: + sense = SenseHat() + sense.show_message('out') + sense.clear() diff --git a/sense_stick.py b/sense_stick.py new file mode 100644 index 0000000..8d96042 --- /dev/null +++ b/sense_stick.py @@ -0,0 +1,41 @@ +from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED +from signal import pause + +x = 3 +y = 3 +sense = SenseHat() + +def clamp(value, min_value=0, max_value=7): + return min(max_value, max(min_value, value)) + +def pushed_up(event): + global y + if event.action != ACTION_RELEASED: + y = clamp(y - 1) + +def pushed_down(event): + global y + if event.action != ACTION_RELEASED: + y = clamp(y + 1) + +def pushed_left(event): + global x + if event.action != ACTION_RELEASED: + x = clamp(x - 1) + +def pushed_right(event): + global x + if event.action != ACTION_RELEASED: + x = clamp(x + 1) + +def refresh(): + sense.clear() + sense.set_pixel(x, y, 255, 255, 255) + +sense.stick.direction_up = pushed_up +sense.stick.direction_down = pushed_down +sense.stick.direction_left = pushed_left +sense.stick.direction_right = pushed_right +sense.stick.direction_any = refresh +refresh() +pause() diff --git a/sense_temp.py b/sense_temp.py new file mode 100644 index 0000000..61b2453 --- /dev/null +++ b/sense_temp.py @@ -0,0 +1,12 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +from sense_hat import SenseHat + +sense = SenseHat() + +temp = sense.get_temperature() + +message = "{0:.2f}°".format(temp) + +for i in range(0,3): + sense.show_message(message)