LED-Matrix Simulator

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Ich möchte die Ansteuerung einer LED Matrix mit Python simulieren und suche daher ein paar Tips, wie ich farbige Felder auf den Bildschirm zaubern kann.

http://www.mikrocontroller.net/articles/LED-Matrix
http://www.youtube.com/watch?v=scRxKSdn ... r_embedded

Das Multiplexing soll nach Möglichkeit auch nachvollzogen werden können (Timing etc. einstellen und dann durchsteppen).
Aber das ist dann ja mein Problem.
30 Hz sollten machbar sein.

Was nimmt man da? pyGame?
BlackJack

@whaeva: Also "farbige Felder" sollten sich mit jedem GUI-Toolkit auf den Bildschirm zaubern lassen. Inklusive PyGame oder auch Tkinter, wenn man nicht extra etwas installieren möchte.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Hi,


sehr schönes projekt.
falls ich am wochenende zeit finde und du interesse hast würde ich dir das frontend zusammenbasteln. in pyqt.
http://www.kinderpornos.info
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Lass dich nicht davon abhalten, das ganze Ding zu machen ;-) Ich habe sowieso keine Zeit, da ist der Beschäftigungsdrang immer sehr groß..

Ich hätte nur gerne etwas, dass ich für die spätere Ansteuerung mit Mikrocontroller und in C schonmal etwas Animationen etc. ausprobieren kann.

Das Durchsteppen des Multiplexens wär' dann bloß gut, um das Timing zu sehen..

Importfunktion für Blinkenlights ist aber optional :-)
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

whaeva hat geschrieben:Lass dich nicht davon abhalten, das ganze Ding zu machen ;-) Ich habe sowieso keine Zeit, da ist der Beschäftigungsdrang immer sehr groß..
da zu habe ich leider keine zeit.

was ist das für ein blinkenlights projekt an dem du da arbeitest?
du bist nicht zufällig aus aachen?
http://www.kinderpornos.info
problembär

Hallo,
ein paar Tips, wie ich farbige Felder auf den Bildschirm zaubern kann.
Meinst Du das z.B. so ?

Code: Alles auswählen

#!/usr/bin/env python

import random
import Tkinter

# Screen resolution:

RESX = 800
RESY = 600

class ColoredBoxesWin:

    def __init__(self):

        self.mw = Tkinter.Tk()
        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.mw.title("Colored Boxes")
        self.mw.geometry("+90+45")

        self.cv = Tkinter.Canvas(self.mw,
                                 bg = "white",
                                 width = RESX,
                                 height = RESY)

        self.cv.pack()

        speccicolors = ("black", "blue", "red", "magenta",
                        "green", "cyan", "yellow", "white")

        for i in range(25, RESY - 50, 50):
            for u in range(25, RESX - 50, 50):

                c = random.randrange(len(speccicolors))

                self.cv.create_rectangle(u, i, u + 45, i + 45,
                                        outline = speccicolors[c],
                                        fill = speccicolors[c])

        self.btn = Tkinter.Button(self.mw,
                                  text = "Ok",
                                  command = self.mw.destroy)

        self.btn.bind(sequence = "<Return>", func = self.bindFunc)
        self.btn.focus()

        self.btn.pack(side = Tkinter.RIGHT,
                      padx = 10,
                      pady = 10)

        self.mw.mainloop()

    def bindFunc(self, a):
        self.mw.destroy()

if __name__ == "__main__":
   app = ColoredBoxesWin()
Gruß
BlackJack

@problembär: Statt `c` und `randrange()` hätte man etwas direkter eine Farbe mit `random.choice()` auswählen können.

Da sind eine Menge "magische" Zahlen in dem Programm. Die teilweise in einem direkten Zusammenhang mit den Konstanten `XRES` und `YRES` stehen, der aber fix ist, also wenn man eines von beidem ändert, muss man auch das andere anpassen.

`bindFunc()` ist kein sinnvoller Name für die Funktion. Das hätte ich an der Stelle wohl mit einer ``lambda``-Funktion erledigt.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Weitere Kritikpunkte:

- Komische Namen
- unübersichtliche Strukturierung
- Definition von Klassenattributen, die überhaupt nicht gebraucht werden
- und überhaupt: Muss/sollte man hier wirklich eine Klasse verwenden?
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Ja, so in etwa :-)
Die Kästchen vllt. lieber als Instanzen in eine 2D-Liste /Array und mit RGB/HSV Werten.
Und noch eine Schleife mit 30 Hz..
:D
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Hallo whaeva,
hier eine kleine Demo mit Pygame.
http://paste.pocoo.org/show/127071/
Ich weiss nicht, ob ich das richtig verstanden habe: Soll pro Frame immer nur 1 Spalte angezeigt werden?
Wie auch immer, im Quelltext laesst sich das einstellen. (Interaktiv kann man bis jetzt noch nichts beeinflussen.)
Das Programm startet im Fullscreen-Modus und laesst sich mit ESC beenden.

:wink:
yipyip
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Sehr schön!
Ich hoffe, ich finde in den nächsten Wochen etwas Zeit, dein Beispiel nachzuvollziehen und mich ein bisschen in PyGame einzuarbeiten.

Kannte ich noch nicht:
http://docs.python.org/library/itertools.html
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

ich habe im Internet mal etwas gefunden, was dir evtl. auch helfen könnte:

http://paste.pocoo.org/show/130922/
Antworten