Proyecto brazo robótico con servomotores controlado por conexión bluetooth

Hola, buen día.

¿Podrían ayudarme con mi código por favor?.

Soy nuevo en esto de la programación y me surgió un problema que no se como resolver, aún no tengo mi código completo, así que esto es todo lo que llevo hasta el momento.

#include <Servo.h>

char dato ('A','a','x');
Servo base;
int pbase, contador=0;

void setup()
{
  base.attach(13);
  Serial.begin(9600); 
}

void loop()
{
  if(contador==0)
  {
    pbase=base.read();
    if (pbase=base.read()>(0))
    {
      base.write(0);
    }
    contador ++;
  }
  
  
  switch(dato)
  {
  case 'A': //Base Izquierda
  {
    do while(Serial.read()=='A')
    {
    while(Serial.read()=='A')
    {
      for (pbase = 0; Serial.read()=='A'; pbase += 1)
      {
        base.write(pbase);
        delay(15);
        break;
      }
    }
    }
  }
  }
}

El código de error es el siguiente:

expected 'while' before '}' token

La placa que utilizo es un Arduino UNO

Espero me puedan ayudar.

Hola, sin la intención de ofender, el código es un desastre, porque mejor no aclaras que es lo que intentas lograr, y quiza es mas fácil empezar de cero, dime ¿de que trata tu codigo? para que usas el servo y como lo piensas mover?

No te preocupes soy nuevo y entiendo que el código esta hecho un asco, lo he modificado ligeramente, así que espero que sea mas fácil para alguien que me pueda ayudar.

La intención es que mediante una aplicación para celular la cual ya está hecha, envíe los carácteres a tráves de un modulo HC-05 a la placa con el código del arduino, para que mueva los servomotores.

Aquí está el código ya modificado:

#include <Servo.h>

char dato;
Servo base, brazo1, brazo2, brazo3, inclinacionpinza, pinza;
int pbase, pbrazo1, pbrazo2, pbrazo3, pinclinacionpinza, ppinza, contador=0;

void setup()
{
  base.attach(13);
  brazo1.attach(12);
  brazo2.attach(11);
  brazo3.attach(10);
  inclinacionpinza.attach(9);
  pinza.attach(8);
  Serial.begin(9600);
}

void loop()
{
  if(contador==0)
  {
    // Leer posicion inicial
    pbase=base.read();
    pbrazo1=brazo1.read();
    pbrazo2=brazo2.read();
    pbrazo3=brazo3.read();
    pinclinacionpinza=inclinacionpinza.read();
    ppinza=pinza.read();
    
    //Escribir posicion inicial
    base.write(pbase);
    brazo1.write(pbrazo1);
    brazo2.write(pbrazo2);
    brazo3.write(pbrazo3);
    inclinacionpinza.write(pinclinacionpinza);
    pinza.write(ppinza);
    contador++;
  }
  dato='x';
  dato=Serial.read();
  switch(dato)
  {
    case 'A': //BASE IZQUIERDA
    {
       while(Serial.read()!='x')
       {
          if(pbase>=175)
              pbase=175;
          if(pbase<=180 && pbase>=0)
          {
            
            pbase++;
            base.write(pbase);
            delay(15);
          }
       }
      break;  
    }
    
    case 'a': //BASE DERECHA
    {
       while(Serial.read()!='x')
       {
         if(pbase<=5)
              pbase=5; 
         if(pbase<=180 && pbase>=0)
          {
            pbase--;
            base.write(pbase);
            delay(15);
          }
      }
      break;  
    }
    case 'C': //BRAZO2 ARRIBA
    {
         if(pbrazo2>=175)
              pbrazo2=175;
        while(Serial.read()!='x')
        {
          if(pbrazo2<=180 && pbrazo2>=0)
          {
            pbrazo2++;
            brazo2.write(pbrazo2);
            delay(15);
          }
        }
      break;   
    }
    case 'c': //BRAZO2 ABAJO
    {
       if(pbrazo2<=5)
              pbrazo2=5;
       while(Serial.read()!='x')
       {
          if(pbrazo2<=180 && pbrazo2>=0)
          {
            pbrazo2--;
            brazo2.write(pbrazo2);
            delay(15);
          }
       }
      break;   
    }
    case 'D': //BRAZO3 ARRIBA
    {
      if(pbrazo3>=170)
          pbrazo3=170; 
      while(Serial.read()!='x')
       {
          if(pbrazo3<=180 && pbrazo3>=0)
          {
            pbrazo3++;
            brazo3.write(pbrazo3);
            delay(15);
          }
       }
      break;      
    }
    case 'd': //BRAZO3 ABAJO
    {
        if(pbrazo3<=10)
              pbrazo3=10;
       while(Serial.read()!='x')
       {
          if(pbrazo3<=180 && pbrazo3>=0)
          {
            pbrazo3--;
            brazo3.write(pbrazo3);
            delay(15);
          }
       }
      break; 
    }
    case 'G': //ABRIR PINZA
    {
      if(ppinza>=165)
          ppinza=165; 
      while(Serial.read()!='x')
       {
           if(ppinza<=180 && ppinza>=0)
          {
            ppinza++;
            pinza.write(ppinza);
            delay(15);
          }
       }
      break; 
    }
    case 'g': //CERRAR PINZA
    {
        if(ppinza<=15)
              ppinza=15;      
       while(Serial.read()!='x')
       {
          if(ppinza<=180 && ppinza>=0)
          {
            ppinza--;
            pinza.write(ppinza);
            delay(15);
          }
       }
      break; 
    }
    case 'B': //BRAZO1 ARRIBA
    {
      if(pbrazo1>=175)
          pbrazo1=175;
       while(Serial.read()!='x')
       {
           if(pbrazo1<=180 && pbrazo1>=0)
          {
            pbrazo1++;
            brazo1.write(pbrazo1);
            delay(15);
          }
       }
      break; 
    }
    case 'b': //BRAZO1 ABAJO
    {
        if(pbrazo1<=5)
              pbrazo1=5; 
       while(Serial.read()!='x')
       {
          if(pbrazo1<=180 && pbrazo1>=0)
          {
            pbrazo1--;
            brazo1.write(pbrazo1);
            delay(15);
          }
       }
      break; 
    }
   case 'E': //INCLINACIONPINZA IZQUIERDA
    {
       while(Serial.read()!='x')
       {
          if(pinclinacionpinza>=175)
              pinclinacionpinza=175;
          if(pinclinacionpinza<=180 && pinclinacionpinza>=0)
          {
            
            pinclinacionpinza++;
            inclinacionpinza.write(pinclinacionpinza);
            delay(15);
          }
       }
       break;
     }
    
    case 'e': //INCLINACIONPINZA DERECHA
    {
       while(Serial.read()!='x')
       {
         if(pinclinacionpinza<=5)
              pinclinacionpinza=5; 
         if(pinclinacionpinza<=180 && pinclinacionpinza>=0)
          {
            pinclinacionpinza--;
            inclinacionpinza.write(pinclinacionpinza);
            delay(15);
          }
      }
      break;
      }
  }
}

