



Bildbox 1 (klick hier)
Hardware
- 1,69-Zoll-IPS-LCD-Touch-Display WS-30126 (RP 2350)
- USB-A zu USB-C Kabel
Firmware
- CircuitPython 10.0.0
Um das Aussehen wie in der oberen Bildbox zu realisieren, wird zunächst eine Bitmap-Datei mit 240x280 Pixeln vorbereitet und in einen Ordner 'images' gespeichert. Im Programm wird sie nach der Initialisierung des Displays in den 'main_screen' mit Hilfe der Bibliothek 'imageload' geladen. In gleicher Weise werden die Symbole für die 'Stoppuhr' und den 'Timer' dargestellt. Die Bitmapdateien sowie den Bitmap-Font können Sie von hier herunterladen, entpacken und in das Laufwerk 'CIRCUITPY' kopieren. Wie der Hintergrund und die Symbole angelegt werden, sehen Sie im unteren Kasten.
background = "/images/background.bmp" bmp_1 = "/images/stoppuhr.bmp" bmp_2 = "/images/timer.bmp" ## Background bg_bitmap,bg_pal = adafruit_imageload.load(background) bg_tile_grid = displayio.TileGrid(bg_bitmap, pixel_shader=bg_pal) main_screen.append(bg_tile_grid) ## Stoppuhr bmp1,bg_pal = adafruit_imageload.load(bmp_1,bitmap=displayio.Bitmap,palette=displayio.Palette) bg_pal.make_transparent(0) bg_tile_grid = displayio.TileGrid(bmp1, pixel_shader=bg_pal, x=45,y=185) main_screen.append(bg_tile_grid) ## Timer bmp2,bg2_pal = adafruit_imageload.load(bmp_2,bitmap=displayio.Bitmap,palette=displayio.Palette) bg2_pal.make_transparent(0) bg2_tile_grid = displayio.TileGrid(bmp2, pixel_shader=bg2_pal, x=135,y=185) main_screen.append(bg2_tile_grid)
In der Displaymitte soll ein Rechteck mit abgerundeten Ecken ('roundrect') später eine Funktion aufrufen. Die Codezeilen zeigen auch
dafür, wie das angelegt wird.
# show the display function area roundrect_f= RoundRect(40,130,160,40,20,fill=0x009900, outline=0x00ff00) main_screen.append(roundrect_f) # the label for the function updating_label_f = label.Label(font=terminalio.FONT, text="function", scale=2, color=0xffffff, line_spacing=1) updating_label_f.anchor_point = (0, 0) updating_label_f.anchored_position = (65, 135) main_screen.append(updating_label_f)
Den Aufruf der 'Stellfunktion', der 'Stoppuhrfunktion' und der 'Timerfunktion' lege ich auf bestimmte Displaybereiche, wie in dem
Einführungsbeispiel mit den grünen Rechtecken. Diese Bereiche werden den Displaypositionen zugeordnet, sind aber nicht
explizit sichtbar. In der Abbildung (unten) sind sie nur zur Veranschaulichung als durchscheinenden Rechtecke angedeutet:

Die entsprechenden Bereiche, welche abgefragt werden, sind unten zu sehen. Die Abfrage, ob dort eine Berührung erfolgte, ist in der
Hauptschleife 'while True:' anzuordnen. Die x- und y-Koordinaten sind mit ausreichender Genauigkeit wie im Bild mit den durchscheinenden
Rechtecken gewählt. Wenn Sie das so anordnen, wird bei einem Test, wie im früheren Beispiel, der Bildschirm kurz
abgedunkelt. Später soll der Bildschirm nach einer abgelaufenen Zeit ohne Aktion abgedunkelt werden. Deshalb sollen die Funktionen
nur im Zustand 'hell' möglich sein. Daher die Variable 'hell=True' bzw. 'hell=False'. Auf das Abdunkeln gehe ich dann noch ein.

