6 Servos controlled by serial monitor

Hello,

i have a friend and he ask me to make a programm for 6 servos controlled by serial monitor. i don´t have the parts for a test here. and my friend lifes many km away.
Can someone tell my if my code function?

/*Geben Sie über den "Serial Monitor" neue Werte für die Servomotoren ein.

Beispiel: für Servo1 "a90" für 90°
          für Servo2 "b130" für 130°

*/

#include <Servo.h> //Lad Servo-Bibliothek

Servo myservo1; //erzeugt das erste Servo-Objekt, muss für jeden angeschlossenen Servomotor erstellt werden
Servo myservo2; //erzeugt das zweite Servo-Objekt
Servo myservo3; //usw.
Servo myservo4;
Servo myservo5;
Servo myservo6;

int pos1 = 0;  //Variable für die Position von Servo1, Startposition 0
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int pos5 = 0;
int pos6 = 0;

void setup() {
    myservo1.attach(5);  //Anschluss des Servomotors 1 an Pin 5
    myservo2.attach(6);
    myservo3.attach(7);
    myservo4.attach(8);
    myservo5.attach(9);
    myservo6.attach(10);
    
    Serial.begin(9600); //Serielle Komunikation starten 
}

void loop() {
    if (Serial.read() == 'a')  //Abfrage ob neuer Wert folgt für Servo 1
    {
      pos1 = Serial.parseInt(); //Einlesen des neuen Wertes und 
      myservo1.write(pos1);     //Übergabe an den Servomotor 1
    }
    
    if (Serial.read() == 'b')
    {
      pos2 = Serial.parseInt();
      myservo2.write(pos2);
    }
    
    if (Serial.read() == 'c')
    {
      pos3 = Serial.parseInt();
      myservo3.write(pos3);
    }
    
    if (Serial.read() == 'd')
    {
      pos4 = Serial.parseInt();
      myservo4.write(pos4);
    }
    
    if (Serial.read() == 'e')
    {
      pos5 = Serial.parseInt();
      myservo5.write(pos5);
    }
    
    if (Serial.read() == 'f')
    {
      pos6 = Serial.parseInt();
      myservo6.write(pos6);
    }
}

Welcome to the forum

Why not try it on https://wokwi.com ?

That way both of you can see it and test it without needing any hardware ?

I didn't know this page. but it looks nice. the problem with my code is, i need a serial monitor to type in text for control. And i didn't find a serial monitor on this page.

You can certainly use the Serial monitor in Wokwi for both input and output

If your sketch includes Serial input or output commands then the Serial monitor will open at the bottom of the window when you run the sketch

I find out that i have to use Serial.Print that the serial monitor will oben. the code is funktion for servo motor A but not for B,C,D,E and F. Maybe someone can tell me whats wrong?

The problem is that you are reading from Serial without knowing whether anything is available to read

Try this instead

/*Geben Sie über den "Serial Monitor" neue Werte für die Servomotoren ein.

Beispiel: für Servo1 "a90" für 90°
          für Servo2 "b130" für 130°

*/

#include <Servo.h>  //Lad Servo-Bibliothek

Servo myservo1;  //erzeugt das erste Servo-Objekt, muss für jeden angeschlossenen Servomotor erstellt werden
Servo myservo2;  //erzeugt das zweite Servo-Objekt
Servo myservo3;  //usw.
Servo myservo4;
Servo myservo5;
Servo myservo6;

int pos1 = 0;  //Variable für die Position von Servo1, Startposition 0
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int pos5 = 0;
int pos6 = 0;

void setup()
{
    myservo1.attach(5);  //Anschluss des Servomotors 1 an Pin 5
    myservo2.attach(6);
    myservo3.attach(7);
    myservo4.attach(8);
    myservo5.attach(9);
    myservo6.attach(10);

    Serial.begin(9600);  //Serielle Komunikation starten
    Serial.println("starting");
}

void loop()
{
    if (Serial.available())
    {
        char inChar = Serial.read();
        if (inChar == 'a')  //Abfrage ob neuer Wert folgt für Servo 1
        {
            Serial.println("got a");
            pos1 = Serial.parseInt();  //Einlesen des neuen Wertes und
            myservo1.write(pos1);      //Übergabe an den Servomotor 1
            Serial.println(pos1);
        }

        if (inChar == 'b')
        {
            Serial.println("got b");
            pos2 = Serial.parseInt();
            myservo2.write(pos2);
        }

        if (inChar == 'c')
        {
            pos3 = Serial.parseInt();
            myservo3.write(pos3);
        }

        if (inChar == 'd')
        {
            pos4 = Serial.parseInt();
            myservo4.write(pos4);
        }

        if (inChar == 'e')
        {
            pos5 = Serial.parseInt();
            myservo5.write(pos5);
        }

        if (inChar == 'f')
        {
            pos6 = Serial.parseInt();
            myservo6.write(pos6);
        }
    }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.