Servos + control IR

Hola buenas, quiero controlar 4 servos de 360º a la vez con un control remoto (como si fuera un coche), el problema es que solo funciona una vez.
El código:

```
#include <Servo.h>
#include <IRremote.h>
#define DELANTE 0x8D0
#define DETRAS 0x4D0
#define IZQUIERDA 0x2F0
#define DERECHA   0xAF0
#define PARADO 0xA90
Servo servo_FL;
Servo servo_FR;
Servo servo_BL;
Servo servo_BR;
int pinIr=12;
IRrecv receptor(pinIr);
decode_results resultados;

void setup() {
  servo_FL.attach(2);
  servo_FR.attach(3);
  servo_BL.attach(4);
  servo_BR.attach(5);
  receptor.enableIRIn();
}

void loop() {
  
 if(receptor.decode(&resultados)){

  switch(resultados.value){
    case DELANTE:
      servo_FL.write(0);
      servo_FR.write(180);
      servo_BL.write(0);
      servo_BR.write(180);
      delay(3000);
      break;
      
    case DETRAS:
      servo_FL.write(180);
      servo_FR.write(0);
      servo_BL.write(180);
      servo_BR.write(0);
      receptor.resume();
      break;
      
    case DERECHA:
      servo_FL.write(0);
      servo_FR.write(87);
      servo_BL.write(0);
      servo_BR.write(88);
      break;
      
    case IZQUIERDA:
      servo_FL.write(81);
      servo_FR.write(180);
      servo_BL.write(72);
      servo_BR.write(180);
      break;
      
    case PARADO:
      servo_FL.write(81);
      servo_FR.write(87);
      servo_BL.write(72);
      servo_BR.write(88);
      break;
      
  }
 }
 else{ //parado
   servo_FL.write(81);
   servo_FR.write(87);
   servo_BL.write(72);
   servo_BR.write(88); 
   
 }
}

``` 

Gracias por la ayuda.

Falta 'receptor.resume ();' - solo hay 1.

Si pongo todos no me funciona ninguna vez

#include <Servo.h>
#include <IRremote.h>
#define DELANTE 0x8D0
#define DETRAS 0x4D0
#define IZQUIERDA 0x2F0
#define DERECHA   0xAF0
#define PARADO 0xA90
Servo servo_FL;
Servo servo_FR;
Servo servo_BL;
Servo servo_BR;
int pinIr=12;
IRrecv receptor(pinIr);
decode_results resultados;

void setup() {
  servo_FL.attach(2);
  servo_FR.attach(3);
  servo_BL.attach(4);
  servo_BR.attach(5);
  receptor.enableIRIn();
}

void loop() {
  
 if(receptor.decode(&resultados)){

  switch(resultados.value){
    case DELANTE:
      servo_FL.write(0);
      servo_FR.write(180);
      servo_BL.write(0);
      servo_BR.write(180);
      receptor.resume();
      break;
      
    case DETRAS:
      servo_FL.write(180);
      servo_FR.write(0);
      servo_BL.write(180);
      servo_BR.write(0);
      receptor.resume();
      break;
      
    case DERECHA:
      servo_FL.write(0);
      servo_FR.write(87);
      servo_BL.write(0);
      servo_BR.write(88);
      receptor.resume();
      break;
      
    case IZQUIERDA:
      servo_FL.write(81);
      servo_FR.write(180);
      servo_BL.write(72);
      servo_BR.write(180);
      receptor.resume();
      break;
      
    case PARADO:
      servo_FL.write(81);
      servo_FR.write(87);
      servo_BL.write(72);
      servo_BR.write(88);
      receptor.resume();
      break;
      
  }
 }
 else{ //parado
   servo_FL.write(81);
   servo_FR.write(87);
   servo_BL.write(72);
   servo_BR.write(88); 
   receptor.resume();
   
 }
}

Prueba esto.

#include <Servo.h>
#include <IRremote.h>

#define DELANTE 0x8D0
#define DETRAS 0x4D0
#define IZQUIERDA 0x2F0
#define DERECHA   0xAF0
#define PARADO 0xA90

Servo servo_FL;
Servo servo_FR;
Servo servo_BL;
Servo servo_BR;
int pinIr=12;
IRrecv receptor (pinIr);
decode_results resultados;

void setup ()
{
  servo_FL.attach(2);
  servo_FR.attach(3);
  servo_BL.attach(4);
  servo_BR.attach(5);
  receptor.enableIRIn();
}

void loop ()
{
  
 if(receptor.decode(&resultados))
 {

  switch(resultados.value)
  {
    case DELANTE:
      servo_FL.write(0);
      servo_FR.write(180);
      servo_BL.write(0);
      servo_BR.write(180);
      // receptor.resume();
      break;
      
    case DETRAS:
      servo_FL.write(180);
      servo_FR.write(0);
      servo_BL.write(180);
      servo_BR.write(0);
      // receptor.resume();
      break;
      
    case DERECHA:
      servo_FL.write(0);
      servo_FR.write(87);
      servo_BL.write(0);
      servo_BR.write(88);
      // receptor.resume();
      break;
      
    case IZQUIERDA:
      servo_FL.write(81);
      servo_FR.write(180);
      servo_BL.write(72);
      servo_BR.write(180);
      // receptor.resume();
      break;
      
    case PARADO:
      servo_FL.write(81);
      servo_FR.write(87);
      servo_BL.write(72);
      servo_BR.write(88);
      // receptor.resume();
      break;
  }
  delay (40);
  receptor.resume();
 }
 else
 { //parado
   servo_FL.write(81);
   servo_FR.write(87);
   servo_BL.write(72);
   servo_BR.write(88); 
   // receptor.resume();
   delay (40);
 }
}
1 Like

Sisi funciona mucho mejor, muchas gracias. Pero supongo que no se podría hacer q se vaya ejecutando un comando y le diga otro y se pare el anterior (x ejemplo que vaya hacia delante todo el rato hasta q le diga q vaya a la derecha entonces deja de ejecutar el comando delante y empieza el de la derecha y así con todos ), pq ahora ejecuta un comando durante cierto periodo de tiempo y da igual si le digo otro pq no se para

Supongo que es un programa de gestión de cochecitos o algo así. No tengo experiencia con este tipo de hardware, pero me parece que puede hacer lo que quiera. Que diga alguien con más experiencia que yo. (Utilizo Google Translate y me disculpo si hay alguna ambigüedad).

vale muchas gracias, y se ha entendido todo:)