Buenas!
Sigo haciendo pruebas con mi arduino y acoplándome a su C++ modificado.
La siguiente prueba lee un valor de rotación desde el monitor serie de arduino y lo envía por PWM a un servo para que lo convierta en un giro.
Algo debe de estar mal, porque no gira como debe, sino que oscila, o bien ejecuta un movimiento "convulso" y vuelve a su posición inicial. ¿Podéis echarle un vistazo? Imagino que la cosa viene por el formato de datos de la información desde el monitor serie.
Gracias de antemano.
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo10; // Objeto servo para entrada_salida 10
int valor = 0; // inicializa variable para almacenar el valor instantáneo de giro
int giro = 0; // inicializa variable para almacenar el angulo de rotación
void setup()
{
Serial.begin(9600);
servo10.attach(10); // El objeto servo está asociado a la salida 8
}
void loop()
{
int giro = Serial.read(); // Lee el valor del ángulo de rotación
for (valor = 0; valor <= giro; valor += 1);
{
servo10.write(valor); // Ejecuta la rotación con intervalos de 20 ms
delay (20);
}
}
Bien, he encontrado información sobre el monitor serie y he modificado el programa.
Con ello si que ejecuta el giro que se le pide, pero por ejemplo, se hacemos girar 90º, luego no puedo decirle que vuelva a un valor inferior. Llega a 180º y ahí se apalanca hasta que reinicio el arduino. ¿¿¿????
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo10; // Objeto servo para entrada_salida 10
int valor=0; // inicializa variable para almacenar el valor instantáneo de giro
int giro = 0; // inicializa variable para almacenar el angulo de rotación
void setup()
{
Serial.begin(9600);
servo10.attach(10); // El objeto servo está asociado a la salida 10
}
void loop()
{
giro = Serial.parseFloat(); // Lee el valor del ángulo de rotación en valor decimal
for (valor; valor <= giro; valor += 1); // mantiene el valor último para que se el servo no vuelva a origen
{
servo10.write(valor); // Ejecuta la rotación con intervalos de 20 ms
delay (10);
}
}
Sigo haciendo pruebas con mi arduino y acoplándome a su C++ modificado.
La siguiente prueba lee un valor de rotación desde el monitor serie de arduino y lo envía por PWM a un servo para que lo convierta en un giro.
Algo debe de estar mal, porque no gira como debe, sino que oscila, o bien ejecuta un movimiento "convulso" y vuelve a su posición inicial. ¿Podéis echarle un vistazo? Imagino que la cosa viene por el formato de datos de la información desde el monitor serie.
Gracias de antemano.
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo10; // Objeto servo para entrada_salida 10
int valor = 0; // inicializa variable para almacenar el valor instantáneo de giro
int giro = 0; // inicializa variable para almacenar el angulo de rotación
void setup()
{
Serial.begin(9600);
servo10.attach(10); // El objeto servo está asociado a la salida 8
}
void loop()
{
int giro = Serial.read(); // Lee el valor del ángulo de rotación
for (valor = 0; valor <= giro; valor += 1);
{
servo10.write(valor); // Ejecuta la rotación con intervalos de 20 ms
delay (20);
}
}
Bien, he encontrado información sobre el monitor serie y he modificado el programa.
Con ello si que ejecuta el giro que se le pide, pero por ejemplo, se hacemos girar 90º, luego no puedo decirle que vuelva a un valor inferior. Llega a 180º y ahí se apalanca hasta que reinicio el arduino. ¿¿¿????
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo10; // Objeto servo para entrada_salida 10
int valor=0; // inicializa variable para almacenar el valor instantáneo de giro
int giro = 0; // inicializa variable para almacenar el angulo de rotación
void setup()
{
Serial.begin(9600);
servo10.attach(10); // El objeto servo está asociado a la salida 10
}
void loop()
{
giro = Serial.parseFloat(); // Lee el valor del ángulo de rotación en valor decimal
for (valor; valor <= giro; valor += 1); // mantiene el valor último para que se el servo no vuelva a origen
{
servo10.write(valor); // Ejecuta la rotación con intervalos de 20 ms
delay (10);
}
}