14-12-2014, 09:35 AM
Buenas a tod@s:
Estoy colaborando con un proyecto Arduino donde quieren crear un robot controlado mediante el mando de la Wii (Nunchuck).
Ayer pudimos conseguir sacar los valores del mando y mediante el acelerometro del mando hacer girar un motor. Si inclinabamos el mando hacia delante el motor giraba en un sentido, si lo manteníamos estable en una posición media se quedaba quieto y si lo inclinabamos hacia atrás giraba en el sentido contrario.
El siguiente paso es que, a medida que se vaya inclinando vaya acelerando, y que cuando vuelvas hacia la posición central (donde se queda parado), pues que vaya decelerando.
Supongo que eso se tendría que hacer mediante el bucle for.
Aquí os adjunto el código que queremos modificar:
Sé que en lugar de HIGH tenemos que poner un valor entre 0 y 255 para calibrar la velocidad del motor y controlarlo mediante un pin PWM. Pero nunca he trabajado con el bucle for (sé más o menos su funcionamiento), pero la principal duda es como modificar el valor de la velocidad del motor en función del valor obtenido del mando de la wii.
Muchas gracias de antemano.
Estoy colaborando con un proyecto Arduino donde quieren crear un robot controlado mediante el mando de la Wii (Nunchuck).
Ayer pudimos conseguir sacar los valores del mando y mediante el acelerometro del mando hacer girar un motor. Si inclinabamos el mando hacia delante el motor giraba en un sentido, si lo manteníamos estable en una posición media se quedaba quieto y si lo inclinabamos hacia atrás giraba en el sentido contrario.
El siguiente paso es que, a medida que se vaya inclinando vaya acelerando, y que cuando vuelvas hacia la posición central (donde se queda parado), pues que vaya decelerando.
Supongo que eso se tendría que hacer mediante el bucle for.
Aquí os adjunto el código que queremos modificar:
Código:
#include "Wire.h"
#include "WiiChuck.h"
WiiChuck chuck = WiiChuck();
const int controlpin1 = 2;
const int controlpin2 = 3;
const int enablepin = 9;
// int motorenabled = 0;
//int motorspeed = 0;
// int motordirection = 1;
int yMap = 0;
// int yJoy = 0;
void setup()
{
Serial.begin(9600);
pinMode(controlpin1, OUTPUT);
pinMode(controlpin2, OUTPUT);
pinMode(enablepin, OUTPUT);
digitalWrite(enablepin, LOW);
chuck.begin();
}
void loop()
{
digitalWrite(enablepin, HIGH);
chuck.update();
Serial.println("-----------------------");
Serial.print("Eje X: "); Serial.print((int)chuck.readAccelX()); Serial.println();
Serial.print("Eje Y: "); Serial.print((int)chuck.readAccelY()); Serial.println();
Serial.print("Eje Z: "); Serial.print((int)chuck.readAccelZ()); Serial.println();
Serial.println();
Serial.print("Joystick X: "); Serial.print((int)chuck.readJoyX()); Serial.println();
Serial.print("Joystick Y: "); Serial.print((int)chuck.readJoyY()); Serial.println();
Serial.println();
Serial.print("Boton Z: "); Serial.print((int)chuck.zPressed()); Serial.println();
Serial.print("Boton C: "); Serial.print((int)chuck.cPressed()); Serial.println();
Serial.println();
Serial.println("-----------------------");
delay(10);
yMap = (int)chuck.readAccelY();
if (yMap >= 0 && yMap <=100){
digitalWrite (controlpin1, LOW);
digitalWrite (controlpin2, LOW);
}
if (yMap <0){
digitalWrite(controlpin1, HIGH);
digitalWrite(controlpin2, LOW);
}
if (yMap > 100){
digitalWrite(controlpin1, LOW);
digitalWrite(controlpin2, HIGH);
}
}
Sé que en lugar de HIGH tenemos que poner un valor entre 0 y 255 para calibrar la velocidad del motor y controlarlo mediante un pin PWM. Pero nunca he trabajado con el bucle for (sé más o menos su funcionamiento), pero la principal duda es como modificar el valor de la velocidad del motor en función del valor obtenido del mando de la wii.
Muchas gracias de antemano.