3 Graphen gleichzeitig löschen

Hallo zusammen,

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;

if(i>780)
{
for(int j=0; j<=10;j++)
{
myGLCD.setColor(VGA_WHITE);
myGLCD.drawPixel(x+j,buf1[x+j-1]);
myGLCD.drawPixel(x,buf2[x-1]);
myGLCD.drawPixel(x+j,buf3[x+j-1]);
}
}

yo=xh1+(sin(((i*3)*3.14)*0.0056)40);
buf1[x-1]=yo;
ym=xh2+(sin(((i
3)*3.14)*0.0056)40);
buf2[x-1]=ym;
yu=xh3+(sin(((i
3)*3.14)*0.0056)*40);
buf3[x-1]=yu;

myGLCD.setColor(VGA_BLACK);
myGLCD.drawPixel(x,yo);
myGLCD.drawPixel(x,ym);
myGLCD.drawPixel(x,yu);

780*20 = 15600... bist dir sicher?

Setzt doch mal hinter jede variable ein Serial.println() und schau dir auf dem uart Monitor an und ob es deiner Vorstellung entspricht

Und gib bitte die datentypen deiner Variablen bekannt

Aso *20 weil du 20mal deine Seite bzw volle Fläche nacheinander durchgehen willst

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:
Das ist eine gute Idee geht aber denke ich nicht, da ich somit auch mein Koordinatensystem überschreiben würde

Kannst Du das Überschreiben nicht einfach nur mit dem Teil machen, der die Kurve enthält?

Wäre auch nett, wenn Du DrDiettrichs Fragen beantworten könntest.

Gruß

Gregor

gregorss:
Kannst Du das Überschreiben nicht einfach nur mit dem Teil machen, der die Kurve enthält?

Nein, da es passieren kann, dass ein Teil der Daten auf Höhe der x-Achse bzw auf der Beschriftung der x-Achse liegen

Gibt es die Möglichkeit Pixel zu setzen, die nicht überschrieben werden dürfen?

Ich benutze einen Mega2560 und ja sie gibt die Graphik-befehle direk5 aus

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.

Gruß

Gregor

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.

Gruß und Spaß
Andreas

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.

Hallo,
gib´ doch mal Butter bei die Fische…

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