Wiimote Wireless ändring för personer med funktionshinder (2 / 17 steg)
Steg 2: Programmera Arduino: sändare
Arduino sändaren var programmerad så att när en eller flera av växlar ansluten till den digitala i/o 2-13 trycktes att en viss bokstav i alfabetet skulle överföras trådlöst via följetong. Till exempel det växla 1 var att vara avstängd, bokstaven "a" sändes trådlöst över följetong. Om switch 1 skulle vara på var sedan bokstaven "b" skickas trådlöst över följetong. Om växel 2 var att vara avstängd, sändes bokstaven "c" trådlöst över följetong. Om växel 2 var vara påslagen skickades bokstaven "d". Ett exempel på den hela seriell överföringen för 12 switchar kan ses nedan:
• Exempel 1: Switch 1 och 3 är stängda, alla andra växlar är öppna
o "bcfgikmoqsuw"
• Exempel 2: Switch 2, 3 och 5 är stängda, och alla andra växlar är öppen
o "adfgjkmoqsuw"
Nedan är fördelningen av hur Arduino sändaren var programmerad.
1. ta bort den Proto sköld från Arduino som du väljer som sändaren. ATMEGA mikroprocessorn bör i Arduino styrelsen.
2. Ladda ner programmet Arduino från Arduino webbplats (www.arduino.cc)
3. Anslut Arduino till en dator via USB-kabeln.
4. öppna programmet Arduino programvara på din dator
5. Välj Verktyg -> Serial Port -> och sedan välja den COM port som hänvisar till din Arduino ombord. Detta är vanligtvis den första COM-porten i listan.
6. 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 skickar information från en MaxStream XBee radio.
följetong ut är på port 1
följetong i är på port 0
en digital ingång är på portar 2-13
int switchPin2 = 2;
int switchPin3 = 3;
int switchPin4 = 4;
int switchPin5 = 5;
int switchPin6 = 6;
int switchPin7 = 7.
int switchPin8 = 8;
int switchPin9 = 9;
int switchPin10 = 10;
int switchPin11 = 11;
int switchPin12 = 12;
int switchPin13 = 13.
en byte sända data:
char thisByte2 = 0;
char thisByte3 = 0;
char thisByte4 = 0;
char thisByte5 = 0;
char thisByte6 = 0;
char thisByte7 = 0;
char thisByte8 = 0;
char thisByte9 = 0;
char thisByte10 = 0;
char thisByte11 = 0;
char thisByte12 = 0;
char thisByte13 = 0;
Ogiltiga inställningar () {
rätt inställda pins till ingång och utgång
pinMode (switchPin2, ingång);
pinMode (switchPin3, ingång);
pinMode (switchPin4, ingång);
pinMode (switchPin5, ingång);
pinMode (switchPin6, ingång);
pinMode (switchPin7, ingång);
pinMode (switchPin8, ingång);
pinMode (switchPin9, ingång);
pinMode (switchPin10, ingång);
pinMode (switchPin11, ingång);
pinMode (switchPin12, ingång);
pinMode (switchPin13, ingång);
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 Destination höga till 0x0
att välja 16-bitars adressering läge. Dessa adresser kan
fastställas och ändras genom att skicka kommandon från en mikrokontroller
Serial.Print("DH0,");
Ange Destination låg (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("DL1,");
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,DH0,DL1,CN");
föregående kommandoraden kan också skickas som separata kommandon, av återlansera AT-kommandot:
Serial.println("ATID3330");
Serial.println("ATDH0");
Serial.println("ATDL1");
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 () {
Läs växeln:
thisByte2 = digitalRead(switchPin2);
konvertera den till en läsbar ASCII-värdet, skicka ut den seriella porten:
Delay(20);
om (thisByte2 == 0) {
thisByte2 = "a"; }
om (thisByte2 == 1) {
thisByte2 = "b";}
Serial.Print(thisByte2);
thisByte3 = digitalRead(switchPin3);
Delay(20);
om (thisByte3 == 0) {
thisByte3 = 'c'; }
om (thisByte3 == 1) {
thisByte3 = hade ";}
Serial.Print(thisByte3);
thisByte4 = digitalRead(switchPin4);
Delay(20);
om (thisByte4 == 0) {
thisByte4 = "e"; }
om (thisByte4 == 1) {
thisByte4 = "f";}
Serial.Print(thisByte4);
thisByte5 = digitalRead(switchPin5);
Delay(20);
om (thisByte5 == 0) {
thisByte5 = 'g'; }
om (thisByte5 == 1) {
thisByte5 = "h";}
Serial.Print(thisByte5);
thisByte6 = digitalRead(switchPin6);
Delay(20);
om (thisByte6 == 0) {
thisByte6 = "i"; }
om (thisByte6 == 1) {
thisByte6 = "j";}
Serial.Print(thisByte6);
thisByte7 = digitalRead(switchPin7);
Delay(20);
om (thisByte7 == 0) {
thisByte7 = "k"; }
om (thisByte7 == 1) {
thisByte7 = 'l';}
Serial.Print(thisByte7);
thisByte8 = digitalRead(switchPin8);
Delay(20);
om (thisByte8 == 0) {
thisByte8 = är "; }
om (thisByte8 == 1) {
thisByte8 = 'n ";}
Serial.Print(thisByte8);
thisByte9 = digitalRead(switchPin9);
Delay(20);
om (thisByte9 == 0) {
thisByte9 = ' o '; }
om (thisByte9 == 1) {
thisByte9 = "p";}
Serial.Print(thisByte9);
thisByte10 = digitalRead(switchPin10);
Delay(20);
om (thisByte10 == 0) {
thisByte10 = 'q'; }
om (thisByte10 == 1) {
thisByte10 = "r";}
Serial.Print(thisByte10);
thisByte11 = digitalRead(switchPin11);
Delay(20);
om (thisByte11 == 0) {
thisByte11 = 's "; }
om (thisByte11 == 1) {
thisByte11 = 't ";}
Serial.Print(thisByte11);
thisByte12 = digitalRead(switchPin12);
Delay(20);
om (thisByte12 == 0) {
thisByte12 = 'u'; }
om (thisByte12 == 1) {
thisByte12 = "v";}
Serial.Print(thisByte12);
thisByte13 = digitalRead(switchPin13);
Delay(20);
om (thisByte13 == 0) {
thisByte13 = 'w'; }
om (thisByte13 == 1) {
thisByte13 = "x";}
Serial.Print(thisByte13);
}
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;
}
7. 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".
8. 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 sändaren.