Grundlage meines Projektes ist die UTFT-Library von Henning Karlsen.
Ich versuche in meinem Programm 3 Graphen anzuzeigen mit jeweils einem Sinus.
Wenn ich am Ende angekommen bin, versuche ich die nächsten 10 Werte mit weißen Pixeln zu überschreiben.
Bei einem Graph klappt das auch ganz gut. Möchte ich aber auch die jeweils 10 vorangegangenen Werten der Sinus-Kurven überschreiben bleibt das Programm hängen.
Ist mein Microcontroller dafür zu langsam?
Gibt es eine andere Möglichkeit die alten Daten zu löschen anstatt sie mit weißen Pixeln zu überschreiben?
Im Anhang mein Code.
Bin für jeden Tipp dankbar.
Viele Grüße!
for (int i=30; i<=(780*20); i++)
{
x++;
if(x==780)
x=30;
Code bitte in Code Tags </> posten, nicht als Quote.
Es kommt drauf an, was Dein Graifk-Kontroller kann. Wenn der ein Rechteck füllen oder löschen kann, dann überschreibst Du einfach das ganze Rechteck mit den alten Kurven.
Welchen Arduino hast Du denn, daß der 3 Arrays mit je 780 Werten speichern kann?
Gibt die Bibliothek die Grafik-Befehle direkt aus?
DrDiettrich:
Es kommt drauf an, was Dein Graifk-Kontroller kann. Wenn der ein Rechteck füllen oder löschen kann, dann überschreibst Du einfach das ganze Rechteck mit den alten Kurven.
Das ist eine gute Idee geht aber denke ich nicht, da ich somit auch mein Koordinatensystem überschreiben würde
grfa1012:
Nein, da es passieren kann, dass ein Teil der Daten auf Höhe der x-Achse bzw auf der Beschriftung der x-Achse liegen
Dann lösche doch den ganzen Schirm (-bereich) und zeichne die gelöschten Achsen neu. So irre langsam sollte es dadurch nicht werden.
Das mit dem „Pixel setzen, die nicht überschrieben werden dürfen“ klingt für mich ziemlich umständlich, zumindest im Vergleich zum Neuzeichnen gelöschter Achsen.
Hallo,
"Gibt es eine andere Möglichkeit die alten Daten zu löschen anstatt sie mit weißen Pixeln zu überschreiben?"
Das kommt drauf an, wie Du den Grafikspeicher des Display manipulieren kannst.
Wenn die Lib die Möglichkeit bietet, einzelnen Pixel ein und aus- zu schalten,
dann kann es schnell werden.
Dem wird aber nicht so sein, also setzt Du ein Pixel, löscht es und setzt es
wieder- das kostet Zeit…
Mir ist keine Lib bekannt, die halbe Pixel zeichnen kann…
"yu=xh3+(sin(((i*3)*3.14)*0.0056)*40);"
x=30;
"myGLCD.drawPixel(x,yu);"
Beispiel: myGLCD.drawPixel(30, 47,5);
Die Lib muss also daraus eine ganze Zahl machen, vielleicht geht es schneller,
wenn Du eine ganze Zahl übergibst.
Ein alter Trick: wenn man Linien mit XOR schreibt, werden sie bei einer zweiten Ausgabe wieder gelöscht. Aber wenn der Grafik-Controller da nicht mitmacht, kann das auch ganz schön langsam werden.
gregorss:
Dann lösche doch den ganzen Schirm (-bereich) und zeichne die gelöschten Achsen neu. So irre langsam sollte es dadurch nicht werden.
Das mit dem „Pixel setzen, die nicht überschrieben werden dürfen“ klingt für mich ziemlich umständlich, zumindest im Vergleich zum Neuzeichnen gelöschter Achsen.
Gruß
Gregor
Doch genau das ist das Problem, das Programm wird irre langsam obwohl ich nur 3 mal die x-achse nachzeichne.
Aber da ich das ja in jedem durchgang bzw vor jedem neuen Wert einmal machen muss, wird das Programm sehr sehr langsam. Da ich auch noch gerne eine Skale an jeder x-achse hätte, müsste ich noch weitere Linien nachzeichnen. Tue ich dies, bricht mein Programm komplett zusammen.
Stelle doch einmal Deinen Sketch hier ein, wenn der nur ein Sinus rechnet und
diesen zeichnet, dann sollte das ja auf einem Arduino mit TFT nachzuvollziehen
sein.
Dann wäre es nicht schlecht zu wissen, welche Auflösung Dein Display hat.
Sagen wir einmal 480x320px.
D.h. Du kannst max. 480px auf der x-Achse darstellen, auch nur 320px in y.
Wenn Du da mehr rechnest, geht Zeit verloren.
Wie wird denn dieser Sinus gezeichnet? Statisch oder laufend?
Was ist denn "Skale an jeder x-achse hätte" ?
Ich glaube ohne Sketch wird das nichts- Rate mal mit Rosental…
Gruß und Spaß
Andreas