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:
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:
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().
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()'"