Uhrzeit auf 7 Segment Anzeige, Frage

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
robiv8
User
Beiträge: 3
Registriert: Sonntag 16. Juli 2017, 22:56

Hallo in die Runde,
Kurz zu mir: Bin weder Programmierer noch habe ich Ahnung von Python & Co
Experimentiere aber gerne :-)
Da ich mit meinem Problem nicht weiter komme und auch google mir keine Antwort gibt hoffe ich hier Hilfe zu bekommen.

Habe mir ein so eine Sieben Segment Anzeige gekauft und Erfolgreich angeschloßen. Über GitHub hab ich das Python module to drive LED Matrices & 7-segment displays (MAX7219) runtergeladen und es funktioniert Einwandfrei. https://github.com/rm-hull/luma.led_matrix
Da ich nur eine Uhrzeit haben will habe ich die sevensegment_demo.py auf meine Bedürfnisse gekürzt und es funktioniert.
Es gibt nur ein kleines Problem:
Im Code ist die Anzeigedauer festgelegt in

Code: Alles auswählen

clock(seg, seconds=10)
klar kann ich das erhöhen ergibt aber keinen sinn.
Was muss ich reinschreiben damit es beim Starten einfach Endlos läuft.

Danke schon mal im Voraus.
Robert

Und hier die Momentane Uhrzeit.py
Vielleicht kann man ja diese noch etwas entschlacken :-)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017 Richard Hull and contributors

import time
from datetime import datetime

from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.virtual import viewport, sevensegment

def clock(seg, seconds):

#    Display current time on device.
    interval = 0.5
    for i in range(int(seconds / interval)):
        now = datetime.now()
        seg.text = now.strftime("%H-%M-%S")

        # calculate blinking dot
        if i % 2 == 0:
            seg.text = now.strftime("%H-%M-%S")
        else:
            seg.text = now.strftime("%H %M %S")

        time.sleep(interval)

def main():
    # create seven segment device
    serial = spi(port=0, device=0, gpio=noop())
    device = max7219(serial, cascaded=1)
    seg = sevensegment(device)


    # Digit futzing
    clock(seg, seconds=1000)


if __name__ == '__main__':
    main()
Zuletzt geändert von Anonymous am Montag 17. Juli 2017, 00:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@robiv8: wenn Du experimentieren willst, ist es vielleicht keine schlechte Idee, wenn Du programmieren lernst. Dabei wirst Du Nicht automatisch zum Programmierer, aber vielleicht zu einem besseren Experimentierer.

Wenn Du willst, dass etwas endlos läuft, nimm eine Endlosschleife:

Code: Alles auswählen

from itertools import cycle

def clock(seg):
    interval = 0.5
    for format in cycle(["%H-%M-%S", "%H %M %S"]):
        now = datetime.now()
        seg.text = now.strftime(format)
        time.sleep(interval)
robiv8
User
Beiträge: 3
Registriert: Sonntag 16. Juli 2017, 22:56

Ich danke schon mal, ich teste das gleich Heute Abend mal.
robiv8
User
Beiträge: 3
Registriert: Sonntag 16. Juli 2017, 22:56

Danke vielmals!
Funktioniert einwandfrei. :)

Eine Frage hätte ich noch,
Ich hab das selbe Projekt noch mit einer LED Matrix (Python library interfacing LED matrix displays with the MAX7219 driver (using SPI))
Da will ich die selbe Uhrzeit anzeigen lassen aber die Sekunden sollen von Oben nach Unten einlaufen / Stehenbleiben / auslaufen!
Ist sowas möglich?
Soll ich da ein Neuen Thread aufmachen?

Danke
Robert

Hier der Fertige Code falls jemand Interesse hat:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017 Richard Hull and contributors

import time
from datetime import datetime
from itertools import cycle

from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.virtual import viewport, sevensegment

def clock(seg):

    interval = 0.5
    for format in cycle(["%H-%M-%S", "%H %M %S"]):
        now = datetime.now()
        seg.text = now.strftime(format)
        time.sleep(interval)

def main():
    # create seven segment device
    serial = spi(port=0, device=0, gpio=noop())
    device = max7219(serial, cascaded=1)
    seg = sevensegment(device)

    # Digit futzing
    clock(seg)

if __name__ == '__main__':
    main()

Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@robiv8: die Frage mit der LED-Matrix ist eine, wozu die Programmieren lernen mußt, und sie Dir dann selbst beantworten. Ein Forum ist nicht dazu da, fertige Lösungen für irgendwelchen Anwendungen zu präsentieren. Lerne Python, versuche Deine Anwendung umzusetzen und wenn Du konkrete Fragen hast, kannst Du gerne einen neuen Thread eröffnen.
Antworten