Anzahl der Schritte per Serielle Schnittstelle an Arduino übergeben

Hey Leute,

ich habe folgendes vor, nur habe ich keine Ahnung, wie ich das umsetzen kann. Ich hoffe man kann mir da etwas helfen.

Also ich möchte folgendes tun, ich möchte dem Arduinoboard über die Seriellen Schnittstelle mitteilen, wieviele Schritte der Schrittmotor tuen soll. Also z.B. ich gebe 100 an, dann soll der Schrittmotor 100 Schritte machen. Die Richtung gebe ich an sich mittels eines Schalters vor.

Es handelt sich erstmal um ein Art Testgerät für Schrittmotoransteuerung und co.

Also mir geht es Primär um das Problem, die Übergabe eines Integerwertes an den Arduino, welche er dann in eine Variable speichert. Das Ansteuern des Motors / Abfragen des Schalters klappt an sich sonst problemlos.

In einem weiteren Schritt geht es dadrum, wie kann ich dem Arduino 3 Integerwerte übergeben in einer Eingabe. Also in etwa folgendem Format 100,50,20 und das der Arduino es dann in 3 Variablen (z.B. x, y, z) speichert?

Hoffe mir kann man etwas dabei helfen. Danke schon mal im vorraus.

Michael

Wenn du minimal Englisch kannst, ist Gammon Forum : Electronics : Microprocessors : How to process incoming serial data without blocking How to send and receive numbers das Beste.

Nachtrag:
Kannst das auch abändern auf Trennzeichen ',' und '\n'
und im SerialMonitor am Ende ein NewLine mitsenden lassen.
In deinem Fall noch mitzählen, wieviele Kommas du schon hattest und das Ergebnis der ganzen Eingabe dann in der richtigen Variablen ablegen ...

Naja mein Englisch is eher bescheiden. Werde mir das ganze mal angucken und gucken ob ich zurande komme. Falls aber jemand noch ein weiteren Tipp hat, bitte immer her damit :slight_smile:

In der Schule war der Englischunterricht immer bisschen als "überflüssig" zu bezeichnen, wie der abgehalten wurde. Naja schade drum, aber is nunmal so.

Michael

Wenn man sich auf Werte von 0-255 beschränkt, kann man einfach 3 mal read() machen.

Ansonsten:

const int SERIAL_BUFFER_SIZE = 16;
int x, y, z;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  readSerial();
}

void readSerial()
{
  static char serialBuffer[SERIAL_BUFFER_SIZE];
  static byte index;

  while (Serial.available())
  {
    char c = Serial.read();

    if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
    {
      serialBuffer[index++] = c;
    }
    else if (c == '\n')
    {
      serialBuffer[index] = '\0';
      index = 0;

      x = atoi(strtok(serialBuffer, ","));
      y = atoi(strtok(NULL, ","));
      z = atoi(strtok(NULL, ","));

      Serial.println(x);
      Serial.println(y);
      Serial.println(z);
      Serial.println();
    }
  }
}

Für einen einzelnen Wert reicht einmal atoi(serialBuffer), ohne strtok()

Den Serial Monitor so einstellen, dass ein Linefeed am Ende gesendet wird.

Rein für Zahlen ist diese Variante vielleicht etwas Overkill, aber sie lässt sich einfach erweitern und z.B. so anpassen, dass man Werten einen Buchstaben oder String voranstellt um sie zu identifizieren. Dann kann man beliebige Werte in beliebiger Reihenfolge senden.

Danke für die Antwort. Aber 0-255 wird ein wenig werden. Ich denke ich werde MIN den Int Bereich fast ausnutzen dürfen. Also deutlich mehr.

Michael