Cómo realizar una comunicación serial con varias funciones?

Cordial saludo:

Estoy realizando un pequeño proyecto donde comunico un programa de C++ con arduino nano mediante bluetooth, consiste en enviar un entero desde el Csharp (int '1') y que el arduino ejecute una serie de funciones.

El inconveniente es que, al momento de enviar este dato, el arduino se queda anclado en una sola función y no sigue ejecutando el resto, he intentado distintos tipos de esquemas como: if, switch-case, serial event..., pero ninguno con buenos resultados.

Si alguno de ustedes conoce el error que estoy cometiendo, o algún tipo de solución que me pueda ayudar, le agradecería mucho.

Este es uno de los códigos que he realizado(es un seguidor de linea con estaciones):

int sensor1 = 12;       // Pin del sensor utilizado como entrada digital  en el lado derecho(#1).
int sensor2 = 11;       // Pin del sensor utilizado como entrada digital  en el lado izquierdo(#2).
int sensor3 = 8;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar derecho(#3).
int sensor4 = 7;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar izquierdo(#4).
int sensor5 = 2;        // Pin del sensor utilizado como entrada digital  para la estación.
int valorsensor1 = 0;   // Valor inicial de la lectura digital del sensor #1.
int valorsensor2 = 0;   // Valor inicial de la lectura digital del sensor #2.
int valorsensor3 = 0;   // Valor inicial de la lectura digital del sensor #3.
int valorsensor4 = 0;   // Valor inicial de la lectura digital del sensor #4.
int valorsensor5 = 0;   // Valor inicial de la lectura digital del sensor #5.
int salida1 = 3;        // Salida conectada al pin 3. (avance llanta derecha)
int salida2 = 9;        // Salida conectada al pin 5. (reversa llanta derecha)
int salida3 = 5;        // Salida conectada al pin 9. (avance llanta izquierda)
int salida4 = 10;       // Salida conectada al pin 10. (reversa llanta izquierda)
int estacion =0;        // Variable utilzada para deteccion de las estaciones

void setup() 
{
  Serial.begin(38400); // Comenzamos comunicacion serial.
  pinMode(sensor1, INPUT);    // Inicializa el pin 12 como entrada digital.
  pinMode(sensor2, INPUT);    // Inicializa el pin 11 como entrada digital.
  pinMode(sensor3, INPUT);    // Inicializa el pin 8 como entrada digital.
  pinMode(sensor4, INPUT);    // Inicializa el pin 7 como entrada digital.
  pinMode(sensor5, INPUT);    // Inicializa el pin 2 como entrada digital.
  pinMode (salida1, OUTPUT);  // Inicializa el pin 3 como salida digital.
  pinMode (salida2, OUTPUT);  // Inicializa el pin 9 como salida digital.
  pinMode (salida3, OUTPUT);  // Inicializa el pin 5 como salida digital.
  pinMode (salida4, OUTPUT);  // Inicializa el pin 10 como salida digital. 
}


void estacion1()
{
if(valorsensor1==0 && valorsensor2==0)  
  {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0); 
  }

if(valorsensor1==1 && valorsensor2==0)  
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
   }
  
if(valorsensor1==0 && valorsensor2==1)  
   {
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   }

if (valorsensor1==1 && valorsensor3==1) 
   {
   digitalWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(500);
   }

if (valorsensor2==1 && valorsensor4==1) 
   { 
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   delay(2000);
   }

if (valorsensor5 ==0 )                   
   {
    switch (estacion)                    
    {
     case 0:                            
            delay (1000);
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 1");
            delay (2000);
            estacion=1;
            Serial.println(estacion);
            break;
     case 1:                            
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 2");
            delay(1000);
        while(digitalRead(sensor5)==0)  
            {}
            estacion=0;
            return inicio;
       }
     }
   }
void estacion2()
{
if(valorsensor1==0 && valorsensor2==0)   
  {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0); 
  }

if(valorsensor1==1 && valorsensor2==0)  
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
   }
  
if(valorsensor1==0 && valorsensor2==1)  
   {
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   }

if (valorsensor1==1 && valorsensor3==1)
   {
   digitalWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(2000);
   }

if (valorsensor2==1 && valorsensor4==1)
   { 
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   delay(500);
   }

