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:)
system
Closed
December 6, 2021, 12:29pm
8
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.