Bearbetning kontroller R/C bil med XBee moduler (12 / 14 steg)
Steg 12: Arduino skiss
Förklaringen är inkluderad i skiss displayen som kommentar i fet stil.
Inkludera SoftwareSerial bibliotek
#include < SoftwareSerial.h >
Ange XBee-modul för att använda SoftwareSerial bibliotek och ange Arduino stiften för att användas som TX (10) och RX (9)
SoftwareSerial XBeeSerial = SoftwareSerial (10, 9);
/ / Ställa in Arduino pins som ansluten till L293D - Motor drivrutiner för vänster och högersväng
#define TURN_ENABLE_PIN 3 / / använda PWM för detta stift
#define LEFT_PIN 4
#define RIGHT_PIN 2
Ställa in Arduino stiften som ansluten till L293D - Motor drivrutiner för framåt och bakåt
#define DRIVE_ENABLE_PIN 11 / / använda PWM för detta stift
#define BACKWARD_PIN 8
#define FORWARD_PIN 12
Indatakommandon
#define BEGIN_COMMAND 0x7F / / decimal = 127, binära = 0111 1111
#define vidarebefordra 0x1 / / decimal = 1, binära = 0000 0001
#define bakåt 0x2 / / decimal = 2, binära = 0000 0010
#define lämnade 0x4 / / decimal = 4, binära = 0000 0100
#define rätt 0x8 / / decimal = 2, binära = 0000 1000
Ange kommandot variabel vara två byte array,
kommandot [0] = sväng vänster eller höger, och köra framåt eller bakåt
kommandot [1] = hastighet.
int befalla [2].
void setup() {
Inställd XBee SoftwareSerial överföringshastighet 9600 bps
XBeeSerial.begin(9600);
Tilldelar Arduino motors kontroll stift som produktion
pinMode (TURN_ENABLE_PIN, OUTPUT);
pinMode (LEFT_PIN, OUTPUT);
pinMode (RIGHT_PIN, OUTPUT);
pinMode (DRIVE_ENABLE_PIN, OUTPUT);
pinMode (BACKWARD_PIN, OUTPUT);
pinMode (FORWARD_PIN, OUTPUT);
}
void loop() {
XBee SoftwareSerial lyssnar på kommandon från bearbetning GUI,
/ / av ställa villkoret att se om det finns en data i bufferten som följetong
IF(XBeeSerial.available() > 0) {
och om readCommand() funktioner returnerar värdet mer än 0,
sedan executeCommand()
IF(readCommand() > 0) {
executeCommand();
}
}
}
Läs Command() metod,
returnera värdet 1,
om det finns börjar tre byte med 0x7F i följetong bufferten
eller returnera värdet 0, annars.
//
int readCommand() {
int b = XBeeSerial.read();
IF(b == BEGIN_COMMAND) {/ / BEGIN_COMMAND = 0x7F
kommandot [0] = readByte(); kommandot [0] är antingen 0x1, 0x2, 0x4 eller 0x8
kommandot [1] = readByte(); kommandot [1] är hastigheten varierar från 0 - 6
tillbaka 1.
} annat {
Return 0;
}
}
int readByte() {
medan (sant) {
IF(XBeeSerial.available() > 0) {
återvända XBeeSerial.read();
}
}
}
Översätta kommandon får från bearbetning GUI
och vända motorstyrning stiften på/av
void executeCommand() {
int c = kommando [0];
int hastighet = kommando [1].
Styra framåt & bakåt
DRIVE_ENABLE_PIN = 11
BACKWARD_PIN = 8
FORWARD_PIN = 12
digitalWrite (DRIVE_ENABLE_PIN, låg);
Jämföra (logiskt och) första byten i kommandot array (command[0]) med framåt (0x01)
om resultatet är sant, då inställd Motor kontroller stiften drivmotorn fram
om (c & framåt) {
digitalWrite (BACKWARD_PIN, låg);
digitalWrite (FORWARD_PIN, hög);
}
Jämföra (logiskt och) första byten i kommandot array (command[0]) med bakåt (0x02)
om resultatet är sant, då som Motor kontroller stiften att köra motor bakåt
//
om (c & bakåt) {
digitalWrite (FORWARD_PIN, låg);
digitalWrite (BACKWARD_PIN, hög);
}
Jämföra (logiskt och) första byten i kommandot array (command[0]) med
resultatet av logiska eller mellan framåt (0x01) och BACKWARD(0x02)
om resultatet är sant, då som hastigheten till den andra byten av kommandot array (command[1])
//
om (c & (fram | BAKÅT)) {
analogWrite (DRIVE_ENABLE_PIN, hastighet);
Kontroll vänster & höger sväng
TURN_ENABLE_PIN = 3
LEFT_PIN = 4
RIGHT_PIN = 2 digitalWrite (TURN_ENABLE_PIN, låg);
om (c & vänster) {
digitalWrite (RIGHT_PIN, låg);
digitalWrite (LEFT_PIN, hög);
}
om (c & r) {
digitalWrite (LEFT_PIN, låg);
digitalWrite (RIGHT_PIN, hög);
}
om (c & (vänster | HÖGER)) {
digitalWrite (TURN_ENABLE_PIN, hög);
}
}