Étape 13 : Aller sans fil avec XBee
Exemple 9-sans fil XBee radios
Cela vous permet d’utiliser la commande Nunchuck mais faut-il en mettant en place un contrôleur comme un émetteur et un autre contrôleur que le récepteur. J’utilise la carte sans fil Adafruit XBee parce que c’est super facile à utiliser et peut fonctionner sur 3V et 5V, alors c’est génial pour plus tout projet sans fil de l’Arduino. Le jury de servo est mis en place à la communication point à point et l’adaptateur XBee se branche directement sur une prise au sommet de la Commission. Cette configuration serait vraiment bien pour contrôler les attraits de la maison hantée.
Vous pouvez obtenir l’adaptateur XBee et radios ici-
http://www.Adafruit.com/index.php?main_page=product_info&cPath=29&products_id=126
Il y a un tutoriel complet de XBee pour construire l’adaptateur XBee et en le configurant ici-
http://www.Ladyada.net/make/XBee/
Contrairement à la précédente nuchuck code de contrôle, ce code utilise une nouvelle bibliothèque de nunchuck qui nettoie le code considérablement. On l’appelle nunchuck_funcs.h
Vous pouvez l’obtenir ici-
http://todbot.com/blog/2008/02/18/wiichuck-Wii-Nunchuck-adapter-available/comment-page-3/
Il suffit de placer la bibliothèque nunchuck_funcs.h dans votre dossier de bibliothèques Arduino et vous voilà prêt à partir.
Le câblage pour cela est exactement comme le câblage par exemple 6 sauf le nunchuck est relié à l’émetteur et les LEDs et les servos sont connectés au récepteur.
Note - vous ne connectez l’adaptateur USB pour série tandis que l’adaptateur XBee est branché sur la prise car ils utilisent les mêmes lignes de transmission de données. Vous devez programmer le contrôleur tout d’abord et puis branchez l’adaptateur XBee. Si vous avez besoin être en mesure de surveiller le port série en utilisant le XBee, vous pouvez utiliser un couple de fils pour connecter le XBee RX et TX au numérique sur les broches 2 et 3 comme indiqué dans le tutoriel de point à point Adafruit.
Voici le code pour l’émetteur-
/*
* Exemple 9 a
* Émetteur de Nunchuck XBee
* Copiez le code suivant utilise la bibliothèque de fonctions nunchuck et une radio XBee (w / adaptateur Adafruit XBee)
* faire un nunchuck Wii un périphérique d’entrée sans fil
* Honus 2010
* Nunchuck fonctions de bibliothèque de Tod E. Kurt, http://todbot.com/blog
*/
#include « Wire.h » / / include de la bibliothèque de fils
#include « nunchuck_funcs.h » / / inclure la bibliothèque de fonctions nunchuck
int loop_cnt = 0 ;
accx octet, accy, zbut, cbut, joyy, joyx ;
int ledPin = 13 ;
void setup()
{
Serial.Begin(9600) ;
nunchuck_setpowerpins() ;
nunchuck_init() ; Envoyer l’initialisation du handshake
pinMode (ledPin, sortie) ;
}
void loop()
{
digitalWrite (ledPin, HIGH) ; la valeur de la LED sur
Si (loop_cnt > 100) {/ / chaque 100 millisecondes pendant laquelle obtenir de nouvelles données
loop_cnt = 0 ;
nunchuck_get_data() ;
ACCx = nunchuck_accelx() ; varie entre environ 70-182
ACCY = nunchuck_accely() ; varie entre environ 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) ;
}
Voici le code pour le récepteur-
/*
* Exemple 9 b
* Nunchuck XBee récepteur
* Copiez le code suivant reçoit l’entrée d’un nunchuck Wii à l’aide d’une radio XBee (w / adaptateur Adafruit XBee)
* et contrôles quatre servos et deux broches numériques pour allumer les LEDs
* Honus 2010
*/
#include « Servo.h » / / inclure la bibliothèque de Servo
joyx int, joyy = 135 ;
int accx, accy = 135 ;
int zbut, cbut = 0 ;
int ledPin1 = 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 ;
Servo servo1 ;
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, sortie) ;
pinMode (ledPin2, sortie) ;
}
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) {/ / l’état du bouton a changé !
Si (cbut == 1) {/ / vérifier si le bouton est enfoncé
Si (lightMode1 == 0) {/ / le voyant est éteint
lightMode1 = 1 ; la lumière est sur !
digitalWrite (ledPin1, HIGH) ;
} else {}
lightMode1 = 0 ; la lumière est sur !
digitalWrite (ledPin1, basse) ;
}
}
}
Si (zbut! = buttonState2) {/ / l’état du bouton a changé !
Si (zbut == 1) {/ / vérifier si le bouton est enfoncé
Si (lightMode2 == 0) {/ / le voyant est éteint
lightMode2 = 1 ; la lumière est sur !
digitalWrite (ledPin2, HIGH) ;
} else {}
lightMode2 = 0 ; la lumière est sur !
digitalWrite (ledPin2, basse) ;
}
}
}
buttonState1 = cbut ; enregistrer le nouvel État dans notre variable
buttonState2 = zbut ; enregistrer le nouvel État dans notre variable
{while(Serial.available())}
tempVal = Serial.read() ;
Si (tempval == « x ») {}
nunchuckData = « x » ;
Val = 0 ;
}
ElseIf (tempval == « y ») {}
nunchuckData = « y » ;
Val = 0 ;
}
ElseIf (tempval == « X ») {}
nunchuckData = « X » ;
Val = 0 ;
}
ElseIf (tempval == « Y ») {}
nunchuckData = « Y » ;
Val = 0 ;
}
ElseIf (tempval == « Z ») {}
nunchuckData = « Z » ;
Val = 0 ;
}
ElseIf (tempval == « C ») {}
nunchuckData = « C » ;
Val = 0 ;
}
ElseIf (tempval > = « 0 » & & tempval < = « 9 ») {}
Val = val * 10 ;
Val = val + (tempval - « 0 ») ;
Si (nunchuckData == « x ») {}
joyx = val ;
}
ElseIf (nunchuckData == « y ») {}
joyy = val ;
}
ElseIf (nunchuckData == « X ») {}
ACCx = val ;
}
ElseIf (nunchuckData == « Y ») {}
ACCY = val ;
}
ElseIf (nunchuckData == « Z ») {}
Zbut = val ;
}
ElseIf (nunchuckData == « C ») {}
CBUT = val ;
}
}
} //end d’entrée dans le tampon série
}