Wiimote Wireless ändring för personer med funktionshinder (3 / 17 steg)
Steg 3: Programmera Arduino: mottagare
Mottagaren var programmerad så att den seriella data som tas emot från sändaren och sedan skickas 5V genom lämplig Digital i/o-stiften. Exempelvis om "en" togs emot, skulle mottagande Arduino styrelsen göra Digital i/o-1 vara 0V. Om "b" togs emot, skulle mottagande Arduino styrelsen göra Digital i/o-1 vara 5V. Om "c" togs emot, skulle mottagande Arduino styrelsen göra Digital i/o-2 vara 0V. Om "d" mottogs skulle då mottagande Arduino styrelsen göra Digital i/o-2 vara 5V. Nedan är steg nödvändigt att ladda upp koden för mottagande Arduino:
1. ta bort den Proto sköld från Arduino som du väljer som mottagare The ATMEGA mikroprocessorn bör i Arduino styrelsen.
2. Anslut Arduino till en dator via USB-kabeln.
3. öppna programmet Arduino programvara på din dator
4. Välj verktyg Serial Port och sedan markera COM port som refererar till din Arduino ombord. Detta är vanligtvis den första COM-porten i listan.
5. Kopiera och klistra in följande kod i kod-fönstret Arduino. Observera att denna kod är för överföring på en 19200 baud. Om du behöver överföra på olika baudvärde än var i koden det står 19200, ändra den till din önskade överföringshastigheten.
Detta program tar emot information från en MaxStream XBee radio.
följetong ut är på port 1
följetong i är på port 0
int outputPin2 = 2;
int outputPin3 = 3;
int outputPin4 = 4;
int outputPin5 = 5;
int outputPin6 = 6;
int outputPin7 = 7.
int outputPin8 = 8;
int outputPin9 = 9;
int outputPin10 = 10;
int outputPin11 = 11;
int outputPin12 = 12;
int outputPin13 = 13.
en byte att ta emot data:
char inByte = 0;
char inByte2 = 0;
char inByte3 = 0;
char inByte4 = 0;
char inByte5 = 0;
char inByte6 = 0;
char inByte7 = 0;
char inByte8 = 0;
char inByte9 = 0;
char inByte10 = 0;
char inByte11 = 0;
char inByte12 = 0;
char inByte13 = 0;
Ogiltiga inställningar () {
rätt inställda pins till ingång och utgång
pinMode (outputPin2, produktionen);
pinMode (outputPin3, produktionen);
pinMode (outputPin4, produktionen);
pinMode (outputPin5, produktionen);
pinMode (outputPin6, produktionen);
pinMode (outputPin7, produktionen);
pinMode (outputPin8, produktionen);
pinMode (outputPin9, produktionen);
pinMode (outputPin10, produktionen);
pinMode (outputPin11, produktionen);
pinMode (outputPin12, produktionen);
pinMode (outputPin13, produktionen);
starta upp seriell anslutning med 19200-8-n-1-true (inverterad):
Serial.BEGIN(19200);
av någon anledning verkar det att hjälpa till att skicka ett godtyckligt tecken först
sedan paus för vakt tiden innan du begär kommando-läge
Serial.Print("X");
Delay(1100);
lägga till XBee i kommando-läge
Serial.Print("+++");
Delay(1100);
vänta på ett svar från XBee för 2000 ms eller starta
över med installationsprogrammet om inget giltigt svar kommer
om (returnedOK() == 'T') {
om en OK mottogs då fortsätta
}
annat {
Setup(); annars gå tillbaka och försök setup igen
}
Ställ pannan (personligt nätverk) ID-nummer
i detta exempel används 0x3330, men ska du välja din egen
unika hexadecimaltalet mellan 0x0 och 0xFFFE
(Observera kommatecknet i slutet av kommandot som anger att ett annat kommando kommer att följa)
Serial.Print("ATID3330,");
Ange MY (16-bitars adress)
Detta exempel använder 0x0 för Sänd och 0x1 för ta emot men du kommer
vill välja din egen hexadecimala tal mellan 0x0 och 0xFFFE
Serial.Print("MY1,");
Exit kommando-läge (Observera att vi använder Serial.printLN här för att utfärda en radmatning som kompletterar kommandosekvens)
Serial.println("CN");
föregående kommandona kan också skickas på en enda rad som denna, med ett enda kommando med kommatecken:
Serial.println("ATID3330,MY1,CN");
föregående kommandoraden kan också skickas som separata kommandon, av återlansera AT-kommandot:
Serial.println("ATID3330");
Serial.println("ATMY1");
Serial.println("ATCN");
vänta på ett svar från XBee för 2000 ms eller starta
över med installationsprogrammet om inget giltigt svar kommer
om (returnedOK() == 'T') {
om en OK mottogs då fortsätta
}
annat {
Setup(); annars gå tillbaka och försök setup igen
}
}
Ogiltig loop () {
få alla inkommande data:
om (Serial.available() > 1) {
Läs en byte
inByte = Serial.read();
Serial.Print(inByte);
ljus LED om en 1 har tagits emot
om (inByte == "a") {
digitalWrite (outputPin2, låg);
}
om (inByte == 'b') {
digitalWrite (outputPin2, hög);
}
om (inByte == "c") {
digitalWrite (outputPin3, låg);
}
om (inByte == hade ") {
digitalWrite (outputPin3, hög);
}
om (inByte == "e") {
digitalWrite (outputPin4, låg);
}
om (inByte == "f") {
digitalWrite (outputPin4, hög);
}
om (inByte == "g") {
digitalWrite (outputPin5, låg);
}
om (inByte == "h") {
digitalWrite (outputPin5, hög);
}
om (inByte == "i") {
digitalWrite (outputPin6, låg);
}
om (inByte == "j") {
digitalWrite (outputPin6, hög);
}
om (inByte == "k") {
digitalWrite (outputPin7, låg);
}
om (inByte == "l") {
digitalWrite (outputPin7, hög);
}
om (inByte == är ") {
digitalWrite (outputPin8, låg);
}
om (inByte == 'n') {
digitalWrite (outputPin8, hög);
}
om (inByte == ' o ') {
digitalWrite (outputPin9, låg);
}
om (inByte == "p") {
digitalWrite (outputPin9, hög);
}
om (inByte == "q") {
digitalWrite (outputPin10, låg);
}
om (inByte == "r") {
digitalWrite (outputPin10, hög);
}
om (inByte == 's ") {
digitalWrite (outputPin11, låg);
}
om (inByte == 't') {
digitalWrite (outputPin11, hög);
}
om (inByte == 'u') {
digitalWrite (outputPin12, låg);
}
om (inByte == "v") {
digitalWrite (outputPin12, hög);
}
om (inByte == "w") {
digitalWrite (outputPin13, låg);
}
om (inByte == "x") {
digitalWrite (outputPin13, hög);
}
}
}
void blinkLED (int targetPin, int numBlinks) {
denna funktion blinkar status LED ljus så många gånger som efterfrågades
för (int jag = 0; jag
digitalWrite (targetPin, hög); anger LED på
Delay(250); väntar på en sekund
digitalWrite (targetPin, låg); framhäver LED
Delay(250);
}
}
char returnedOK () {
denna funktion kontrollerar svaret på den seriella porten till se om den var en "OK" eller inte
char incomingChar [3].
char okString [] = "OK";
char resultatet = 'n';
int startTime = millis();
medan (millis() - startTime < 2000 & & resultatet == 'n') {/ / använda en timeout på 10 sekunder
om (Serial.available() > 1) {
Läs tre inkommande byte som bör vara "O", "K" och radmatning:
för (int jag = 0; jag < 3; i ++) {
incomingChar [i] = Serial.read();
}
om (strstr (incomingChar, okString)! = NULL) {/ / kolla om respons är "OK"
om (incomingChar [0] == ' o ' & & incomingChar [1] == "K") {/ / kolla om de två första tecknen är "OK"
resultat = 'T'; återvändande T var om "OK" svaret
}
annat {
resultat = "F"; annars returnera F
}
}
}
returnera resultat;
}
6. När koden har kopierats till Arduino kod-fönstret, välj "Kompilera" för att kontrollera att det finns några fel i koden. Om inga fel finns trycker på "Ladda upp till i/o-styrelsen-knappen".
7. När koden har överförts till Arduino styrelsen, koppla bort USB-kabeln och sätta tillbaka den ProtoShield (inklusive Xbee modulen). Du är nu klar ladda upp koden till Arduino mottagaren.