Stap 2: Program de Arduino: zender
De Arduino zender is geprogrammeerd zodat wanneer één of meer van de schakelopties op de digitale i/o 2-13 aangesloten werd ingedrukt dat een bepaalde letter van het alfabet via seriële draadloos verzonden zou worden. Bijvoorbeeld het schakelen 1 moest worden uitgeschakeld, de letter "a" werd verzonden draadloos via seriële. Als schakelaar 1 worden moest op werd dan de letter "b" verzonden draadloos via seriële. Als schakelaar 2 worden moest uitgeschakeld, wordt de letter "c" was draadloos verzonden via seriële. De letter "d" werd gestuurd als schakelaar 2 moest worden ingeschakeld. Een voorbeeld van de volledige seriële transmissie voor 12 switches is beneden te zien:
• Voorbeeld 1: schakelaar 1 en 3 zijn gesloten, alle andere switches zijn open
o "bcfgikmoqsuw"
• Voorbeeld 2: schakelaar 2, 3 en 5 gesloten zijn, en alle andere switches zijn open
o "adfgjkmoqsuw"
Hieronder is de uitsplitsing van hoe de Arduino zender is geprogrammeerd.
1. Verwijder het Proto-schild uit de Arduino die u als de zender kiest. De ATMEGA microprocessor moet in de Arduino board.
2. download de Arduino-programma van de Arduino website (www.arduino.cc)
3. Sluit de Arduino op een computer via de USB-kabel.
4. open de Arduino softwareprogramma op uw computer
5. Selecteer Extra -> seriële poort -> en selecteer vervolgens de COM-poort die naar je Arduino board verwijst. Dit is meestal de eerste COM-poort in de lijst.
6. Kopieer en plak de volgende code in het codevenster van de Arduino. Merk op dat deze code voor verzending op een 19200 baud-rate is. Als u verzenden op een verschillende baud-rate wilt dan waar dan ook in de code 19200 staat, wijzigen in uw gewenste baudrate.
Dit programma stuurt de gegevens van een MaxStream XBee radio.
seriële out is op poort 1
seriële in is op poort 0
een digitale ingang is op poorten 2 tot en met 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;
een byte voor het verzenden van gegevens:
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;
void setup () {}
pinnen correct ingesteld om input en output
pinMode (switchPin2, INPUT);
pinMode (switchPin3, INPUT);
pinMode (switchPin4, INPUT);
pinMode (switchPin5, INPUT);
pinMode (switchPin6, INPUT);
pinMode (switchPin7, INPUT);
pinMode (switchPin8, INPUT);
pinMode (switchPin9, INPUT);
pinMode (switchPin10, INPUT);
pinMode (switchPin11, INPUT);
pinMode (switchPin12, INPUT);
pinMode (switchPin13, INPUT);
de seriële aansluiting opstarten met 19200-8-n-1-true (niet-omgekeerde):
Serial.begin(19200);
om wat voor reden lijkt te helpen voor het eerst verzenden van een willekeurig karakter
vervolgens wacht u de wacht tijd voordat u aanvraagt de opdrachtmodus
Serial.Print("X");
delay(1100);
Zet de XBee in de command stand
Serial.Print("+++");
delay(1100);
wachten op een reactie van de XBee voor 2000 ms, of start
over met setup als er geen geldige reactie komt
Als (returnedOK() == 'T') {}
Als u een OK ontvangen volg
}
else {}
Setup; anders ga terug en voer setup opnieuw
}
instellen van de PAN (personal area network) ID-nummer
in dit voorbeeld wordt 0x3330, maar u zult willen kiezen uw eigen
unieke hexadecimale getal tussen 0x0 en 0xFFFE
(Let op de puntkomma aan het einde van de opdracht waarmee wordt aangegeven dat een andere opdracht zullen volgen)
Serial.Print("ATID3330,");
Stel de bestemming hoog op 0x0
16 bit adressering modus te selecteren. Deze adressen kunnen
worden toegewezen en gewijzigd door het verzenden van opdrachten vanuit een microcontroller
Serial.Print("DH0,");
instellen van de bestemming lage (16-bits adres)
dit voorbeeld wordt gebruikt 0x0 voor verzenden en 0x1 voor ontvangen, maar u zult
willen kiezen van uw eigen hexadecimale getallen tussen 0x0 en 0xFFFE
Serial.Print("DL1,");
afrit opdrachtmodus (merk op dat we hier Serial.printLN gebruiken om te geven een linefeed ter aanvulling van de commando's)
Serial.println("CN");
de voorgaande opdrachten kunnen ook worden verzonden op een enkele lijn als deze, met een enkele opdracht met komma's AT:
Serial.println("ATID3330,DH0,DL1,CN");
de voorgaande opdrachtregel kan ook als afzonderlijke opdrachten, worden verzonden door de heruitgave van de opdracht AT:
Serial.println("ATID3330");
Serial.println("ATDH0");
Serial.println("ATDL1");
Serial.println("ATCN");
wachten op een reactie van de XBee voor 2000 ms, of start
over met setup als er geen geldige reactie komt
Als (returnedOK() == 'T') {}
Als u een OK ontvangen volg
}
else {}
Setup; anders ga terug en voer setup opnieuw
}
}
void loop () {}
Lees de schakelaar:
thisByte2 = digitalRead(switchPin2);
converteren naar een leesbare ASCII-waarde, het afgeven van de seriële poort:
vertraging(20);
Als (thisByte2 == 0) {}
thisByte2 = "a"; }
Als (thisByte2 == 1) {}
thisByte2 = "b";}
Serial.Print(thisByte2);
thisByte3 = digitalRead(switchPin3);
vertraging(20);
Als (thisByte3 == 0) {}
thisByte3 = 'c'; }
Als (thisByte3 == 1) {}
thisByte3 = had ";}
Serial.Print(thisByte3);
thisByte4 = digitalRead(switchPin4);
vertraging(20);
Als (thisByte4 == 0) {}
thisByte4 = 'e'; }
Als (thisByte4 == 1) {}
thisByte4 = "f";}
Serial.Print(thisByte4);
thisByte5 = digitalRead(switchPin5);
vertraging(20);
Als (thisByte5 == 0) {}
thisByte5 = 'g'; }
Als (thisByte5 == 1) {}
thisByte5 = "h";}
Serial.Print(thisByte5);
thisByte6 = digitalRead(switchPin6);
vertraging(20);
Als (thisByte6 == 0) {}
thisByte6 = 'i'; }
Als (thisByte6 == 1) {}
thisByte6 = "j";}
Serial.Print(thisByte6);
thisByte7 = digitalRead(switchPin7);
vertraging(20);
Als (thisByte7 == 0) {}
thisByte7 = 'k'; }
Als (thisByte7 == 1) {}
thisByte7 = "l";}
Serial.Print(thisByte7);
thisByte8 = digitalRead(switchPin8);
vertraging(20);
Als (thisByte8 == 0) {}
thisByte8 = ben '; }
Als (thisByte8 == 1) {}
thisByte8 = 'n ";}
Serial.Print(thisByte8);
thisByte9 = digitalRead(switchPin9);
vertraging(20);
Als (thisByte9 == 0) {}
thisByte9 = ' o '; }
Als (thisByte9 == 1) {}
thisByte9 = 'p';}
Serial.Print(thisByte9);
thisByte10 = digitalRead(switchPin10);
vertraging(20);
Als (thisByte10 == 0) {}
thisByte10 = 'q'; }
Als (thisByte10 == 1) {}
thisByte10 = "r";}
Serial.Print(thisByte10);
thisByte11 = digitalRead(switchPin11);
vertraging(20);
Als (thisByte11 == 0) {}
thisByte11 = de '; }
Als (thisByte11 == 1) {}
thisByte11 = 't ";}
Serial.Print(thisByte11);
thisByte12 = digitalRead(switchPin12);
vertraging(20);
Als (thisByte12 == 0) {}
thisByte12 = 'u'; }
Als (thisByte12 == 1) {}
thisByte12 = "v";}
Serial.Print(thisByte12);
thisByte13 = digitalRead(switchPin13);
vertraging(20);
Als (thisByte13 == 0) {}
thisByte13 = 'w'; }
Als (thisByte13 == 1) {}
thisByte13 = "x";}
Serial.Print(thisByte13);
}
char returnedOK () {}
deze functie controleert de reactie op de seriële poort te zien als het een "OK" of niet was
char incomingChar [3];
char [okString] = "OK";
char resultaat = 'n';
int startTime = millis();
terwijl (millis() - startTime < 2000 & & resultaat == 'n') {/ / gebruik een timeout van 10 seconden
Als (Serial.available() > 1) {}
drie binnenkomende bytes die een linefeed, "O" en "K" moet lezen:
for (int i = 0; ik < 3; i ++) {}
incomingChar [i] = Serial.read();
}
Als (strstr (incomingChar, okString)! = NULL) {/ / check om te zien of het respose "OK"
Als (incomingChar [0] == ' o ' & & incomingChar [1] == "K") {/ / check om te zien of de eerste twee tekens "OK"
resultaat = 'T'; terugkeer T was als "OK" het antwoord
}
else {}
resultaat = 'F'; anders terug F
}
}
}
resultaat;
}
7. Zodra de code is overgenomen in het codevenster van de Arduino, selecteer dan "Compile" om te controleren dat er staan geen fouten in de code. Als er geen fouten zijn aanwezig en druk op de "Upload naar i/o-Board knop".
8. Zodra de code is geüpload naar de Arduino board, de USB-kabel, en weer aan de ProtoShield (met inbegrip van de Xbee module). Je bent nu klaar voor het uploaden van de code naar de Arduino-zender.