Stap 12: Arduino Sketch
De verklaring is opgenomen in de weergave schets als de opmerking in vet lettertype.
SoftwareSerial bibliotheek
#include < SoftwareSerial.h >
XBee module te gebruiken SoftwareSerial bibliotheek ingesteld en de pinnen van de Arduino te worden gebruikt als (10) TX en RX (9)
SoftwareSerial XBeeSerial = SoftwareSerial (10, 9);
/ / Set de Arduino pinnen die met L293D - Motor Drivers verbonden voor links en rechts draaien
#define TURN_ENABLE_PIN 3 / / PWM gebruiken voor deze pin
#define LEFT_PIN 4
#define RIGHT_PIN 2
Instellen van de Arduino pinnen die met L293D - Motor Drivers voor voorwaarts en achterwaarts verbonden
#define DRIVE_ENABLE_PIN 11 / / PWM gebruiken voor deze pin
#define BACKWARD_PIN 8
#define FORWARD_PIN 12
Invoer-opdrachten
#define BEGIN_COMMAND 0x7F / / decimaal = 127, binaire = 0111 1111
#define toekomen 0x1 / / decimaal = 1, binair = 0000 0001
#define achterwaarts 0x2 / / decimaal = 2, binaire = 0000 0010
#define links 0x4 / / decimaal = 4, binaire = 0000 0100
#define rechts 0x8 / / decimaal = 2, binaire = 0000 1000
Variabele opdracht matrix met twee bytes, instellen
opdracht [0] = beurt links of rechts, en vooruit of achteruit rijden
opdracht [1] = snelheid.
int opdracht [2];
VOID Setup {}
XBee SoftwareSerial baud-rate ingesteld op 9600 bps
XBeeSerial.begin(9600);
Arduino motoren controle pinnen wordt toegewezen als de uitvoer
pinMode (TURN_ENABLE_PIN, uitvoer);
pinMode (LEFT_PIN, uitvoer);
pinMode (RIGHT_PIN, uitvoer);
pinMode (DRIVE_ENABLE_PIN, uitvoer);
pinMode (BACKWARD_PIN, uitvoer);
pinMode (FORWARD_PIN, uitvoer);
}
void loop {}
XBee SoftwareSerial luisteren naar commando's van verwerking GUI,
/ / set door de voorwaarde om te zien of er een data in de seriële buffer
if(XBeeSerial.available() > 0) {}
/ / en als de readCommand()-functies weer meer waarde dan 0,
dan executeCommand()
if(readCommand() > 0) {}
executeCommand();
}
}
}
Read Command()-methode,
return integer-waarde van 1,
Als er beginnen drie bytes met 0x7F in de seriële buffer
of return integerwaarde 0, anders.
//
int readCommand() {}
int b = XBeeSerial.read();
if(b == BEGIN_COMMAND) {/ / BEGIN_COMMAND = 0x7F
opdracht [0] = readByte(); opdracht [0] is 0x1, 0x2, 0x4 of 0x8
opdracht [1] = readByte(); opdracht [1] is de snelheid varieert van 0 - 6
return 1;
} else {}
keren 0;
}
}
int readByte() {}
terwijl (waar) {}
if(XBeeSerial.available() > 0) {}
Return XBeeSerial.read();
}
}
}
Vertalen de opdrachten ontvangen verwerking GUI
en draai de motorische controle pinnen ON/OFF
ongeldig executeCommand() {}
int c = commando [0];
int speed = commando [1];
Control vooruit & achteruit
DRIVE_ENABLE_PIN = 11
BACKWARD_PIN = 8
FORWARD_PIN = 12
digitalWrite (DRIVE_ENABLE_PIN, laag);
Vergelijken (logisch en) eerste byte van de opdracht-matrix (command[0]) met FORWARD (0x01)
Als het resultaat TRUE is, wordt de Motor besturingselementen pinnen ingesteld op aandrijfmotor vooruit
Als (c & vooruit) {}
digitalWrite (BACKWARD_PIN, laag);
digitalWrite (FORWARD_PIN, hoge);
}
Vergelijken (logisch en) eerste byte van de opdracht-matrix (command[0]) met achterwaarts (0x02)
Als het resultaat TRUE is, stel de pinnen van de besturingselementen Motor rijden motor achteruit
//
Als (c & achteruit) {}
digitalWrite (FORWARD_PIN, laag);
digitalWrite (BACKWARD_PIN, hoge);
}
Vergelijken (logisch en) eerste byte van de opdracht matrix (command[0]) met
het resultaat van logisch of tussen FORWARD (0x01) en BACKWARD(0x02)
Als het resultaat TRUE is, wordt de snelheid ingesteld op de tweede byte van de opdracht matrix (command[1])
//
Als (c & (voorwaarts | ACHTERWAARTS)) {}
analogWrite (DRIVE_ENABLE_PIN, snelheid);
Controle links & rechts draaien
TURN_ENABLE_PIN = 3
LEFT_PIN = 4
RIGHT_PIN = 2 digitalWrite (TURN_ENABLE_PIN, laag);
Als (c & links) {}
digitalWrite (RIGHT_PIN, laag);
digitalWrite (LEFT_PIN, hoge);
}
Als (c & juiste) {}
digitalWrite (LEFT_PIN, laag);
digitalWrite (RIGHT_PIN, hoge);
}
Als (c & (links | RECHTS)) {}
digitalWrite (TURN_ENABLE_PIN, hoge);
}
}