Stap 3: Program de Arduino: ontvanger
De ontvanger is geprogrammeerd zodat het seriële data van de zender ontvangen en vervolgens 5V door middel van de juiste digitale i/o-pinnen verzonden. Bijvoorbeeld, als "a" werd ontvangen, zou de ontvangende Arduino board digitale i/o-1 0V maken. Als "b" is ontvangen, kan de ontvangende Arduino board digitale i/o-1 5V zou maken. Als "c" is ontvangen, kan de ontvangende Arduino board digitale i/o-2 worden 0V zou maken. Als "d" werd ontvangen zou dan de ontvangende Arduino board maken digitale i/o-2 worden 5V. Hieronder zijn de stappen nodig voor het uploaden van de code voor de ontvangende Arduino:
1. Verwijder het Proto-schild uit de Arduino die u hebt gekozen als de ontvanger de ATMEGA microprocessor zou moeten in de Arduino board zijn.
2. Sluit de Arduino op een computer via de USB-kabel.
3. open de Arduino softwareprogramma op uw computer
4. Selecteer Tools seriële poort en vervolgens selecteert u de COM-poort die naar je Arduino board verwijst. Dit is meestal de eerste COM-poort in de lijst.
5. 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 ontvangt informatie van een MaxStream XBee radio.
seriële out is op poort 1
seriële in is op poort 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;
een byte om gegevens te ontvangen:
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;
void setup () {}
pinnen correct ingesteld om input en output
pinMode (outputPin2, OUTPUT);
pinMode (outputPin3, OUTPUT);
pinMode (outputPin4, OUTPUT);
pinMode (outputPin5, OUTPUT);
pinMode (outputPin6, OUTPUT);
pinMode (outputPin7, OUTPUT);
pinMode (outputPin8, OUTPUT);
pinMode (outputPin9, OUTPUT);
pinMode (outputPin10, OUTPUT);
pinMode (outputPin11, OUTPUT);
pinMode (outputPin12, OUTPUT);
pinMode (outputPin13, OUTPUT);
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,");
instellen van de mijn (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("My1,");
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,My1,CN");
de voorgaande opdrachtregel kan ook als afzonderlijke opdrachten, worden verzonden door de heruitgave van de opdracht AT:
Serial.println("ATID3330");
Serial.println("ATMY1");
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 () {}
alle binnenkomende gegevens ophalen:
Als (Serial.available() > 1) {}
lezen van een bytewaarde
inByte = Serial.read();
Serial.Print(inByte);
de LED licht als een 1 is ontvangen
Als (inByte == 'a') {}
digitalWrite (outputPin2, laag);
}
Als (inByte == 'b') {}
digitalWrite (outputPin2, hoge);
}
Als (inByte == 'c') {}
digitalWrite (outputPin3, laag);
}
Als (inByte == had') {}
digitalWrite (outputPin3, hoge);
}
Als (inByte == 'e') {}
digitalWrite (outputPin4, laag);
}
Als (inByte == 'f') {}
digitalWrite (outputPin4, hoge);
}
Als (inByte == 'g') {}
digitalWrite (outputPin5, laag);
}
Als (inByte == 'h') {}
digitalWrite (outputPin5, hoge);
}
Als (inByte == 'i') {}
digitalWrite (outputPin6, laag);
}
Als (inByte == 'j') {}
digitalWrite (outputPin6, hoge);
}
Als (inByte == 'k') {}
digitalWrite (outputPin7, laag);
}
Als (inByte == 'l') {}
digitalWrite (outputPin7, hoge);
}
Als (inByte == ben ') {}
digitalWrite (outputPin8, laag);
}
Als (inByte == 'n') {}
digitalWrite (outputPin8, hoge);
}
Als (inByte == ' o ') {}
digitalWrite (outputPin9, laag);
}
Als (inByte == 'p') {}
digitalWrite (outputPin9, hoge);
}
Als (inByte == 'q') {}
digitalWrite (outputPin10, laag);
}
Als (inByte == 'r') {}
digitalWrite (outputPin10, hoge);
}
Als (inByte == de ') {}
digitalWrite (outputPin11, laag);
}
Als (inByte == 't') {}
digitalWrite (outputPin11, hoge);
}
Als (inByte == 'u') {}
digitalWrite (outputPin12, laag);
}
Als (inByte == 'v') {}
digitalWrite (outputPin12, hoge);
}
Als (inByte == 'w') {}
digitalWrite (outputPin13, laag);
}
Als (inByte == 'x') {}
digitalWrite (outputPin13, hoge);
}
}
}
VOID blinkLED (int targetPin, int numBlinks) {}
deze functie knippert de status LED licht zo vaak zoals gevraagd
for (int i = 0; i
digitalWrite (targetPin, hoge); Hiermee stelt u de LED op
delay(250); wacht een seconde
digitalWrite (targetPin, laag); de LED vertrekt
delay(250);
}
}
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;
}
6. 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".
7. 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-ontvanger.