if (valorsensor5 ==0 )                   
   {
    switch (estacion)                    
    {
     case 0:                             
            delay (1000);
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 1");
            delay (2000);
            estacion=1;
            Serial.println(estacion);
            break;
     case 1:                            
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 2");
            delay(1000);
        while(digitalRead(sensor5)==0)  
            {}
            estacion=0;
            return inicio;
       }
     }
   }
 void loop()
 { inicio;
  valorsensor1 = digitalRead(sensor1);   
  valorsensor2 = digitalRead(sensor2);   
  valorsensor3 = digitalRead(sensor3);   
  valorsensor4 = digitalRead(sensor4); 
  valorsensor5 = digitalRead(sensor5);   

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

  switch (c)
  {
    case'1':
     estacion1();
     Serial.println("voy a estacion1");
     break;

     case '2':
     estacion2();
     Serial.println("voy a estacion2");
     break;
  }
  }
}

El arduino recibe el dato por serial, ingresa a la función pero se queda anclado en la primera condición.

iré haciendo obervaciones conforme lo voy analizando.

Al comienzo del loop pones inicio como una llamada de un goto?

inicio;

Creo que ahi tienes un pequeño problema.

En tus rutinas terminas con return inicio pero eso no funciona como creo te imaginas. Ahi inicio debería ser una variable y devolver un valor y no saltar a la posición inicial del loop(). No se si esa es tu intención.

Esperaré a que respondas.

En mi compilador tu código ni siquiera compila. Esto ocurre porque no uso el IDE y mi compilador es mas estricto que el IDE.

Ves la serie de errores relacionadas con inicio?

D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino: In function 'void estacion1()':
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino:195:20: error: 'inicio' was not declared in this scope
Serial.println("voy a estacion2");
^
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino:195:20: warning: return-statement with a value, in function returning 'void' [-fpermissive]
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino: In function 'void estacion2()':
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino:341:20: error: 'inicio' was not declared in this scope
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino:341:20: warning: return-statement with a value, in function returning 'void' [-fpermissive]
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino: In function 'void loop()':
D:/Dropbox/Arduino/Foro/Borrar/Borrar_2/Struct/Borrar_2.ino:355:3: error: 'inicio' was not declared in this scope
*** [.pioenvs\megaatmega2560\src\Borrar_2.ino.cpp.o] Error 1

Hola,
Si, es correcto, trate de utilizar la variable "inicio" para salir del anclaje en el que quedaba el arduino por medio del "goto", pero si resultados, anexo otro programa donde intento similar:

