Problema con código al programar servo con mando infrarrojos.

Buenas,

Soy muy nuevo en este mundillo y hoy programando me he encontrado con un fallo que no se solucionar:
Resulta que quiero controlar un servomotor con un mando de infrarrojos. El problema:
Al intentar verificar el código me dice: "conversion from int to non scalar type ´Servo´ requested"
He intentado mil maneras pero no encuentro la solución a ese fallo. Les dejo el código para que intenten ayudarme:

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

#define Boton_1 0x80BF49B6        
Servo servo1 = 2;     

int SENSOR = 11;      
int PULSOMIN = 1000;   
int PULSOMAX = 2000; 

void setup() {
  Serial.begin(9600);     /
  IrReceiver.begin(SENSOR, DISABLE_LED_FEEDBACK); 
  pinMode(servo1, OUTPUT);   
  servo1.attach(PINSERVO, PULSOMIN, PULSOMAX);  

} 

void loop() {
  if (IrReceiver.decode()) {        
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); 
    if (IrReceiver.decodedIRData.decodedRawData == Boton_1)  
     servo1.write(0);    
     delay(800);      
     servo1.write(65);    
     delay(5000);      

    
    
    IrReceiver.resume();       
  }
  delay (100);            
}

Un saludo, Daniel

Bastaba con ir a ejemplos, buscar la libreria Servo y elegir un ejemplo.

Una cosa es definir el objeto y luego se le dice a que pin le corresponde.

Ejemplo simple Knoob.ino tomado del IDE

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

Asi que tu error es el numero que pones a la derecha de servo

Servo servo1;

Luego PINSERVO no existe
y lo usas para inicializar el objeto

Luego otro error

Serial.begin(9600);     /

Si vas a poner un comentario es con dos // no solo 1.

Esto no puedes usarlo si suas un pin para servo

pinMode(servo1, OUTPUT);

Es un objeto, no tiene nada que ver con un pin.

Lee un poco mas el ejemplo que te puse y corrige.
Busca Arduino Servo hay muchos tutoriales en la web.

Hola,
Muchas gracias por la respuesta, la verdad he conseguido arreglar el código y he aprendido bastante. Ahora viene el problema: Acabo de verificar el código y esta todo bien, no da ningún problema. Lo que pasa es que el aparato no responde. El servo se mueve de 0 a 65 cada muchos segundos, pero cuando presiono un botón del mando no pasa nada.
Pretendo que el servo se mueva cuando yo presione una tecla: Por ejemplo, si presiono 1, el servo va a posición 65 durante 10 seg, para después volver a posición 0.
Haber si me puedes echar una mano:

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


#define on 0xBA45FF00
#define Boton_1 0xF30CFF00  
#define Boton_2 0xE718FF00  
#define Boton_3 0xA15EFF00  
#define Boton_4 0xF708FF00  
#define Boton_5 0xF31CFF00
#define Boton_6 0xA55AFF00  
#define Boton_7 0xBD42FF00 
#define Boton_8 0xAD52FF00  
#define Boton_9 0xB54AFF00

      
     

 
int SENSOR  = 11;  


Servo servo1;

void setup() {
  Serial.begin(9600);     
  IrReceiver.begin(SENSOR, DISABLE_LED_FEEDBACK);
  servo1.attach (9);   
  

}

void loop() {
  if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_1); 
     servo1.write(65);   
     delay(10000); 
     servo1.write (0);
     delay (1000000) ;  
   
    IrReceiver.resume();       
  }
    if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_2); 
     servo1.write(65);   
     delay(20000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }            
   if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_3); 
     servo1.write(65);   
     delay(30000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
      if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_4); 
     servo1.write(65);   
     delay(40000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
     if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_5); 
     servo1.write(65);   
     delay(50000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
      if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_6); 
     servo1.write(65);   
     delay(60000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
      if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_7); 
     servo1.write(65);   
     delay(70000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
      if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_8); 
     servo1.write(65);   
     delay(80000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   }   
      if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == Boton_9); 
     servo1.write(65);   
     delay(90000); 
     servo1.write (0);
     delay (1000000) ;
     IrReceiver.resume();
   } 
     if (IrReceiver.decode()) {       
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == on); 
     servo1.write(0);   
     delay(90000000); 
     IrReceiver.resume();
   }
}

Un saludo

tu código tiene muchos delay()
Sabes lo que hace delay() destruye el flujo del programa.
El programa llega a delay y dice:

  • qué hago?
    Nada, quedate sentado durante X mseg sin hacer nada. El mundo gira pero a mi no me importa.
  • Pero cómo? Si yo estoy presionando el mando IR y necesito que responda.
  • Pero mira esto
if (IrReceiver.decodedIRData.decodedRawData == Boton_1);
     servo1.write(65);   
     delay(10000);

aca le has pedido que se quede 10 segundos en 65 y eso lo escribiste TU.
y luego mira esto

     servo1.write (0);
     delay (1000000) ;

le dices que vuelva a 0 y se quede 1000 segundos y de nuevo, eso lo escribiste TU
Pero ahi no termina.
Porque tienes exactamente las mismas cosas de mandar a que se quede SIN HACER NADA como respuesta a cada comando?

Creo que he sido lo suficientemente claro.
Ahora ve a Documentación y lee el indice de temas tutoriales y luego Millis()
Aprende a usar millis() y no uses mas delay().

Estamos aqui para ayudarte.

Haber: Primero, el proyecto lo quiero usar para que el servo presione un botón que hace que mi cámara haga exposiciones, en otras palabras, un temporizador. Si aprieto 1, quiero que el servo presione el botón por 10 segundos, si aprieto 2, 20 segundos y así sucesivamente. Y eso explica porque hay tantos delay. Ahora, no entiendo cual es el problema que explique que aunque use el mando, el servo no se mueva.
He probado a usar el millis() pero el programa me dice que "too many arguments to function 'long unsigned int millis()'"

Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.