Python LCD Ansteuerung Probleme

  • Hallo zusammen,

    [font="Calibri"]Ich bin seit kurzem Besitzer eines Rpi und nach einiger Zeit rumspielen mit dem hab ich mich dazu entschlossen den Rpi zu einem Web-Radio zu machen. Also kurz überlegt wie das ganze aussehen soll.[/font]

    [font="Calibri"]Kommt in eine Holzkiste mit LED-LCD Display ein paar Tasten, kleiner Verstärker und 2 Lautsprecher.[/font]

    [font="Calibri"]Also schnell mal Raspbian installiert, 16x4 LED-LCD mit HD44780 controler hatte ich noch ein paar im Keller podi dran verkabelt und webradio.py erstellt besser gesagt auch vielen Einzelteilen zusammengebastelt dort lauft der mpc player es funktioniert auch alles soweit. Nur mit der Senderanzeige hab ich so meine Probleme bzw. würde ich das gerne besser darstellen.[/font]

    [font="Calibri"] [/font]
    [font="Cambria"]Hierfür hab ich auch schon diesen code-schnipsel gefunden[/font]

    [font="Cambria"]mytext="Dies ist ein langer Text, der gescrollt dargestellt werden soll."
    [/font][font="Cambria"]longtext=' '*16+mytext
    while 1:
    for i in range(0,len(longtext)):
    lcd_byte(LCD_LINE_1,LCD_CMD)
    lcd_string(longtext[i:(i+16)],1)
    time.sleep(0.5)[/font]


    [font="Cambria"]zudem würde ich gerne in LINE_4 die aktuelle Uhrzeit anzeigen lassen [/font]

    [font="Cambria"]Nur ich und coden/Programmieren no way das wird nix, ich kann das Ganze in eine schöne Holzkiste packen mit Holztaster und Beschriftung einfräßen.[/font]

    [font="Cambria"]Ich bin ja froh das das ganze so funktioniert wie es bis jetzt funktioniert[/font]

    [font="Cambria"]Also bin um jede Hilfe dankbar[/font]

    [font="Cambria"]Gruß Alex[/font]
    [font="Cambria"] [/font]

  • Problem behoben

    ##!/usr/bin/python
    # -*- coding: utf-8 -*-
    #
    # Script for Raspberry Pi Internet Radio
    #
    # Author: Alexander Amend
    #
    # Date : 06/04/2013
    #
    # Version : 1.28
    #

    # The wiring for the LCD is as follows:
    # 1 : GND
    # 2 : 5V
    # 3 : Contrast (0-5V)*
    # 4 : RS (Register Select)
    # 5 : R/W (Read Write) - GROUND THIS PIN! We do not want the LCD to send anything to the Pi @ 5v
    # 6 : Enable or Strobe
    # 7 : Data Bit 0 - NOT USED
    # 8 : Data Bit 1 - NOT USED
    # 9 : Data Bit 2 - NOT USED
    # 10: Data Bit 3 - NOT USED
    # 11: Data Bit 4
    # 12: Data Bit 5
    # 13: Data Bit 6
    # 14: Data Bit 7
    # 15: LCD Backlight +5V
    # 16: LCD Backlight GND (Red)
    # 17: LCD Backlight GND (Green)
    # 18: LCD Backlight GND (Blue)

    #import
    import RPi.GPIO as GPIO
    import time
    import os
    import datetime
    from time import localtime

    # Define GPIO to LCD mapping
    LCD_RS = 25
    LCD_E = 24
    LCD_D4 = 23
    LCD_D5 = 17
    LCD_D6 = 27
    LCD_D7 = 22

    # Defomte GPIO for Radio Controls next / prev / both = shutdown
    NEXT = 18
    PREV = 4

    # Define some device constants
    LCD_WIDTH = 16 # Maximum characters per line
    LCD_CHR = True
    LCD_CMD = False

    LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
    LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
    LCD_LINE_3 = 0x90 # LCD RAM address for the 3rd line
    LCD_LINE_4 = 0xD0 # LCD RAM address for the 4th line

    # Timing constants
    E_PULSE = 0.00005
    E_DELAY = 0.00005

    def main():
    # Main program block

    GPIO.cleanup()
    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
     
    GPIO.setup(NEXT, GPIO.IN) # Next Channel button
    GPIO.setup(PREV, GPIO.IN) # Previous Channel button
    # Initialise display
    lcd_init()

    # Send Clear Display
    lcd_byte (LCD_LINE_1, LCD_CMD)
    lcd_string ("",3)
    lcd_byte (LCD_LINE_2, LCD_CMD)
    lcd_string ("",3)
    lcd_byte (LCD_LINE_3, LCD_CMD)
    lcd_string ("",3)
    lcd_byte (LCD_LINE_4, LCD_CMD)
    lcd_string ("",3)

    # Display Name and Version
    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("Internet Radio",2)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    lcd_string("****************",2)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("* A M E N D *",1)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string("********V.1.28**",1)
    time.sleep(5)
     
    # radio play
    os.system("mpc play")
    time.sleep(1)

    # read radio station
    f=os.popen("mpc current -f [%name%]")
    station = ""
    station+=' '
    for i in f.readlines():
    station += i

    while 1:
    # read rime and date
    # localtime = time.asctime( time.localtime(time.time()) ) # Day; Month; Day"14"; Clock
    # %a = abbreviated weekday ; %H: = hour using a 24-hour clock ; %M: minute ; %S: = second
    localtime = time.strftime("%a %H:%M:%S", time.localtime())


    # read button next
    if ( GPIO.input(NEXT) == True):
    os.system("mpc next")
    time.sleep(1)
    os.system("mpc play")
    f=os.popen("mpc current -f [%name%]")
    station = ""
    station+=' '
    for i in f.readlines():
    station += i

    # read button prev
    if ( GPIO.input(PREV) == True):
    os.system("mpc prev")
    time.sleep(1)
    os.system("mpc play")
    f=os.popen("mpc current -f [%name%]")
    station = ""
    station+=' '
    for i in f.readlines():
    station += i

    # read both button rext and prev for shutdown
    if (( GPIO.input(NEXT) == True) and ( GPIO.input(PREV) == True)):
    # Send shutdown Info
    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("Internet Radio",2)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    lcd_string("****************",1)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("* shutdown *",1)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string("****************",1)
    os.system("sudo shutdown -h now")

    # longtext=''*16+station
    # for i in range(0,len(longtext)):

    # Scroll text pick the first and set on the last
    value=station[1:len(station)]+station[0:1]
    station=value
           
    # Send Radio Info
    lcd_byte(LCD_LINE_1, LCD_CMD)
    lcd_string("Internet Radio",2)
    lcd_byte(LCD_LINE_2, LCD_CMD)
    # lcd_string(longtext[i:(i+16)],1)
    lcd_string(station,2)
    lcd_byte(LCD_LINE_3, LCD_CMD)
    lcd_string("Uhrzeit",2)
    lcd_byte(LCD_LINE_4, LCD_CMD)
    lcd_string(localtime,2)
    time.sleep(1)
           
    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),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()

    Edited once, last by AlexAmend (April 6, 2013 at 10:16 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!