Stap 13: Ga draadloos met XBee
Voorbeeld 9-Wireless XBee Radio 's
Dit kunt u het besturingselement Nunchuck gebruiken maar doet door het opzetten van een domeincontroller als een zender en een andere controller als de ontvanger. Ik gebruik de draadloze adapter van Adafruit XBee want het is super eenvoudig te gebruiken en kan werken op zowel 3V- en 5V, dus het is geweldig voor vrijwel elke draadloze project van Arduino. Het bestuur van de servo is ingesteld voor Point-to-point communicatie en de XBee adapter stekkers rechtstreeks in een aansluiting aan de bovenkant van het bord. Deze opzet zou echt goed voor het beheersen van spookhuis attracties.
Kunt u de XBee adapter en radio's hier-
http://www.adafruit.com/index.php?main_page=product_info&cPath=29&products_id=126
Er is een volledige XBee tutorial voor het bouwen van de XBee-adapter en het configureren van het hier-
http://www.ladyada.net/make/XBee/
Deze code gebruikt in tegenstelling tot de vorige code voor de besturing van de nuchuck, een nieuwe nunchuck bibliotheek die de code aanzienlijk ruimt. Het heet nunchuck_funcs.h
Je kunt het hier-
http://todbot.com/blog/2008/02/18/WiiChuck-Wii-Nunchuck-adapter-available/comment-page-3/
Plaats eenvoudig de nunchuck_funcs.h-bibliotheek in uw omslag van de bibliotheken van Arduino en je bent goed om te gaan.
De bedrading voor dit is net zoals de bedrading bijvoorbeeld 6 behalve de nunchuck is verbonden met de zender en de servo's en de LEDs zijn aangesloten op de receiver.
Nota - u kan niet verbinden met de USB seriële adapter terwijl de XBee-adapter is aangesloten op de ingang als ze de dezelfde gegevens transmissielijnen gebruiken. U moet de controller eerst program en sluit in de XBee-adapter. Als u kunnen controleren van de seriële poort wilt tijdens het gebruik van de XBee kunt u een paar draden sluit de XBee RX en TX aan digitale uitgang pin 2 en 3, zoals aangegeven in de Adafruit point-to-point tutorial.
Hier is de code voor de zender-
/*
* Voorbeeld 9a
* Nunchuck XBee zender
* Deze code gebruikt de nunchuck functie bibliotheek en een XBee radio (w / Adafruit XBee adapter)
* om een Wii nunchuck een draadloos apparaat
* Honus 2010
* Nunchuck functioneert bibliotheek van Tod E. Kurt, http://todbot.com/blog
*/
#include "Wire.h" / / de draad bibliotheek
#include "nunchuck_funcs.h" / / omvatten de nunchuck functie bibliotheek
int loop_cnt = 0;
byte-accx, accy, zbut, cbut, joyy, joyx;
int ledPin = 13;
VOID Setup
{
Serial.begin(9600);
nunchuck_setpowerpins();
nunchuck_init(); Stuur de handdruk initilization
pinMode (ledPin, OUTPUT);
}
void loop
{
digitalWrite (ledPin, hoge); de LED aangezet
Als (loop_cnt > 100) {/ / elke 100 msec krijgen nieuwe gegevens
loop_cnt = 0;
nunchuck_get_data();
accx = nunchuck_accelx(); varieert van ongeveer 70-182
accy = nunchuck_accely(); varieert van ongeveer 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);
}
Hier is de code voor de ontvanger-
/*
* Voorbeeld 9b
* Nunchuck XBee ontvanger
* Deze code ontvangt input van een Wii nunchuck met behulp van een radio XBee (w / Adafruit XBee adapter)
* en besturingselementen vier servo's en twee digitale pinnen om te zetten LEDs
* Honus 2010
*/
#include "Servo.h" / / de Servo-bibliotheek
int joyx, 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;
int tempval = 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, OUTPUT);
pinMode (ledPin2, OUTPUT);
}
void loop {}
Als (accy > 125) {}
servo1Pos = 90-(accy-125);
Als (servo2Pos < 45)
servo1Pos = 45;
servo1.write(servo1Pos);
}
Als (accy < 125) {}
servo1Pos = 90+(125-accy);
Als (servo1Pos > 135)
servo1Pos = 135;
servo1.write(servo1Pos);
}
Als (accx > 125) {}
servo2Pos = 90-(accx-125);
Als (servo2Pos < 45)
servo2Pos = 45;
servo2.write(servo2Pos);
}
Als (accx < 125) {}
servo2Pos = 90+(125-accx);
Als (servo2Pos > 135)
servo2Pos = 135;
servo2.write(servo2Pos);
}
Als (joyy > 125) {}
servo3Pos = 90-(joyy-125);
Als (servo3Pos < 45)
servo3Pos = 45;
servo3.write(servo3Pos);
}
Als (joyy < 125) {}
servo3Pos = 90+(125-joyy);
Als (servo3Pos > 135)
servo3Pos = 135;
servo3.write(servo3Pos);
}
Als (joyx > 125) {}
servo4Pos = 90-(joyx-125);
Als (servo4Pos < 45)
servo4Pos = 45;
servo4.write(servo4Pos);
}
Als (joyx < 125) {}
servo4Pos = 90+(125-joyx);
Als (servo4Pos > 135)
servo4Pos = 135;
servo4.write(servo4Pos);
}
Als (cbut! = buttonState1) {/ / de status van de knop veranderd!
Als (cbut == 1) {/ / controleren als de knop wordt ingedrukt
Als (lightMode1 == 0) {/ / licht is uitgeschakeld
lightMode1 = 1; lampje brandt!
digitalWrite (ledPin1, hoge);
} else {}
lightMode1 = 0; lampje brandt!
digitalWrite (ledPin1, laag);
}
}
}
Als (zbut! = buttonState2) {/ / de status van de knop veranderd!
Als (zbut == 1) {/ / controleren als de knop wordt ingedrukt
Als (lightMode2 == 0) {/ / licht is uitgeschakeld
lightMode2 = 1; lampje brandt!
digitalWrite (ledPin2, hoge);
} else {}
lightMode2 = 0; lampje brandt!
digitalWrite (ledPin2, laag);
}
}
}
buttonState1 = cbut; de nieuwe staat in onze variabele opslaan
buttonState2 = zbut; de nieuwe staat in onze variabele opslaan
while(Serial.available()) {}
tempval = Serial.read();
Als (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;
}
anders als (tempval > = '0' & & tempval < = '9') {}
Val = val * 10;
Val = val + (tempval - '0');
Als (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 van input in seriële buffer
}