Paso 13: Ir inalámbrico con XBee
Ejemplo 9-XBee Wireless radios
Esto le permite utilizar el control Nunchuck pero no al configurar un controlador como transmisor y otro controlador como el receptor. Utilizar el adaptador inalámbrico Adafruit XBee porque es super fácil de usar y puede trabajar a 3V y 5V por lo que es ideal para cualquier proyecto inalámbrico de Arduino. El tablero servo está configurado para la comunicación punto a punto y el adaptador XBee se conecta directamente a un enchufe en la parte superior de la Junta. Esta configuración sería muy bien para controlar la casa embrujada de interés.
Usted puede conseguir el adaptador XBee y radios aquí-
http://www.Adafruit.com/index.php?main_page=product_info&cPath=29&products_id=126
Hay un completo tutorial de XBee para construir el adaptador XBee y configurarlo aquí-
http://www.Ladyada.net/make/XBEE/
A diferencia del código de control nuchuck anterior, este código utiliza una nueva biblioteca de nunchuck que limpia mucho el código. Se llama nunchuck_funcs.h
Usted puede conseguirlo aquí,
http://todbot.com/blog/2008/02/18/WiiChuck-Wii-nunchuck-Adapter-available/comment-Page-3/
Simplemente coloque la biblioteca nunchuck_funcs.h en la carpeta de las bibliotecas de Arduino y eres bueno para ir.
El cableado para esto es exactamente como el cableado por ejemplo 6 excepto el nunchuck es conectado con el transmisor y los servos y los LEDs están conectados al receptor.
Nota: no se puede conectar el USB al adaptador serial mientras que está enchufado el adaptador XBee en su toma ya que utilizan las mismas líneas de transmisión de datos. Debe programar el controlador primero y luego conecte el adaptador XBee. Si usted necesita ser capaz de controlar el puerto serie utilizando el XBee puede utilizar un par de cables para conectarse el XBee RX y TX pines 2 y 3 de salida digital como se muestra en el tutorial de punto a punto de Adafruit.
Aquí está el código para el transmisor-
/*
* Ejemplo 9a
* Transmisor XBee Nunchuck
* Este código utiliza la biblioteca de funciones del nunchuck y una radio XBee (w / adaptador de Adafruit XBee)
* hacer un nunchuck de Wii un dispositivo de entrada inalámbrico
* Honus 2010
* Nunchuck funciona biblioteca de Tod E. Kurt, http://todbot.com/blog
*/
#include "Wire.h" / / incluir la biblioteca de alambre
#include "nunchuck_funcs.h" / / incluir la biblioteca de funciones nunchuck
int loop_cnt = 0;
accx bytes, accy, zbut, cbut, joyx joyy,
int ledPin = 13;
void setup()
{
Serial.Begin(9600);
nunchuck_setpowerpins();
nunchuck_init(); enviar el protocolo de inicialización
pinMode (ledPin, salida);
}
void loop()
{
digitalWrite (ledPin, HIGH); prende el LED
Si (loop_cnt > 100) {/ / cada 100 milisegundos Obtén nuevos datos
loop_cnt = 0;
nunchuck_get_data();
accx = nunchuck_accelx(); se extiende de aproximadamente 70-182
Accy = nunchuck_accely(); se extiende de aproximadamente 65-173
zbut = nunchuck_zbutton();
CBUT = nunchuck_cbutton();
joyx = nunchuck_joyx();
joyy = nunchuck_joyy();
Serial.Print("joyx:");
Serial.Print((byte)joyx,DEC);
Serial.Print("joyy:");
Serial.Print((byte)joyy,DEC);
Serial.Print("accx:");
Serial.Print((byte)accx,DEC);
Serial.Print("Accy:");
Serial.Print((byte)Accy,DEC);
Serial.Print("\tzbut:");
Serial.Print((byte)zbut,DEC);
Serial.Print("\tcbut:");
Serial.println((byte)CBUT,DEC);
}
loop_cnt ++;
Delay(1);
}
Aquí está el código para el receptor-
/*
* Ejemplo 9b
* Receptor Nunchuck XBee
* Este código recibe la entrada de un nunchuck de Wii usando un radio XBee (w / adaptador de Adafruit XBee)
* y controles cuatro servos y dos pines digitales para encender LEDs
* Honus 2010
*/
#include "Servo.h" / / incluye la librería Servo
int joyx, joyy = 135;
accx int, accy = 135;
int zbut, cbut = 0;
ledPin1 int = 13;
int ledPin2 = 12;
int lightvalue1 = 255;
int lightvalue2 = 255;
char nunchuckData;
int val = 0;
tempval int = 0;
int servo1Pos;
int servo2Pos;
int servo3Pos;
int servo4Pos;
int buttonState1 = 0;
int buttonState2 = 0;
int lightMode1 = 0;
int lightMode2 = 0;
Servo1 servo;
Servo servo2;
Servo servo3;
Servo servo4;
int servoPin1 = 9;
int servoPin2 = 8;
int servoPin3 = 7;
int servoPin4 = 6;
void setup()
{
Serial.Begin(9600);
Serial.Print ("Nunchuck ready\n");
Serial.Begin(9600);
servo1.Attach(servoPin1);
servo2.Attach(servoPin2);
servo3.Attach(servoPin3);
servo4.Attach(servoPin4);
pinMode (ledPin1, salida);
pinMode (ledPin2, salida);
}
void loop() {}
Si {} (accy > 125)
servo1Pos = 90-(accy-125);
Si (servo2Pos < 45)
servo1Pos = 45;
servo1.Write(servo1Pos);
}
Si {} (accy < 125)
servo1Pos = 90+(125-accy);
Si (servo1Pos > 135)
servo1Pos = 135;
servo1.Write(servo1Pos);
}
Si {} (accx > 125)
servo2Pos = 90-(accx-125);
Si (servo2Pos < 45)
servo2Pos = 45;
servo2.Write(servo2Pos);
}
Si {} (accx < 125)
servo2Pos = 90+(125-accx);
Si (servo2Pos > 135)
servo2Pos = 135;
servo2.Write(servo2Pos);
}
Si {} (joyy > 125)
servo3Pos = 90-(joyy-125);
Si (servo3Pos < 45)
servo3Pos = 45;
servo3.Write(servo3Pos);
}
Si {} (joyy < 125)
servo3Pos = 90+(125-joyy);
Si (servo3Pos > 135)
servo3Pos = 135;
servo3.Write(servo3Pos);
}
Si {} (joyx > 125)
servo4Pos = 90-(joyx-125);
Si (servo4Pos < 45)
servo4Pos = 45;
servo4.Write(servo4Pos);
}
Si {} (joyx < 125)
servo4Pos = 90+(125-joyx);
Si (servo4Pos > 135)
servo4Pos = 135;
servo4.Write(servo4Pos);
}
Si (cbut! = buttonState1) {/ / el estado de botón ha cambiado!
Si (cbut == 1) {/ / comprobar si se presiona el botón
Si (lightMode1 == 0) {/ / la luz está apagada
lightMode1 = 1; luz está encendida!
digitalWrite (ledPin1, HIGH);
} else {}
lightMode1 = 0; luz está encendida!
digitalWrite (ledPin1, LOW);
}
}
}
Si (zbut! = buttonState2) {/ / el estado de botón ha cambiado!
Si (zbut == 1) {/ / comprobar si se presiona el botón
Si (lightMode2 == 0) {/ / la luz está apagada
lightMode2 = 1; luz está encendida!
digitalWrite (ledPin2, HIGH);
} else {}
lightMode2 = 0; luz está encendida!
digitalWrite (ledPin2, LOW);
}
}
}
buttonState1 = cbut; guardar el nuevo estado en nuestra variable
buttonState2 = zbut; guardar el nuevo estado en nuestra variable
{while(serial.Available())}
tempVal = Serial.read();
Si (tempval == 'x') {}
nunchuckData = 'x';
Val = 0;
}
else if (tempval == 'y') {}
nunchuckData = 'y';
Val = 0;
}
else if (tempval == 'X') {}
nunchuckData = 'X';
Val = 0;
}
else if (tempval == 'Y') {}
nunchuckData = 'Y';
Val = 0;
}
else if (tempval == 'Z') {}
nunchuckData = 'Z';
Val = 0;
}
else if (tempval == 'C') {}
nunchuckData = 'C';
Val = 0;
}
else if (tempval > = '0' & & tempval < = '9') {}
Val = val * 10;
Val = val + (tempval - '0');
Si (nunchuckData == 'x') {}
joyx = val;
}
else if (nunchuckData == 'y') {}
joyy = val;
}
else if (nunchuckData == 'X') {}
accx = val;
}
else if (nunchuckData == 'Y') {}
Accy = val;
}
else if (nunchuckData == 'Z') {}
zbut = val;
}
else if (nunchuckData == 'C') {}
CBUT = val;
}
}
} //end de entrada búfer serial
}