# # Touchberuehrung registrieren # if touch.touched() : x, y = touch.get_point() x = 240 - x y = 270 - y # # Functionbereich aufrufen # if x > 40 and x < 200 and y > 110 and y < 170: display.brightness = 0.1 time.sleep(0.5) display.brightness = 0.1 hell = True start = time.monotonic() # # oberer Bereich fuer Uhrzeit # if x > 20 and x < 220 and y > 0 and y < 90 and hell == True: display.brightness = 0.1 time.sleep(0.5) display.brightness = 0.1 # zur Stellfunktion # set_time() # # unten links auswaehlen (fuer Stoppuhr) # if x > 25 and x < 105 and y > 180 and y < 270 and hell == True: display.brightness = 0.1 time.sleep(0.5) display.brightness = 0.1 # zur Stoppuhrfunktion # stopuhr_start_stop() # # unten rechts auswaehlen ( fuer Timer) # if x > 135 and x < 215 and y > 180 and y < 270 and hell == True: display.brightness = 0.1 time.sleep(0.5) display.brightness = 0.1 # zur Timerfunktion # time()
Damit keine Verwirrung entsteht, gebe ich den Quellcode bis hierher im nächsten Kasten noch einmal komplett an. Keine Angst. Wenn Sie ihn in die Thonny-IDE kopieren, sind alle Programmzeilen enthalten. Im Kasten werden nur aus Platzgründen nicht alle Zeilen angezeigt.
5 import time 6 import board 7 import busio 8 import displayio 9 import terminalio 10 import fourwire 11 from adafruit_st7789 import ST7789 12 import my_cst816d_r 13 from adafruit_bitmap_font import bitmap_font 14 from adafruit_display_text import label 15 from adafruit_display_shapes.roundrect import RoundRect 16 import adafruit_imageload 17 # Touchsensor initialisieren 18 touch = my_cst816d_r.Touch_CST816D(force_high_before_i2c=True) 19 # Bitmapfont nutzen 20 font_file = "fonts/spleen-16x32.bdf" 21 font = bitmap_font.load_font(font_file) 22 23 # Release any resources currently in use for the displays 24 displayio.release_displays() 26 25 cs=board.GP9 27 dc=board.GP8 28 sck=board.GP10 29 mosi=board.GP11 30 reset=board.GP13 31 bl=board.GP25 32 # Release any resources currently in use for the displays 33 displayio.release_displays() 34 spi = busio.SPI(sck, mosi) 35 display_bus = fourwire.FourWire(spi, command=dc, chip_select=cs, reset=reset) 36 display = ST7789(display_bus, rotation=0, width=240, height=320, backlight_pin=bl, rowstart=20, colstart=0) 37 display.brightness = 1 38 # Make the display context 39 main_screen = displayio.Group() 40 display.root_group = main_screen ... ... 114 while True: ... .... 162 # 163 # unten links auswaehlen (fuer Stoppuhr) 164 # 165 if x > 25 and x < 105 and y > 180 and y < 270 and hell == True: 166 stopuhr_start_stop() 167 display.brightness = 0.01 168 time.sleep(0.2) 169 display.brightness = 1 170 time.sleep(0.5) 171 # 172 # unten rechts auswaehlen ( fuer Timer) 173 # 174 if x > 135 and x < 215 and y > 180 and y < 270 and hell == True: 175 timer_start_stop() 176 display.brightness = 0.01 177 time.sleep(0.2) 178 display.brightness = 1 179 time.sleep(0.5)
Beim Testen sehen Sie im oberen Bereich die Uhrzeit, den Wochentag und das Datum. Wenn Sie das Display dort kurz antippen, wird es abgedunkelt
('brightness = 0.01') und sofort wieder auf 'brightness = 1' gestellt. Wenn länger als
60 Sekunden keine Aktion erfolgt, schaltet das Display ebenfalls dunkel (Strom sparen). Tippen Sie kurz auf den mittleren Bereich. Dann wird die
Helligkeit wieder auf ('brightness = 1') erhöht. Ebenso, wie im oberen Bereich verhält sich das Display beim
Tippen auf das Stoppuhr- bzw. Timersymbol. Hier sind die Funktionen stopuhr_start_stop(),
timer_start_stop() ebenso wie set_time() bereits angelegt, aber noch leer. Die Bildbox 1 zeigt Ihnen
Beispiele, wie diese Funktionen gestaltet werden können.
Wer sich das nicht selbst zutraut, der kann sich im Bereich "DOWNLOAD_UF2" die Anwendung herunterladen, muss sie dann aber
so wie angenboten benutzen und kann keine Änderungen daran vornehmen.
Viel Spass und Erfolg beim Ausprobieren.
Viel Spass und Erfolg beim Ausprobieren.