Hilfe bei processing

Hallo liebe community!

Passt zwar nicht ins Arduino Forum (ich entschuldige mich dafür) aber es ist schwer deutsche

Unterstützung zu bekommen. Deshalb dachte ich ich frag einfach mal hier nach :slight_smile:

Ich möchte gerne eine Linie von unten mitte nach oben zeichnen die sich mit Grad Änderungen die ich vom arduino per serial bekomme oben verschiebt. Der Servo fährt 160 Grad und die size im proc. ist 800x600. Sieht wie eine Art Radar aus. Fast vergessen! Die grad werden vom arduino 160 - 0 ausgegeben. Der Servo fährt in 2er Schritten sprich 0,2,4,6,8… und wieder retour.

Kann mir da jemand helfen :smiley:

mfg

Ich sehe dein Kernproblem darin die Polarkoordinaten ins kartesische Format zu wandeln ? https://de.wikipedia.org/wiki/Polarkoordinaten

Habe keine Ahnung von Processing, aber dort wird es wohl auch eine Funktion Lineto (x,y) geben um auf der Canvas zu malen.

In Processing kann man das mit translate() und rotate() recht einfach lösen.

Arduino Test Sketch

void setup() {
  Serial.begin(115200);
}
int grad = 0;
int diff = 2;

void loop() {
  Serial.print(grad);
  Serial.print(",");
  Serial.println(random(400));
  delay(50);
  grad += diff;
  if (grad <= 0) {
    grad = 0;
    diff = 2;
  }
  if (grad >= 160) {
    grad = 160;
    diff = -2;
  }
}

Processing Sketch

import processing.serial.*;
Serial mySerial;
int lf = 10;

boolean mitAltenWerten = true;
boolean newVal = false;
int grad;
int lang;

void setup() {
  printArray(Serial.list());
  mySerial = new Serial( this, Serial.list()[0], 115200 );
  mySerial.bufferUntil(lf);
  size(800, 600);
  background(0xFF0F0F0F);
}
void draw() {
  if (newVal) {
    newVal=false;
    if (!mitAltenWerten) {
      background(0xFF0F0F0F);
    }
    translate(width/2, height-100);
    rotate(radians(-170+grad));
    if (mitAltenWerten) {
      stroke(0xFF0F0F0F);
      line(0, 0, 400, 0);
    }
    stroke(0xFF008000);
    line(0, 0, lang, 0);
  }
}
void serialEvent(Serial p) {
  String rStr = p.readString();
  if (rStr != null) {
    if (rStr.length() > 2) {
      String[] fld = splitTokens(rStr, ",");
      if (fld.length>=2) {
        grad = int(fld[0]);
        lang = int(fld[1].substring(0, fld[1].length()-2));
        newVal=true;
      }
    }
  }
}
void keyPressed() {
  if (key==' ') {
    mitAltenWerten = !mitAltenWerten;
  }
}

Vielen Dank für die schnelle Hilfe :smiley:

@Whandall

Hast du irgendwo eine Zauberkugel oder ein Zauberkästchen wo du das immer so schnell und perfekt

rausholst?