Seite 1 von 1

LED-Matrix Simulator

Verfasst: Samstag 4. Juli 2009, 09:33
von whaeva
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?

Verfasst: Samstag 4. Juli 2009, 10:06
von 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.

Verfasst: Samstag 4. Juli 2009, 11:09
von Dill
Hi,


sehr schönes projekt.
falls ich am wochenende zeit finde und du interesse hast würde ich dir das frontend zusammenbasteln. in pyqt.

Verfasst: Samstag 4. Juli 2009, 11:33
von whaeva
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 :-)

Verfasst: Samstag 4. Juli 2009, 11:38
von Dill
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?

Verfasst: Samstag 4. Juli 2009, 12:14
von whaeva

Verfasst: Samstag 4. Juli 2009, 18:41
von 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ß

Verfasst: Samstag 4. Juli 2009, 19:18
von 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.

Verfasst: Sonntag 5. Juli 2009, 06:17
von snafu
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?

Verfasst: Sonntag 5. Juli 2009, 14:15
von whaeva
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

Verfasst: Dienstag 7. Juli 2009, 16:24
von yipyip
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

Verfasst: Sonntag 26. Juli 2009, 20:04
von whaeva
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

Verfasst: Sonntag 26. Juli 2009, 21:21
von Pascal
ich habe im Internet mal etwas gefunden, was dir evtl. auch helfen könnte:

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