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.