int sensor1 = 12;       // Pin del sensor utilizado como entrada digital  en el lado derecho(#1).
int sensor2 = 11;       // Pin del sensor utilizado como entrada digital  en el lado izquierdo(#2).
int sensor3 = 8;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar derecho(#3).
int sensor4 = 7;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar izquierdo(#4).
int sensor5 = 2;        // Pin del sensor utilizado como entrada digital  para la estación.
int valorsensor1 = 0;   // Valor inicial de la lectura digital del sensor #1.
int valorsensor2 = 0;   // Valor inicial de la lectura digital del sensor #2.
int valorsensor3 = 0;   // Valor inicial de la lectura digital del sensor #3.
int valorsensor4 = 0;   // Valor inicial de la lectura digital del sensor #4.
int valorsensor5 = 0;   // Valor inicial de la lectura digital del sensor #5.
int salida1 = 3;        // Salida conectada al pin 3. (avance llanta derecha)
int salida2 = 9;        // Salida conectada al pin 5. (reversa llanta derecha)
int salida3 = 5;        // Salida conectada al pin 9. (avance llanta izquierda)
int salida4 = 10;       // Salida conectada al pin 10. (reversa llanta izquierda)
int estacion =0;        // Variable utilzada para deteccion de las estaciones

void setup() 
{
  Serial.begin(38400); // Comenzamos comunicacion serial.
  pinMode(sensor1, INPUT);    // Inicializa el pin 12 como entrada digital.
  pinMode(sensor2, INPUT);    // Inicializa el pin 11 como entrada digital.
  pinMode(sensor3, INPUT);    // Inicializa el pin 8 como entrada digital.
  pinMode(sensor4, INPUT);    // Inicializa el pin 7 como entrada digital.
  pinMode(sensor5, INPUT);    // Inicializa el pin 2 como entrada digital.
  pinMode (salida1, OUTPUT);  // Inicializa el pin 3 como salida digital.
  pinMode (salida2, OUTPUT);  // Inicializa el pin 9 como salida digital.
  pinMode (salida3, OUTPUT);  // Inicializa el pin 5 como salida digital.
  pinMode (salida4, OUTPUT);  // Inicializa el pin 10 como salida digital. 
}


void estacion1()
{
if(valorsensor1==0 && valorsensor2==0)   // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 0, entonces avanza.
  {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0); 
   Serial.println("aaaaaaa");
  }

if(valorsensor1==1 && valorsensor2==0)  // Si la lectura del sensor #1 (derecho) es 1, y del sensor #2 (izquierdo) es 0, gira suavemente a la derecha. 
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
    Serial.println("eeeeee");
   }
  
if(valorsensor1==0 && valorsensor2==1)  // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 1, gira suavemente a la izquierda.
   {
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   }

if (valorsensor1==1 && valorsensor3==1) //Si la lectura del sensor #1 (derecho) es 1, y del sensor #3 (izquierdo auxiliar) es 1, gira 90º a la izquierda.
   {
   digitalWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(500);
   }

if (valorsensor2==1 && valorsensor4==1) //Si la lectura del sensor #2 (izquierdo) es 1, y del sensor #3 (derecho auxiliar) es 1, gira 90º a la derecha.
   { 
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   delay(2000);
   }

if (valorsensor5 ==0 )                   //Si la lectura del sensor #5 (estaicciones) es 0, cumplirá las siguientes condiciones: 
   {
    switch (estacion)                    // Se ejecuta la variable estacion.
    {
     case 0:                             //Se ejecuta el caso, avanza dos segundos en la estacion para luego continuar.
            delay (1000);
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 1");
            delay (2000);
            estacion=1;
            Serial.println(estacion);
            break;
     case 1:                            //Se ejecuta el caso, donde ha llegado a su punto de partida.
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 2");
            delay(1000);
        while(digitalRead(sensor5)==0)  //Espera a ser desbloqueado el sensor #5 para continuar
            {}
            estacion=0;
            break;
       }
     }
   }
void estacion2()
{
if(valorsensor1==0 && valorsensor2==0)   // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 0, entonces avanza.
  {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0); 
  }

if(valorsensor1==1 && valorsensor2==0)  // Si la lectura del sensor #1 (derecho) es 1, y del sensor #2 (izquierdo) es 0, gira suavemente a la derecha. 
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
   }
  
if(valorsensor1==0 && valorsensor2==1)  // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 1, gira suavemente a la izquierda.
   {
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   }

if (valorsensor1==1 && valorsensor3==1) //Si la lectura del sensor #1 (derecho) es 1, y del sensor #3 (izquierdo auxiliar) es 1, gira 90º a la izquierda.
   {
   digitalWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(2000);
   }

if (valorsensor2==1 && valorsensor4==1) //Si la lectura del sensor #2 (izquierdo) es 1, y del sensor #3 (derecho auxiliar) es 1, gira 90º a la derecha.
   { 
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
   delay(500);
   }

if (valorsensor5 ==0 )                   //Si la lectura del sensor #5 (estaicciones) es 0, cumplirá las siguientes condiciones: 
   {
    switch (estacion)                    // Se ejecuta la variable estacion.
    {
     case 0:                             //Se ejecuta el caso, avanza dos segundos en la estacion para luego continuar.
            delay (1000);
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 1");
            delay (2000);
            estacion=1;
            Serial.println(estacion);
            break;
     case 1:                            //Se ejecuta el caso, donde ha llegado a su punto de partida.
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 2");
            delay(1000);
        while(digitalRead(sensor5)==0)  //Espera a ser desbloqueado el sensor #5 para continuar
            {}
            estacion=0;
            break;
       }
     }
   }
 void loop()
 {
  valorsensor1 = digitalRead(sensor1);   // Lee el valor del pin entrada 12, o sea el valor que entrega el sensor #1 (derecho). 
  valorsensor2 = digitalRead(sensor2);   // Lee el valor del pin entrada 11, o sea el valor que entraga el sensor #2 (izquierdo).
  valorsensor3 = digitalRead(sensor3);   // Lee el valor del pin entrada 8, o sea el valor que entraga el sensor #3 (auxiliar derecho).
  valorsensor4 = digitalRead(sensor4);   // Lee el valor del pin entrada 7, o sea el valor que entraga el sensor #4 (auxiliar izquierdo).
  valorsensor5 = digitalRead(sensor5);   // Lee el valor del pin entrada 2, o sea el valor que entraga el sensor #5 (sensor de estación). 
 
 if (Serial.available ());
  
  int c;
  c = Serial.read();
if (c=='1')               // Estación izquierda
  {
   estacion1();
   Serial.println("estacion1");
  }
  if (c=='2')       //Estación derecha
  {
     estacion2();
     Serial.println("estacion2");
  }
  }

