Hola a todos, feliz Navidad!
Quería comentar un problema con un código que estoy desarrollando. El programa tiene una estructura switch con dos case, y consigo entrar en los dos sin problema, el caso es que el primer case me lo hace bien, pero el segundo no. El código es el siguiente:
switch (modo)
{
case true:
Serial.print("MODO MANUAL");
if (IrReceiver.decodedIRData.command == 0x9 && estadomotor == false) {
myDFPlayer.play(3);
delay(3500);
for (int i = 140; i >= 20; i--) {
servoMotor2.write(i);
delay(20);
}
for (int i = 115; i >= 0; i--) {
servoMotor1.write(i);
delay(20);
}
estadomotor = true;
IrReceiver.decodedIRData.command = 0x00;
}
if (IrReceiver.decodedIRData.command == 0x9 && estadomotor == true) //boton flecha hacia abajo
{
myDFPlayer.play(5);
delay(3500);
for (int i = 0; i <= 115; i++) {
servoMotor1.write(i);
delay(20);
}
for (int i = 20; i <= 140; i++) {
servoMotor2.write(i);
delay(20);
}
estadomotor = false;
IrReceiver.decodedIRData.command = 0x00;
}
if (IrReceiver.decodedIRData.command == 0x46)
{
avanza();
delay(2000);
parar();
}
if (IrReceiver.decodedIRData.command == 0x15)
{
retrocede();
delay(2000);
parar();
}
if (IrReceiver.decodedIRData.command == 0xB)
{
parar();
delay(2000);
}
if (IrReceiver.decodedIRData.command == 0x43)
{
derecha();
delay(2000);
parar();
}
if (IrReceiver.decodedIRData.command == 0x44)
{
izquierda();
delay(2000);
parar();
}
if (IrReceiver.decodedIRData.command == 0x47 && estado_rele == false)
{
myDFPlayer.play(4);
delay(10000);
digitalWrite(RELE, HIGH);
estado_rele = true;
IrReceiver.decodedIRData.command = 0x00;
}
if (IrReceiver.decodedIRData.command == 0x47 && estado_rele == true)
{
myDFPlayer.play(8);
digitalWrite(RELE, LOW);
estado_rele = false;
IrReceiver.decodedIRData.command = 0x00;
}
if (IrReceiver.decodedIRData.command == 0x19)
{
myDFPlayer.play(7);
servoMotor1.write(60);
servoMotor2.write(60);
delay(500);
servoMotor1.write(0);
servoMotor2.write(20);
delay(500);
servoMotor1.write(115);
servoMotor2.write(140);
}
IrReceiver.resume();
if (IrReceiver.decodedIRData.command = 0x40) {
break;
}
case false:
Serial.print("MODO AUTOMATICO");
estadomotor = false;
if (distancia1 > 0) {
if (distancia1 < 10) {
if (distancia1 > 5) {
retrocede();
delay(200);
parada(100);
} else {
izquierda();
delay(2000);
avanza();
delay(2000);
izquierda();
delay(2000);
}
} else {
avanza();
}
} else {
avanza();
}
if (IrReceiver.decodedIRData.command = 0x40) {
break;
}
}
IrReceiver.resume();
}
Es un poco extenso, modo es una variable booleana, y cuando es false, entra en la parte del código pero no me hace la secuencia de movimientos que le puse. Lo que hace es activar los motores y cuando la distancia alcanza un valor que no he definido, se para. No lo entiendo.
Gracias de antemano.
Actualización: He conseguido que lo haga pero para ello, a parte de la distancia necesita estar recibiendo en todo momento la señal infrarroja del mando, cualquier botón. Si mantengo pulsado cualquier botón y cumple la distancia, hace la secuencia de movimientos, alguien sabe como lo puedo arreglar?