Hallo und frohe Ostern,
ich bin gerade dabei mit ein Webradio zu bauen und scheiter gerade am LCD-Display.
Problem 1. Zeile: Künster + Titel können meistens nicht angezeigt werden da zu viele Buchstaben
Problem 2. Zeile: Wie bekomme ich die aktuelle Uhrzeit (hh:mm) in die Zeile ?
Aktuell sieht es so aus, dass der mpd stabil läuft. Radiosender und Mp3´s kann ich per mpdruid sehr gut ändern. An- und Ausschalter funktionieren und das Display wird angesprochen.
Schön wäre es, wenn ich eine Laufschrift in der ersten Zeile hinbekommen könnte und diese sich alle 20 sec aktualisiert. und in der zweiten Zeile nur die Uhrzeit hätte.
Ich habe mal gelesen, dass es nicht machbar ist die Zeilen unabhängig voneinander anzusprechen. Stimmt das ?
Ich hätte auch kein Problem damit wenn beide Zeilen mit Laufschrift sind und wenn die Uhrzeit sich auch alle 20 sec (nur) aktualisiert.
Kann mir jemand eventuell bei meinem Problem helfen ?
Unten mein Script für das LCD Display. Ich hoffe, dass der Editor richtig angewendet wurde.
Vielen Dank für eure Hilfe und einen schönen Ostermontag ![/php]
[/code]
#!/usr/bin/python
#
# Script for Raspberry Pi Internet Radio
# Date : 10/01/2012
import RPi.GPIO as GPIO
import time
import os
# Die Zuordnung der GPIO Pins, wo die Pins des LC- Displays angeschlossen sind.
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18
LCD_WIDTH = 16 # Deklarierung der Zeichen pro Zeile
DISPLAY_LINE_1 = 0x80 # Adresse der ersten Display Zeile
DISPLAY_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile
LCD_CHR = True
LCD_CMD = False
LCD_LINE_1 = 0x80 # Deklarierung der Adresse der ersten Zeile
LCD_LINE_2 = 0xC0 # Deklarierung der Adresse der zweiten Zeile
LCD_LINE_3 = 0x94 # Deklarierung der Adresse der dritten Zeile
LCD_LINE_4 = 0xD4 # Deklarierung der Adresse der vierten Zeile
# Zeitkonstanten
E_PULSE = 0.00005
E_DELAY = 0.00005
def main():
# Hauptprogrammblock
GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
GPIO.setup(LCD_E, GPIO.OUT) # E
GPIO.setup(LCD_RS, GPIO.OUT) # RS
GPIO.setup(LCD_D4, GPIO.OUT) # DB4
GPIO.setup(LCD_D5, GPIO.OUT) # DB5
GPIO.setup(LCD_D6, GPIO.OUT) # DB6
GPIO.setup(LCD_D7, GPIO.OUT) # DB7
# Initialisieren der Anzeige
lcd_init()
# Ausgabe
title = get_title()
lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string(title,1)
# lcd_byte(LCD_LINE_1, LCD_CMD)
# lcd_string("selber kleiner",2)
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string("FUCKI",2)
#lcd_byte(LCD_LINE_3, LCD_CMD)
#lcd_string("by",2)
#lcd_byte(LCD_LINE_4, LCD_CMD)
#lcd_string("RPI-PROJEKT.de", 2)
time.sleep(4)
os.system("mpc play")
def get_title():
f=os.popen("mpc current")
data = ""
for i in f.readlines():
data += i
if len(data) <= 1:
data = "N/A"
data = data[data.find(":")+2:]
data = data[:data.find("|")]
data += " "
return data
def lcd_init():
# Initialise display
lcd_byte(0x33,LCD_CMD)
lcd_byte(0x32,LCD_CMD)
lcd_byte(0x28,LCD_CMD)
lcd_byte(0x0C,LCD_CMD)
lcd_byte(0x06,LCD_CMD)
lcd_byte(0x01,LCD_CMD)
def lcd_string(message,style):
# Send string to display
# style=1 Left justified
# style=2 Centred
# style=3 Right justified
if style==1:
message = message.ljust(LCD_WIDTH," ")
elif style==2:
message = message.center(LCD_WIDTH," ")
elif style==3:
message = message.rjust(LCD_WIDTH," ")
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
def lcd_byte(bits, mode):
# Send byte to data pins
# bits = data
# mode = True for character
# False for command
GPIO.output(LCD_RS, mode) # RS
# High bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x10==0x10:
GPIO.output(LCD_D4, True)
if bits&0x20==0x20:
GPIO.output(LCD_D5, True)
if bits&0x40==0x40:
GPIO.output(LCD_D6, True)
if bits&0x80==0x80:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
# Low bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x01==0x01:
GPIO.output(LCD_D4, True)
if bits&0x02==0x02:
GPIO.output(LCD_D5, True)
if bits&0x04==0x04:
GPIO.output(LCD_D6, True)
if bits&0x08==0x08:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
if __name__ == '__main__':
main()