Raspberry Pico Micropython + SSD1306

Gast #7186802
Lesenswert?

Hallo an alle,

Ich hab aus Interesse von PICs in C zu einem RPI Pico mit Micropython 
gewechselt. Ich muss zugeben, mir fällt es etwas schwer.

Vor allem geht es gerade um Text schreiben auf einem Bildschirm.

Ich hab den Code aus den Tutorials, das auch funktioniert. Jedoch kann 
Ich kein Text löschen, bzw überschreiben.

Wenn Ich Text an eine Position setze an dem schon Text war, wird einfach 
die Kombination aus beidem gezeigt.
Wenn ich Leerzeichen an dieser Stelle einfüge, so wie ich das immer 
gemacht hab, dann bleiben die Zeichen bestehen.

Ist das wirklich so gedacht oder übersehe ich etwas?

Hier mein Code:
1
#------------------------------------------------
2
# Import Libraries
3
#------------------------------------------------
4

5
# General Lib
6
import board
7
import busio
8

9
# OLED lib
10
import displayio
11
import terminalio
12
from adafruit_display_text import label
13
import adafruit_displayio_ssd1306
14

15
# LED
16
import pwmio
17
import time
18
#------------------------------------------------
19
#------------------------------------------------
20

21

22
#------------------------------------------------
23
# Define GPIO
24
#------------------------------------------------
25

26
# RGB LED
27
LED_R = pwmio.PWMOut(board.GP10, frequency=5000, duty_cycle=0)
28

29

30
#------------------------------------------------
31
# OLED
32
#------------------------------------------------
33

34
# Reset OLED
35
displayio.release_displays()
36

37
i2c = busio.I2C(board.GP1, board.GP0)
38

39
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
40
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
41

42
# Make the display context
43
splash = displayio.Group()
44
display.show(splash)
45

46
#------------------------------------------------
47
#------------------------------------------------
48

49

50
#------------------------------------------------
51
# Functions
52
#------------------------------------------------
53
def Set_Led(R):
54
    LED_R.duty_cycle=R
55

56

57
def Write_OLED(text, x, y):
58
    text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00, x=x, y=y)
59
    splash.append(text_area)
60

61

62
#------------------------------------------------
63
#------------------------------------------------
64
    
65

66
# Main Loop    
67
while True:
68
    Write_OLED("ON", 20, 10)
69
    Set_Led(1) # ON (ist gegen GND geschaltet)
70
    time.sleep(2)
71
    
72
    Set_Led(65535) # OFF
73
    Write_OLED("  ", 20, 10) # keine Wirkung
74
    Write_OLED("OFF", 20, 10) # 
75
    time.sleep(2)

Vielen Dank
mbG
Gast #7186816
Lesenswert?

Zudem läuft das Programm nur 4 minuten, dann gibt es einen: „Memory 
Error: memory allocation failed, allocating 1024 bytes“

Ja, das Problem ist bekannt, da alles auf den Ram kommt- jedoch wird bei 
mir in der Schleife doch nichts hinzugefügt, mein Programm muss 
lediglich zwischen verschiedenen Adressen jumpen ?!
#7186967
Lesenswert?

1
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00, x=x, y=y)
2
splash.append(text_area)

dieser Teil darf nur einmal in einer Initialisierung ausgeführt werden, 
damit wird das label erzeugt. Danach kann der Text mit 'text_area.text = 
"xxx"' verändert werden.
Jetzt werden knapp unendlich viele Labels erzeugt und alle 
übereinandergelegt. Da geht dem pico irgendwann die Puste aus.
Gast #7187108
Lesenswert?

J. S. schrieb:
> text_area = label.Label(terminalio.FONT, text=text,
> color=0xFFFF00, x=x, y=y)
> splash.append(text_area)
>
> dieser Teil darf nur einmal in einer Initialisierung ausgeführt werden,
> damit wird das label erzeugt. Danach kann der Text mit 'text_area.text =
> "xxx"' verändert werden.
> Jetzt werden knapp unendlich viele Labels erzeugt und alle
> übereinandergelegt. Da geht dem pico irgendwann die Puste aus.

OHJE! Ok ja das war die Lösung. Diese Libraries muss man erst mal 
verstehen.
Vielen vielen Dank, das hat meine zwei Probleme gelöst.

Hier also die Lösung:
1
VARIABLE= label.Label(terminalio.FONT, text="", color=0xFFFF00, x=10, y=5)
2
splash.append(VARIABLE)
3

4
VARIABLE.text="Intensity: "
5
VARIABLE.text="blabla: "
6

7
ANDEREVARIABLE= label.Label(terminalio.FONT, text="", color=0xFFFF00, x=60, y=5)
8
splash.append(ANDEREVARIABLE)
9

10
ANDEREVARIABLE.text="Ergebnis "

lG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren