Hallo liebes Forum,
ich habe grade ein kleines Problem, wodrin ich nicht mehr weiter komme. Ich möchte über die Serielleschnittstelle einen Steppermotor ansteuern, indem ich serielle diesem Parameter zuordnen will. Zunächst will ich abfragen wieviel Schritte er machen soll. Bis dahin klappt alles. Als nächstes will ich die Geschwindigkeit ändern und dann in welcher Richtung er sich drehen will. Als letztes soll dann in einer Abfrage welche Richtung abgefragt wude und dann soll der Motor los gehen.
Ich hab mir gedacht drei mal Serial Funktion hinzuschreiben. Aber leider klappt das nicht. Er führt nur eins aus und ordnet der Varable nur einen Wert zu.
Ich hoffe ihr könnt mir dabei helfen.
Vielen dank im Voraus:)
Motor_CNC_bipolar_microstep.ino (10.1 KB)
Wie man Daten von der seriellen Schnittstelle einliest und interpretiert habe ich gerade zweimal gezeigt 
Wenn du jedesmal einzelnen Nachfragen willst, bräuchte man am besten einen Zustandsautomaten. Viel, viel einfacher geht es wenn du immer alles auf einmal schickst.
Man kann z.B. sowas machen:
",,"
Und dann "Los"
Oder Verschiedene Kommandos:
"S:<Wert">
"G:<Wert">
"R:<Wert">
"Los"
Aber ohne dass der Arduino jedes mal quittiert! Man kann die Liste mit Kommandos am Anfang einmal senden
jaa das wäre eigl so meine idee gewesen nur ich weiss absolut nicht wie ich dass alles in einem array speichern möchte und dieses dannach auf die drei einzelnen variablen übertragen möchte.
Das Zerlegen des array ist für mich kein problem. Aber ich möchte dass wenn ich sowas hier schreibe
25, 10, R -> das dies in einem array gespeichert wird wenn ich das empfange. Leider geht das grade nicht dass ich am ende sowas raus habe
array[0]= 25
array[1]= 10
array[2]= R
Kein Problem. Wichtig ist dass du den Serial Monitor so einstellst, dass ein LF/newline am Ende gesendet wird! Sonst geht es nicht.
Mit R/r oder L/l für die Richtung. Und Los/LOS/los/etc. um zu starten
Also z.B.:
25,10,R
Los
const int SERIAL_BUFFER_SIZE = 16;
char serialBuffer[SERIAL_BUFFER_SIZE];
int steps, speed, direction = 1;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (readSerial(Serial))
{
Serial.print(F("Read: ")); Serial.println(serialBuffer);
parseSerial();
}
}
void parseSerial()
{
if (strcasecmp(serialBuffer, "los") == 0)
{
Serial.println(F("Start!"));
}
else
{
steps = atoi(strtok(serialBuffer, ",;"));
speed = atoi(strtok(NULL, ",;"));
char* ptr = strtok(NULL, ",;");
if (*ptr == 'R' || *ptr == 'r')
direction = 1;
else if (*ptr == 'L' || *ptr == 'l')
direction = -1;
Serial.print(F("Steps: ")); Serial.println(steps);
Serial.print(F("Speed: ")); Serial.println(speed);
Serial.print(F("Direction: ")); Serial.println(direction);
}
Serial.println(F("---"));
}
bool readSerial(Stream& stream)
{
static byte index;
while (stream.available())
{
char c = stream.read();
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
{
serialBuffer[index++] = c;
}
else if (c == '\n' && index > 0)
{
serialBuffer[index] = '\0';
index = 0;
return true;
}
}
return false;
}
Danke
jaa das hilft mir sehr weiter 