Aún así, el problema que tengo es que al dejar de presionar el botón, el servomotor continua en movimiento y no se detiene.

Espero que me puedan ayudar de todas maneras.

No se donde leiste que este es el modo de leer el puerto serie pero no es correcto
NO puedes usar Serial.read(); cuando se te da la gana. Sonará hasta grosero pero es asi.

Debes ser ordenado para leer el puerto serie.
Y todo comienza asegurándote que hay datos en el mismo.

if (Serial.available() >0 ) { te indica que hay bytes para leer
y luego has una sola lectura con Serial.read() y debes procesar lo que recibas.

Como te dice @surbyte, estas haciendo mal la forma de leer el puerto serie.
Le hice unos cambios a tu codigo, pero creo que aun no funcionara bien,

#include <Servo.h>

char dato;
Servo base, brazo1, brazo2, brazo3, inclinacionpinza, pinza;
int pbase, pbrazo1, pbrazo2, pbrazo3, pinclinacionpinza, ppinza, contador=0;

void setup()
{
  base.attach(13);
  brazo1.attach(12);
  brazo2.attach(11);
  brazo3.attach(10);
  inclinacionpinza.attach(9);
  pinza.attach(8);
  Serial.begin(9600);
}

void loop()
{
  if(contador==0)          ///PARA QUE USAS TODO ESTO QUE ESTÁ DENTRO DEL IF?
  {
    // Leer posicion inicial
    pbase=base.read();
    pbrazo1=brazo1.read();
    pbrazo2=brazo2.read();
    pbrazo3=brazo3.read();
    pinclinacionpinza=inclinacionpinza.read();
    ppinza=pinza.read();
    
    //Escribir posicion inicial
    base.write(pbase);
    brazo1.write(pbrazo1);
    brazo2.write(pbrazo2);
    brazo3.write(pbrazo3);
    inclinacionpinza.write(pinclinacionpinza);
    pinza.write(ppinza);
    contador++;
  }
 // dato='x';
 ///dato=Serial.read();      //CAMBIA ESTO   
    
    if(Serial.available()>0){    //POR ESTO
       dato=Serial.read();
        
    }

  

  switch(dato){

    case 'A': //BASE IZQUIERDA       
    
      // while(Serial.read()!='x')    //ESTO NO ES NECESARIO
       //{
          if(pbase>=175)     
              pbase=175;
          if(pbase<=180 && pbase>=0)
          {
            
            pbase++;
            base.write(pbase);
            delay(15);
          }
       //}
      break;  
    
    
    case 'a': //BASE DERECHA
    //{
      // while(Serial.read()!='x')
       //{
         if(pbase<=5)
              pbase=5; 
         if(pbase<=180 && pbase>=0)
          {
            pbase--;
            base.write(pbase);
            delay(15);
          }
     // }
      break;  
    //}
    case 'C': //BRAZO2 ARRIBA
   // {
         if(pbrazo2>=175)
              pbrazo2=175;
     ///   while(Serial.read()!='x')
       // {
          if(pbrazo2<=180 && pbrazo2>=0)
          {
            pbrazo2++;
            brazo2.write(pbrazo2);
            delay(15);
          }
       // }
      break;   
   // }
    case 'c': //BRAZO2 ABAJO
    //{
       if(pbrazo2<=5)
              pbrazo2=5;
      // while(Serial.read()!='x')
       //{
          if(pbrazo2<=180 && pbrazo2>=0)
          {
            pbrazo2--;
            brazo2.write(pbrazo2);
            delay(15);
          }
       //}
      break;   
    //}
    case 'D': //BRAZO3 ARRIBA
   // {
      if(pbrazo3>=170)
          pbrazo3=170; 
     // while(Serial.read()!='x')
      // {
          if(pbrazo3<=180 && pbrazo3>=0)
          {
            pbrazo3++;
            brazo3.write(pbrazo3);
            delay(15);
          }
       //}
      break;      
    //}
    case 'd': //BRAZO3 ABAJO
    //{
        if(pbrazo3<=10)
              pbrazo3=10;
       //while(Serial.read()!='x')
      // {
          if(pbrazo3<=180 && pbrazo3>=0)
          {
            pbrazo3--;
            brazo3.write(pbrazo3);
            delay(15);
          }
       //}
      break; 
    //}
    case 'G': //ABRIR PINZA
    //{
      if(ppinza>=165)
          ppinza=165; 
      //while(Serial.read()!='x')
       //{
           if(ppinza<=180 && ppinza>=0)
          {
            ppinza++;
            pinza.write(ppinza);
            delay(15);
          }
       //}
      break; 
    //}
    case 'g': //CERRAR PINZA
    //{
        if(ppinza<=15)
              ppinza=15;      
      // while(Serial.read()!='x')
       //{
          if(ppinza<=180 && ppinza>=0)
          {
            ppinza--;
            pinza.write(ppinza);
            delay(15);
          }
       //}
      break; 
  //  }
    case 'B': //BRAZO1 ARRIBA
    //{
      if(pbrazo1>=175)
          pbrazo1=175;
      // while(Serial.read()!='x')
       //{
           if(pbrazo1<=180 && pbrazo1>=0)
          {
            pbrazo1++;
            brazo1.write(pbrazo1);
            delay(15);
          }
       //}
      break; 
    //}
    case 'b': //BRAZO1 ABAJO
    //{
        if(pbrazo1<=5)
              pbrazo1=5; 
      // while(Serial.read()!='x')
      // {
          if(pbrazo1<=180 && pbrazo1>=0)
          {
            pbrazo1--;
            brazo1.write(pbrazo1);
            delay(15);
          }
       //}
      break; 
   /// }
   case 'E': //INCLINACIONPINZA IZQUIERDA
    //{
      // while(Serial.read()!='x')
       
          if(pinclinacionpinza>=175)
              pinclinacionpinza=175;
          if(pinclinacionpinza<=180 && pinclinacionpinza>=0)
          {
            
            pinclinacionpinza++;
            inclinacionpinza.write(pinclinacionpinza);
            delay(15);
          }
       ///}
       break;
     ///}
    
    case 'e': //INCLINACIONPINZA DERECHA
   /// {
      /// while(Serial.read()!='x')
       ///{
         if(pinclinacionpinza<=5)
              pinclinacionpinza=5; 
         if(pinclinacionpinza<=180 && pinclinacionpinza>=0)
          {
            pinclinacionpinza--;
            inclinacionpinza.write(pinclinacionpinza);
            delay(15);
          }
      //}
      break;
      //}
   }
}

tienes varias lineas que no entiendo que es lo que hacen, si te fijas quite todos los while() que no les veo razón de estar ahi, ahora dime para que haces esto:

if(contador==0)          ///PARA QUE USAS TODO ESTO QUE ESTÁ DENTRO DEL IF?
  {
    // Leer posicion inicial
    pbase=base.read();
    pbrazo1=brazo1.read();
    pbrazo2=brazo2.read();
    pbrazo3=brazo3.read();
    pinclinacionpinza=inclinacionpinza.read();
    ppinza=pinza.read();
    
    //Escribir posicion inicial
    base.write(pbase);
    brazo1.write(pbrazo1);
    brazo2.write(pbrazo2);
    brazo3.write(pbrazo3);
    inclinacionpinza.write(pinclinacionpinza);
    pinza.write(ppinza);
    contador++;
  }

y luego, creo que esto no funciona adecuadamente

 if(pbase>=175)     
              pbase=175;
          if(pbase<=180 && pbase>=0)[/code

porque no simplemente mueves el servo hasta donde lo necesitas y quitas esa condicional, no me gusta como  lo haces.
Dame un panorama mas amplio de lo que quieres hacer, por ejemplo, cuando mandas una 'A' por el puerto serie, ¿que quieres que suceda?