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.