Tambien, intento realizar con funciones y llamarlas en el void loop, pero obtengo el mismo resultado:

int sensor1 = 12;       // Pin del sensor utilizado como entrada digital  en el lado derecho(#1).
int sensor2 = 11;       // Pin del sensor utilizado como entrada digital  en el lado izquierdo(#2).
int sensor3 = 8;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar derecho(#3).
int sensor4 = 7;        // Pin del sensor utilizado como entrada digital  en el lado auxiliar izquierdo(#4).
int sensor5 = 2;        // Pin del sensor utilizado como entrada digital  para la estación.
int valorsensor1 = 0;   // Valor inicial de la lectura digital del sensor #1.
int valorsensor2 = 0;   // Valor inicial de la lectura digital del sensor #2.
int valorsensor3 = 0;   // Valor inicial de la lectura digital del sensor #3.
int valorsensor4 = 0;   // Valor inicial de la lectura digital del sensor #4.
int valorsensor5 = 0;   // Valor inicial de la lectura digital del sensor #5.
int salida1 = 3;        // Salida conectada al pin 3. (avance llanta derecha)
int salida2 = 9;        // Salida conectada al pin 5. (reversa llanta derecha)
int salida3 = 5;        // Salida conectada al pin 9. (avance llanta izquierda)
int salida4 = 10;       // Salida conectada al pin 10. (reversa llanta izquierda)
int omitir_izquierda =0;        
int omitir_derecha =0;
int estacion =0;

void setup() 
{
  Serial.begin(38400); // Comenzamos comunicacion serial.
  pinMode(sensor1, INPUT);    // Inicializa el pin 12 como entrada digital.
  pinMode(sensor2, INPUT);    // Inicializa el pin 11 como entrada digital.
  pinMode(sensor3, INPUT);    // Inicializa el pin 8 como entrada digital.
  pinMode(sensor4, INPUT);    // Inicializa el pin 7 como entrada digital.
  pinMode(sensor5, INPUT);    // Inicializa el pin 2 como entrada digital.
  pinMode (salida1, OUTPUT);  // Inicializa el pin 3 como salida digital.
  pinMode (salida2, OUTPUT);  // Inicializa el pin 9 como salida digital.
  pinMode (salida3, OUTPUT);  // Inicializa el pin 5 como salida digital.
  pinMode (salida4, OUTPUT);  // Inicializa el pin 10 como salida digital. 
}
 
void avanzar()
{
  if(valorsensor1==0 && valorsensor2==0)   // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 0, entonces avanza.
  {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   Serial.println("avanza"); 
  }
}

void dersuave()
{
  if(valorsensor1==1 && valorsensor2==0)  // Si la lectura del sensor #1 (derecho) es 1, y del sensor #2 (izquierdo) es 0, gira suavemente a la derecha. 
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
   Serial.println("derecha suave"); 
   }
}

  void izqsuave()
  {
  if(valorsensor1==0 && valorsensor2==1)  // Si la lectura del sensor #1 (derecho) es 0, y del sensor #2 (izquierdo) es 1, gira suavemente a la izquierda.
   {
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   digitalWrite(salida3,0);
   digitalWrite(salida4,0);
    Serial.println("izquierda suave"); 
   }
  }

