Forum: Mikrocontroller und Digitale Elektronik Arduino serialEvent() overhead


von Rudolf.Z (Gast)


Lesenswert?

Hi,

Ich habe 2 Motoren, die ich mit einem PID auf einem Arduino regle. Eine 
Software am Computer gibt eine Trajektorie vor, welche von den Motoren 
abgefahren wird. Das ganze funktioniert so weit gut, bis dass ein Aufruf 
von serialEvent() etwa 2s delay verursacht. Wenn also ein Motor eine 
neue Position bekommt, bleibt auch der andere Motor hängen, das dauert 
jeweils etwa 2s.

Meine serialEvent():

void serialEvent() { //2s delay?
  while (Serial.available()) {
      buff= Serial.parseInt(); //defined global

      if(temp<=encoder_m && buff>=0) {
            n_Trajectory1=1; //new trajectory
            Serial.println("start1\0");
      } else { //offset set for motor2
            n_Trajectory2=1; //new trajectory
            Serial.println("start2\0");
      }
  }
}

Weiss Jemand, warum serialEvent() solch einen overhead hat?

Gruss Rudolf

von Rudolf.Z (Gast)


Lesenswert?

Ich habe raus gefunden, was wirklich so langsam ist: Serial.parseInt().
Weiss Jemand ob es da alternativen gibt?

von Rudolf.Z (Gast)


Lesenswert?

Ok, habe eine Lösung, nicht ganz sauber aber passt schon:

Serial.setTimeout(50); //normalerweise ist Timeout auf 1s, daher der 
delay

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.