Go Down

Topic: Cómo realizar una comunicación serial con varias funciones? (Read 249 times) previous topic - next topic

Leonardo_T

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):


Code: [Select]

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.

surbyte

iré haciendo obervaciones conforme lo voy analizando.

Al comienzo del loop pones inicio como una llamada de un  goto?
Code: [Select]
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?

Code: [Select]
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

Leonardo_T

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:
Code: [Select]


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");
  }
  }

Leonardo_T

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

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.

Go Up