MPD - Taster NEXT und PREVIOUS - Python

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe begonnen an einem Internet Radio, zu arbeiten. Ich habe einen kleinen Playlist mit Radiostationen schon erstellt.
    Ich habe auch vier Taster, die für Start, Stop, Next und Previous verantwortlich sind.
    Aber Next und Previous funktionieren nicht so, wie ich es möchte. Und zwar...
    Meine Playliste besteht zurzeit aus 3 Sender. ( Ich will später mehr hinzufügen).
    Erster Sender läuft. Ich drücke NEXT -- zweiter Sender läuft. Ich drücke noch mal NEXT -- letzter Sender der Playliste läuft. Wenn ich wieder den Taster betätige, passiert nichts. Ich möchte, dass das Abspielen wieder vom Anfang läuft, dass das Abspielen zu der ersten Position springt.
    Das gleiche Problem betrifft PREVIOUS Taster.
    Ich habe es auf verschiedene Art und Weise probiert, ich habe im Internet viele Internetseiten gelesen, Tutorials auf youtube geschaut, aber ich konnte nirgendwo die Lösung für mein Problem finden.

    Kann jemand von Euch mir helfen?


    Viele Grüße
    A.

  • Moin agnesss9418,

    erstmal: Herzlich Willkommen im Forum!

    So ganz ohne Programm kann dir keiner helfen.
    Wenn du magst dann poste doch deinen Code hier.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.


  • Ich drücke noch mal NEXT -- letzter Sender der Playliste läuft. Wenn ich wieder den Taster betätige, passiert nichts. Ich möchte, dass das Abspielen wieder vom Anfang läuft, dass das Abspielen zu der ersten Position springt.

    Hi,

    wenn du Repeat "an" hast, dann müsste er doch auf den ersten springen, oder? Falls nicht müsstest du wohl die Länge der Liste abfragen und prüfen wo du dich befindest.

    /zac

  • Hi,

    das ist mein Programm, noch nicht abgeschlossen. Ich will es später ein bisschen verbessern - Displayanzeige, raspberry shutdown durch Tasterbetätigung uzw.


    import RPi.GPIO as GPIO
    import time
    import os
    import sys

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(36, GPIO.IN)
    GPIO.setup(38, GPIO.IN)
    GPIO.setup(40, GPIO.IN)
    GPIO.setup(32, GPIO.IN)

    while True:

    taster_stop = GPIO.input(36)
    taster_play = GPIO.input(38)
    taster_next = GPIO.input(32)
    taster_prev = GPIO.input(40)


    if taster_stop:
    os.system('mpc stop')
    print('stop')

    if taster_play:
    os.system('mpc play')
    print(os.system('mpc current'))

    if taster_next:
    os.system('mpc next')
    print(os.system('mpc current'))

    if taster_prev:
    os.system('mpc prev')
    print(os.system('mpc current'))


    Zac,
    sollte zu der ersten Position springen aber es geht nicht. das gleiche passiert beim Previous. Wenn die erste Position abgespielt wird, und ich noch mal Previous drücke, läuft die erste Position weiter.
    es kann sein, dass der Fehler in meinem Programm liegt. Ich muss zugeben, ich bin mit dem Programmieren leider nicht so fortgeschritten. Ich versuche das mir selbst beizubringen :denker:

    A.

    Einmal editiert, zuletzt von agnesss9418 (22. März 2017 um 12:23)

    • Offizieller Beitrag

    Es gibt für python, wie überraschend :), ein Modul für den MPD. Klick Damit ersparst du das ganze hässliche os.systeme. Jetzt fühst du ja nur konsolen befehle aus, und wenn die paylist zu ende ist, ist sie zu ende, es gibt einfach kein next. Was man machen kann, ist die länge der playlist rauskriegen, und wenn du am ende bist halt den indext wieder auf 0 setzen. Vielleicht geht das aber mit dem Modul auch noch einfacher. Ich hatte jetzt keine Lust die Doku zu lesen

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • oki, danke schön :)


    jetzt habe ich ein anderes Problem... mein Raspberry kann 'def' in python nicht erkennen.
    SyntaxError: invalid syntax

    ich will jetzt LCD Display ansteuern und probiere verschiedene Kommandos um mich besser mit diesem Thema auszukennen. und ich kann jetzt nicht weiter, wenn Raspi kein def also define erkennen kann.

    wie kann ich das Problem beheben?

  • Moin...
    bin zwar auch neu in python....aber so nen ärger hatte ich gleich am Anfang durch vermischen von Leerzeichen und Tabs.
    Jetzt nutz ich nur noch je 4 Leerzeichen und keine Tabs mehr.
    Ich glaube du vermischet hier einen Befehl mit einem Label
    Gruss Mad

    Einmal editiert, zuletzt von mmd (22. März 2017 um 19:24)

  • Display funktioniert. nehmen wir z.B:

    import time
    from RPLCD import CharLCD
    lcd = CharLCD(cols=16, rows=2, pin_rs=26, pin_e=24, pins_data=[22, 18, 16, 12])


    pi = (
    0b00000,
    0b00000,
    0b11111,
    0b01010,
    0b01010,
    0b01010,
    0b10011,
    0b00000,
    )


    lcd.create_char(0, pi)
    lcd.write_string(unichr(0))

    das hat bei mir funktioniert.


    das ist Scrolling:


    import time
    from RPLCD import CharLCD
    lcd = CharLCD(cols=16, rows=2, pin_rs=26, pin_e=24, pins_data=[22, 18, 16, 12])
    write_to_lcd(lcd, framebuffer, 16)


    framebuffer = [
    '',
    '',
    ]

    def write_to_lcd(lcd, framebuffer, num_cols):
    lcd.home()
    for row in framebuffer:
    lcd.write_string(row.ljust(num_cols)[:num_cols])
    lcd.write_string('\r\n')

    from RPLCD import CharLCD
    lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
    write_to_lcd(lcd, framebuffer, 16)

    import time
    long_string = 'This string is too long to fit'

    def loop_string(string, lcd, framebuffer, row, num_cols, delay=0.5):
    padding = ' ' * num_cols
    s = padding + string + padding
    for i in range(len(s) - num_cols + 1):
    framebuffer[row] = s[i:i+num_cols]
    write_to_lcd(lcd, framebuffer, num_cols)
    time.sleep(delay)

    while True:
    loop_string(long_string, lcd, framebuffer, 1, 16)


    ich wollte nur ausprobieren ob das funktioniert , dann verstehen, wie das funktioniert und zum Schluss, mit meinem eigenen Text ausprobieren.
    warum invalid syntax ?


    ich habe def mit taster im radio ausprobiert:

    import RPi.GPIO as GPIO
    import time
    import os
    import sys

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(36, GPIO.IN)
    GPIO.setup(38, GPIO.IN)
    GPIO.setup(40, GPIO.IN)
    GPIO.setup(32, GPIO.IN)

    while True:

    taster_stop = GPIO.input(36)
    taster_play = GPIO.input(38)
    taster_next = GPIO.input(32)
    taster_prev = GPIO.input(40)


    def stop():
    os.system('mpc stop')

    def play():
    os.system('mpc stop')

    def next():
    os.system('mpc next')

    def prev():
    os.system('mpc prev')


    if taster_stop:
    stop

    if taster_play:
    play

    if taster_prev:
    prev


    auch invalid syntax...
    oder kann es auch sein, dass ich Funktionsweise von 'def' nicht verstehe... =(

    Einmal editiert, zuletzt von agnesss9418 (23. März 2017 um 11:07)

  • Moin agnesss9418,

    das freut mich.

    Dann kannst du ja dein Thema als "erledigt" markieren.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!