void derecha90()
{ 
  if (valorsensor1==1 && valorsensor3==1) //Si la lectura del sensor #1 (derecho) es 1, y del sensor #3 (izquierdo auxiliar) es 1, gira 90º a la derecha.
   {
   digitalWrite(salida1,0);
   digitalWrite(salida2,0);
   analogWrite(salida3,200);
   digitalWrite(salida4,0);
   delay(2000);
   Serial.println("derecha toda"); 
   }
}

void omiitirder()
{
  if (valorsensor1==1 && valorsensor3==1) //Si la lectura del sensor #1 (derecho) es 1, y del sensor #3 (izquierdo auxiliar) es 1, gira 90º a la izquierda.
   {
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(2000);
   omitir_derecha=omitir_derecha+1;
   Serial.println("omitir derecha"); 
   }
}

void izquierda90()
{
  if (valorsensor2==1 && valorsensor4==1) //Si la lectura del sensor #2 (izquierdo) es 1, y del sensor #3 (derecho auxiliar) es 1, gira 90º a la derecha.
   { 
   analogWrite(salida1,200);
   digitalWrite(salida2,0);
   analogWrite(salida3,0);
   digitalWrite(salida4,0);
   delay(2000);
   Serial.println("izquierda toda"); 
   }    
}

void omitirizq()
{
  if (valorsensor2==1 && valorsensor4==1) //Si la lectura del sensor #2 (izquierdo) es 1, y del sensor #3 (derecho auxiliar) es 1, gira 90º a la izquierda.
   { 
   analogWrite(salida1,250);
   digitalWrite(salida2,0);
   analogWrite(salida3,250);
   digitalWrite(salida4,0);
   delay(2000);
   omitir_izquierda=omitir_izquierda+1;
   Serial.println("omitir izquierda"); 
    }
} 

void estaciones()
{
if (valorsensor5 ==0 )                   //Si la lectura del sensor #5 (estaicciones) es 0, cumplirá las siguientes condiciones: 
   {
    switch (estacion)                    // Se ejecuta la variable estacion.
    {
     case 0:                             //Se ejecuta el caso, avanza dos segundos en la estacion para luego continuar.
            delay (1000);
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 1");
            delay (2000);
            estacion=1;
            Serial.println(estacion);
            break;
     case 1:                            //Se ejecuta el caso, donde ha llegado a su punto de partida.
            digitalWrite(salida1,0);
            digitalWrite(salida2,0);
            digitalWrite(salida3,0);
            digitalWrite(salida4,0);
            Serial.println("estacion 2");
            delay(1000);
        while(digitalRead(sensor5)==0)  //Espera a ser desbloqueado el sensor #5 para continuar
            {}
            estacion=0;
            break;
       }
     }  
}

  void loop() //la distancia entre lineas para el giro es de 3cm, la linea debe quedar de 7cm
{ 
  valorsensor1 = digitalRead(sensor1);   // Lee el valor del pin entrada 12, o sea el valor que entrega el sensor #1 (derecho). 
  valorsensor2 = digitalRead(sensor2);   // Lee el valor del pin entrada 11, o sea el valor que entraga el sensor #2 (izquierdo).
  valorsensor3 = digitalRead(sensor3);   // Lee el valor del pin entrada 8, o sea el valor que entraga el sensor #3 (auxiliar derecho).
  valorsensor4 = digitalRead(sensor4);   // Lee el valor del pin entrada 7, o sea el valor que entraga el sensor #4 (auxiliar izquierdo).
  valorsensor5 = digitalRead(sensor5);   // Lee el valor del pin entrada 2, o sea el valor que entraga el sensor #5 (sensor de estación).       

if (Serial.available ());
  
  int c;
  c = Serial.read();
if (c=='1')               // Estación izquierda
  {
   avanzar();
   dersuave();
   izqsuave();
   derecha90();
   omitirizq();
   estaciones();
  }
  if (c=='2')       //Estación derecha
  {
   avanzar();
   dersuave();
   izqsuave();
   izquierda90();
   omiitirder();
   estaciones();
     
  }
}

Al realizar el ensayo, el seguidor de linea se queda en la función "avanzar", y no ejecutan las demás funciones que están dentro de la condición "if" en el void loop; los sensores TCRT5000 continúan realizando el sensado, ya que habilite leds que me indican si estos sensores funcionan o no.

Quedo a la espera de una solucion o sugerencia que pueda mejorar o corregir este error en mi programa.

Gracias.