serielle Kommunikation hilfe :(

Hallo zusammen,
ich brauch dringend hilfe :frowning:

Ich habe 4 Servos und diese möchte ich (bzw. eine bestimmte reihe an schritten) mit verschiedenen Befehlen ansteuern können.
Leider hab ich das problem das meine programmierung linear arbeitet, soll heißen wenn ich zwei verschiedene schritte habe (sagen wir F und D) und den zweiten ansteuern will , wird aber der erste vorrausgesetzt… Kann man die nicht unabhängig voneinander ansteuern?
ich bin am verzweifeln
Danke schon mal

Programmierung:
#include <Servo.h>

Servo motor1;
Servo motor2;
Servo motor3;
Servo motor4;

byte eingabe;
void setup()
{
Serial.begin(57600);
motor2.attach(10);
motor1.attach(9);
motor3.attach(11);
motor4.attach(12);
}

void loop() {
if (Serial.available())
{
char data = Serial.read();
if (data == ‘F’)
{
motor2.write(10);
delay(1000);
motor2.write(20);
delay(1000);
motor2.write(30);
delay(1000);
motor2.write(40);
delay(1000);
}

{
char data = Serial.read();
if (data == ‘D’)
{
motor2.write(0);
delay(1000);
motor2.write(90);
delay(1000);
motor2.write(0);
delay(1000);
motor2.write(150);
delay(1000);
}
{
char data = Serial.read();
if (data == ‘G’)
{
motor2.write(0);
delay(1000);
motor2.write(44);
delay(1000);
motor2.write(0);
delay(1000);
motor2.write(30);
delay(1000);
}
}
}
}
}

puresami:
ich brauch dringend hilfe :frowning:

OK, hier meine Hilfe für Dich zum Verstehen der Forums-Regeln:
http://forum.arduino.cc/index.php/topic,148850.0.html

Unter “6. Make a meaningful subject line” steht folgendes:

In particular avoid subject lines in ALL CAPITALS. That annoys a lot of people, they feel as if you are shouting at them.

Das bedeutet:
Vermeide insbesondere Betreffs VOLLSTÄNDIG IN GROSSBUCHSTABEN. Das belästigt viele Leute, die sich fühlen, als wenn Du sie anschreist.

Und unter “13. Forum etiquette” findest Du:

Don’t cross-post!
We know you are anxious to get an answer to your problem, but re-posting the same question
to multiple parts of the forum causes duplicate effort, and divides the focus on your problem.

Das bedeutet, Du sollst dasselbe Posting nicht mehrfach posten.

Entschuldigung, dass habe ich leider nicht gewusst.
Nun weiß ich für die Zukunft bescheid :wink:
Danke

... und Code gehört in Code -Tags. ( Markieren, dann den # Befehl klicken )
Wenn du ihn vorher noch richtig einrückst (bzw. einrücken lässt mit Strg-T in der Arduino IDE ),
macht sich vielleicht auch jemand die Mühe, deine vielen geschweiften Klammern anzusehen :wink:

Dann ist "unabhängig steuern" und "delay" ein absoluter Gegensatz...

Auch danke hierfür :slight_smile:

puresami:
Nun weiß ich für die Zukunft bescheid :wink:

Mal schauen. :wink:

Zu Deinem Code: Der wird immer genau so abgearbeitet, wie Du ihn programmierst.

Wenn Du es so programmierst, dass am Anfang einmal auf das Vorhandensein eines Zeichens (Serial.available()) prüfst, und in jedem if-Zweig dieses Zeichen per Serial.read() ausliest, dann kann natürlich nur im ersten if-Zweig ein gesendetes Zeichen vorhanden sein.

Korrekt wäre in der loop:

  • einmal prüfen, ob ein Zeichen vorhanden ist
  • wenn ja, das eine Zeichen auslesen
  • und dieses eine gelesene Zeichen in allen if-Zweigen prüfen, ob eine Aktion notwendig ist
void loop() {
  if (Serial.available())
  {
    char data = Serial.read();
    if (data == 'F')
    {
      Serial.println("Aktion F");
    }
    else if (data == 'D')
    {
      Serial.println("Aktion D");
    }
    else if (data == 'G')
    {
      Serial.println("Aktion G");
    }
  }
}

Vielen herzlichen Dank!
Ihr seid Klasse!