Hallo zusammen,
ich bin grade dran mir ein Raspberry Internet Radio zu bauen.
Alles funktioniert soweit wie es soll. Nun möchte ich das Sendernamen die mehr als 20 Buchstaben enthalten, wie eine Laufschrift angezeit werden. (von rechts nach links).
Das funktioniert auch soweit, aber in der Zeit wo der Sendername ausgegeben wird, wird der rest des Displays nicht mit ausgegeben (Zeile 2,3,4) und ich kann in dieser Zeit auch keine Sender wechseln. (Hardware ereignisse)
Den Fehler habe ich zwar gefunden aber ich weiss nicht wie ich das umgeben kann.
Der Fehler selbst:
Jedes mal wenn die Funktion ausgabe aufgerufen wird und der Text größer 20 Zeichen ist,
bleibt er solange mit der Ausgabe beschäftigt bis der Text abgearbeitet ist. So nun kann in der Zeit ja nichts anderes gemacht werden
Wie bekomme ich jetzt in Python eine parallelität hin, sodass der Text scrollt (von rechts nach links) und ich gleichzeitig die anderen Zeilen aktualisieren / ausgeben kann?
Ich habe ein 4*20 Zeichen Display (HD44780)
Hat jemand von euch sowas ähnliches schonmal realisiert?
Für Hilfestellungen aller Art wäre ich euch sehr Dankbar.
Hier ein Code ausschnitt:
def ausgabe(line, position, data):
# if line==1:
# lcd_byte(LCD_LINE_1, LCD_CMD)
# lcd_string(data, position)
#
# if line==2:
# lcd_byte(LCD_LINE_2, LCD_CMD)
# lcd_string(data, position)
#
# if line==3:
# lcd_byte(LCD_LINE_3, LCD_CMD)
# lcd_string(data, position)
#
# if line==4:
# lcd_byte(LCD_LINE_4, LCD_CMD)
# lcd_string(data, position)
if (len(data) > 20):
padding = " " * 20
oldText = data
data = padding + data + " "
for i in range (0, len(data)):
if line==1:
lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string(data[i:(i+20)],position)
if line==2:
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string(data[i:(i+20)],position)
if line==3:
lcd_byte(LCD_LINE_3, LCD_CMD)
lcd_string(data[i:(i+20)],position)
if line==4:
lcd_byte(LCD_LINE_4, LCD_CMD)
lcd_string(data[i:(i+20)],position)
#time.sleep(0.5)
#lcd_byte(LCD_LINE_2, LCD_CMD)
#lcd_string(oldText[:20])
else:
if line==1:
lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string(data,position)
if line==2:
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string(data,position)
if line==3:
lcd_byte(LCD_LINE_3, LCD_CMD)
lcd_string(data,position)
if line==4:
lcd_byte(LCD_LINE_4, LCD_CMD)
lcd_string(data,position)
Alles anzeigen