Moin ,
momentan lese ich mich in Processing ein und finde es ehr interessant.
Gerade programmiere ich eine Kommunikation mit dem Arduino und Processing.
Die Kommunikation habe ich hinbekommen aber wenn ich mir den Potiwert von Processing anzeigen lassen möchte, wird der Wert überlagert.
Ich sitze schon fast drei Tage an diesem Fehler
Das ist hier zwar das Arduino-Forum...
Und ich kenne mich mit Processing nur ein wenig aus, aber das Problem ist zu lösen.
So ähnlich, wie bei manchen LCD-Displays werden auch bei Processing nur "die neuen" Bereiche des Ausgabe-Fensters beschrieben, die alten bleiben stehen. Deshalb erscheinen die Wert übereinander.
Es gibt (mindestens) 2 Möglichkeiten das zu umgehen.
den Bildschirm jedesmal komplett löschen:
Dein Fenster-Hintergrund ist weiß, mit dem Befehl
background(255);
kannst du das Fenster jedesmal löschen, wenn neue Daten empfangen wurden
...
void draw()
{
if (myPort.available() > 0) // Überprüft, ob Daten empfangen wurden
{
background(255); // gesamtes Fenster löschen
val = myPort.readStringUntil('\n');
}
...
nur jenen Berich löschen, wo die Zahlen stehen:
zum Beispiel indem du mit weißer Schrift auf weißem Hintergrund schreibst - jeweils auch wieder nur dann, wenn neue Daten empfangen wurden
...
void draw()
{
if (myPort.available() > 0) // Überprüft, ob Daten empfangen wurden
{
val = myPort.readStringUntil('\n');
fill(255); // schreib mit weiß (auf weißem Hintergrund)...
text("Wert: " + val, width-300, 200); // den alten Wert und löscht ihn dadurch
fill(0);
}
...
Mir fällt sonst noch auf, dass deine Abfrage des seriellen Ports recht fehleranfällig sein könnte. Du fragst nur ab ob es mehr als Null Zeichen im seriellen Buffer gibt, danach liest du gleich bis zum Zeilenende ein. Ob das in jedem Fall funktioniert? Es wäre ja auch möglich dass erst z.B. 1 Zeichen im Buffer liegt und das Zeilenende noch nicht gesendet wurde (serielle Übertragung braucht ja seine Zeit). Aber das ist vielleicht eher ein zukünftiges Problem. Edit: gestrichen - dazu reicht mein Wissen über Processing nicht tief genug
Hm, könnte sein.
Allerdings ist die Syntax von readStringUntil() bei Processing etwas anders als bei der Arduino IDE und so was wie Timeout wird da nicht erwähnt - aber ich bin kein Processing-Experte...
...und ziehe meine Bedenken deshalb zurück