3 """Visualisierungen für die LEDs des EAModuls.
5 Dieses Paket stellt verschiedene Visualisierungen für die LEDs auf dem EAModul
6 zur Verfügung gestellt.
8 Die Klasse EAModulGui visualisiert das EAModul in einem Fenster, die Klasse
9 EAModulCLI visualisiert es in der Konsole.
11 Damit die Visualisierer zum Einsatz kommen können, wird ein EAModul benötigt,
12 dessen LEDs sie darstellen sollen. Daher erstellt man zunächst ein übliches
15 >>> from eapi.gui import EAModulGui
16 >>> from eapi.hw import EAModul
20 Nun kann z.B. eine GUI für das EA-Modul erstellt werden. Der Aufruf ist
21 blockierend und zeigt ein Fenster mit drei LEDs (rot, gelb und grün) an.
25 Änderungen an den LEDs am Modul werden nun ebenfalls in der GUI dargestellt.
27 Als weitere Option bietet sich eine Anzeige auf der Konsole an. Hier wird das
28 EAModul in der Klasse EAModulCLI verpackt.
30 >>> ea_konsole = EAModulKonsole(ea)
32 Nun würde ein Schalten der LEDs nicht nur auf dem Modul, sondern auch in der
33 Konsole angezeigt werden.
35 ea.schalte_led(EAModul.LED_ROT, 1)
38 from tkinter
import Tk, Label, StringVar, YES, BOTH
44 Klasse, die zum Visualisieren des EAModuls dient.
46 def __init__(self, eamodul):
48 self._ea.led_event_registrieren(EAModul.LED_ROT,
50 self._ea.led_event_registrieren(EAModul.LED_GELB,
52 self._ea.led_event_registrieren(EAModul.LED_GRUEN,
55 def _rote_led_update(self, neuer_wert):
56 """Die Methode wird bei Änderungen der roten LED aufgerufen und muss
57 von Unterklasse überschrieben werden."""
58 raise NotImplementedError(
59 "Muss von einer Unterklasse überschrieben werden!")
61 def _gelbe_led_update(self, neuer_wert):
62 """siehe _rote_led_update"""
63 raise NotImplementedError(
64 "Muss von einer Unterklasse überschrieben werden!")
66 def _gruene_led_update(self, neuer_wert):
67 """siehe _gruene_led_update"""
68 raise NotImplementedError(
69 "Muss von einer Unterklasse überschrieben werden!")
74 Eine GUI für ein EAModul mit zwei Tastern und drei LEDs.
79 Erstellt eine GUI für das gegebenen EAModul.
85 fenster.title(
"EAModul - GUI")
86 fenster.geometry(
'300x300')
90 btn_taster0 = Button(fenster, text="Taster 0",
91 command=self.__taster0_gedrueckt)
94 btn_taster1 = Button(fenster, text="Taster 1",
95 command=self.__taster1_gedrueckt)
101 self.
var_rot = StringVar(value=
"0")
104 self.lbl_led_rot.pack(expand=YES, fill=BOTH)
106 self.
var_gelb = StringVar(value=
"0")
109 self.lbl_led_gelb.pack(expand=YES, fill=BOTH)
114 self.lbl_led_gruen.pack(expand=YES, fill=BOTH)
118 def __taster0_gedrueckt(self):
119 self._ea.schalte_led(EAModul.LED_ROT,
True)
121 def __taster1_gedrueckt(self):
122 self._ea.schalte_led(EAModul.LED_ROT,
False)
124 def __farbe_fuer_ledwert(self, led_wert, default_wert):
125 """Bestimmt für den led_wert eine Farbe.
127 Wenn der LED-Wert 1 ist, wird der default_wert zurückgegeben, sonst wird
128 lightgrey als Farbe verwendet."""
135 def _rote_led_update(self, neuer_wert):
136 self.var_rot.set(neuer_wert)
140 def _gelbe_led_update(self, neuer_wert):
141 self.var_gelb.set(neuer_wert)
145 def _gruene_led_update(self, neuer_wert):
146 self.var_gruen.set(neuer_wert)
152 """Eine Klasse, die die LEDs eines EAModul in der Konsole visualisiert.
155 >>> ea_konsole = EAModulKonsole(ea)
157 Wenn nun die LEDs geschaltet werden, wird dies durch eine bunte
158 Visualisierung auf der Konsole angezeigt.
162 ANSI_BG_BLACK =
"\033[40m"
163 ANSI_BG_RED =
"\033[41m"
164 ANSI_BG_GREEN =
"\033[42m"
165 ANSI_BG_YELLOW =
"\033[43m"
166 ANSI_FG_BLACK =
"\033[30m"
167 ANSI_FG_WHITE =
"\033[37m"
169 ANSI_ALL_ATTRIBUTES_OFF =
"\033[0m"
170 ANSI_ERASE_DISPLAY =
"\033[2J"
171 ANSI_CURSOR_HOME =
"\033[;H"
172 ANSI_BOLD =
"\033[1m"
173 ANSI_SAVE_CURSOR =
"\033[s"
174 ANSI_RESTORE_CURSOR =
"\033[u"
176 def __init__(self, eamodul):
177 super().__init__(eamodul)
181 def _rote_led_update(self, neuer_wert):
182 self.
__leds[0] = neuer_wert
185 def _gelbe_led_update(self, neuer_wert):
186 self.
__leds[1] = neuer_wert
189 def _gruene_led_update(self, neuer_wert):
190 self.
__leds[2] = neuer_wert
193 def __print_leds(self):
194 farbnamen = [
" rot ",
" gelb ",
" grün "]
200 for i
in range(len(self.
__leds)):
215 def __eamodul_erzeugen():
216 """Hilfsmethode, die ein EAModul erstellt, wenn noch keines vorhanden ist.
220 if __eamodul
is None:
228 Über den Taster 0 an dem Modul kann die gelbe LED gleichzeitig auf dem
229 Board und in der Konsole geschaltet werden. Mit dem Taster 1 kann die rote
230 LED auf die gleichte Weise gesteuert werden.
233 input(str(demo_taster.__doc__) +
"\n(Enter für Start)")
235 def taster0_gedrueckt(_):
236 ea = __eamodul_erzeugen()
237 ea.schalte_led(EAModul.LED_GELB, ea.taster_gedrueckt(0))
239 def taster1_gedrueckt(_):
240 ea = __eamodul_erzeugen()
241 ea.schalte_led(EAModul.LED_ROT, ea.taster_gedrueckt(1))
243 ea = __eamodul_erzeugen()
244 ea.taster_event_registrieren(0, taster0_gedrueckt)
245 ea.taster_event_registrieren(1, taster1_gedrueckt)
253 except KeyboardInterrupt:
257 def demo_cli_blinken():
259 Das Demo lässt die LEDs kurz blinken und visualisiert dies zusätzlich auf
264 input(str(demo_cli_blinken.__doc__) +
"\n(Enter)")
268 ea.schalte_led(EAModul.LED_ROT, 1)
270 ea.schalte_led(EAModul.LED_ROT, 0)
272 ea.schalte_led(EAModul.LED_ROT, 1)
274 ea.schalte_led(EAModul.LED_GELB, 1)
276 ea.schalte_led(EAModul.LED_GELB, 0)
278 ea.schalte_led(EAModul.LED_GELB, 1)
280 ea.schalte_led(EAModul.LED_GRUEN, 1)
287 Über den Taster 0 an dem Modul kann die gelbe LED gleichzeitig auf dem
288 Board und in der GUI geschaltet werden. Mit dem Taster 1 kann die rote LED
289 auf die gleichte Weise gesteuert werden.
291 input(str(demo_taster.__doc__) +
"\n(Enter für Start)")
293 def taster0_gedrueckt(_):
294 _ea = __eamodul_erzeugen()
295 _ea.schalte_led(EAModul.LED_GELB, ea.taster_gedrueckt(0))
297 def taster1_gedrueckt(_):
298 _ea = __eamodul_erzeugen()
299 _ea.schalte_led(EAModul.LED_ROT, ea.taster_gedrueckt(1))
301 ea = __eamodul_erzeugen()
302 ea.taster_event_registrieren(0, taster0_gedrueckt)
303 ea.taster_event_registrieren(1, taster1_gedrueckt)
313 Hauptfunktion, die bei Start des Moduls ausgeführt wird.
315 demo = input(
"Welches Demo soll gestartet werden?: " +
316 "demo_taster, demo_cli, demo_cli_blinken\n")
318 if demo ==
"demo_taster":
320 elif demo ==
"demo_cli":
322 elif demo ==
"demo_cli_blinken":
326 if __name__ ==
'__main__':
string ANSI_ALL_ATTRIBUTES_OFF
string ANSI_ERASE_DISPLAY