Stap 4: Instellen en programmeren van de Arduino en XBee ontvangen
Het programma van de ontvangende XBee met behulp van X-CTU zoals je deed de verzendende XBee maar met de volgende instellingen:
+++
ZIJN
ATMY5678
ATDL1234
ATDH0
ATID0
ATWR
Het programma dat ik heb gewijzigd van de zeer nuttig Arduino kookboek is hieronder gegeven. Aangezien ik ben nog steeds bezig het allemaal uit zal laat ik als oefening voor de geinteresseerde gebruikers aan verdeling de manier waarop die het programma uit de belangrijke gegevens die worden verzonden in het kader van de API trekt. Het spreekt vanzelf dat zonder Michael Margolis vaststelling van het kader voor het verkrijgen van de ontvangen gegevens ik niet zou hebben bedacht dat uit een oneindige hoeveelheid tijd gegeven. Ik ben vrij zeker dat er details aan de code die kan worden uitgesloten, maar ik heb niet geprobeerd het dunne naar beneden nog en omdat het werkt ik wegga deze zo is voor nu. Dit programma overbrengen naar je Arduino en vervolgens overgaan tot de laatste stap en overwegen wat u kunt toevoegen aan het project.
/*********
*
* ER_RemoteA (Engineering & Robotics Remote optie)
*
* XBee standalone borstband stuurt analoge joystick lezingen naar een Arduino
* aangesloten ontvanger XBee. Analoge waarden worden gelezen uit een paar
* Joysticks een motor voor links en rechts om in te rijden "tank mode".
*
* Een Adafruit motorshield is aangesloten op de Arduino UNO om motor richtingscontrole.
* De motoren gebruikt zijn VEX motoren.
*
* XBee communicatie vindt plaats via digitale pennen 14 & 15 (A0 en A1) via seriële-software
* om laat TX en RX gratis voor seriële communicatie en foutopsporing. There's a lot
* voor foutopsporing lezen outs die kunnen worden uitgesloten van de code. Subroutines kunnen ook worden gebruikt om
* schoonmaken van de code.
*
* Aangepast van de Arduino kookboek: sectie 14.4
* Datum: 15 augustus 2013
* Auteur: Mylo Hildebrand
*
***********/
#include < AFMotor.h >
#include < SoftwareSerial.h >
SoftwareSerial xbee(14,15); RX, TX
AF_DCMotor leftmotor(1);
AF_DCMotor rightmotor(2);
VOID Setup {}
Serial.begin(9600);
Stel de gegevenssnelheid voor de SoftwareSerial-poort
XBee.begin(9600);
configureRadio(); Controleer de resultaatwaarde als u foutafhandeling
}
Booleaanse configureRadio() {}
Zet de radio in de command stand:
while(XBee.Read() > = 0);
XBee.Print("+++");
delay(100);
Ok_response koord = "OK\r"; de reactie die wij verwachten.
Lees de tekst van het antwoord in de variabele van de reactie
Reactie koord = String("");
terwijl (response.length() < ok_response.length()) {}
Als (xbee.available() > 0) {}
reactie += (char) xbee.read();
}
}
Als we het juiste antwoord got, het configureren van de radio en terug te keren waar.
Als (response.equals(ok_response)) {}
XBee.Print("ATAP1\r"); API-modus
delay(100);
XBee.Print("ATCN\r");
return true;
}
else {}
return false; Dit geeft aan dat het antwoord onjuist was.
}
}
void loop {}
Als (xbee.available() > = 14) {/ / Wait totdat er een mondvol van gegevens
Als (xbee.read() == 0x7E) {/ / Start scheidingsteken van een frame
Overslaan van de bytes in het frame van de API dat we niet schelen
for (int i = 0; ik < 10; i ++) {}
XBee.Read();
}
De volgende twee bytes worden de bytes van het boven- en onderlimiet van de sensorgegevens
int leftHigh = xbee.read();
Serial.Print ("HL:");
Serial.println(leftHigh);
int leftLow = xbee.read();
Serial.Print ("LL:");
Serial.println(leftLow);
int leftValue = leftLow + (leftHigh * 256);
Serial.Print ("AL:");
Serial.println(leftValue);
int rightHigh = xbee.read();
Serial.Print ("HR:");
Serial.println(rightHigh);
int rightLow = xbee.read();
Serial.Print ("LR:");
Serial.println(rightLow);
int rightValue = rightLow + (rightHigh * 256);
Serial.Print ("AR:");
Serial.println(rightValue);
Functies met behulp van analoge Joysticks rijden. Links voor links en recht voor de rechterkant.
int leftjoystick = kaart (leftValue, 0, 1023,-250, 250);
if(leftjoystick > 50) / / print stick waarden als een van beide is TRUE
{
leftmotor.setSpeed(leftjoystick);
leftmotor.run(BACKWARD);
}
else if (leftjoystick < -50) / / print stick waarden als een van beide is TRUE
{
leftmotor.setSpeed(abs(leftjoystick));
leftmotor.run(forward);
}
anders
{
leftmotor.setSpeed(0);
}
int rightjoystick = kaart (rightValue, 0, 1023,-250, 250);
Als (rightjoystick > 50) / / print stick waarden als een van beide is TRUE
{
rightmotor.setSpeed(rightjoystick);
rightmotor.run(forward);
}
else if (rightjoystick < -50) / / print stick waarden als een van beide is TRUE
{
rightmotor.setSpeed(abs(rightjoystick));
rightmotor.run(BACKWARD);
}
anders
{
rightmotor.setSpeed(0);
}
delay(50);
}
}
}