Étape 12 : Arduino Sketch
L’explication est incluse dans l’affichage de croquis comme le commentaire en caractères gras.
Inclure la bibliothèque SoftwareSerial
#include < SoftwareSerial.h >
Définir le module XBee pour utiliser la bibliothèque SoftwareSerial et définissez les broches de l’Arduino pour être utilisé comme TX (10) et RX (9)
SoftwareSerial XBeeSerial = SoftwareSerial (10, 9) ;
/ / Set les épingles Arduino connecté à L293D - moteur pilotes pour gauche et tourner à droite
#define TURN_ENABLE_PIN 3 / / utiliser PWM pour cette broche
#define LEFT_PIN 4
#define RIGHT_PIN 2
Définir les broches de l’Arduino connecté à L293D - chauffeurs pour avant et arrière
#define DRIVE_ENABLE_PIN 11 / / utiliser PWM pour cette broche
#define BACKWARD_PIN 8
#define FORWARD_PIN 12
D’entrée de commandes
#define BEGIN_COMMAND 0x7F / / décimal = 127, binaire = 0111 1111
#define avant 0 x 1 / / décimal = 1, binaire = 0000 0001
#define BACKWARD 0 x 2 / / décimal = 2, binaire = 0000 0010
#define gauche 0 x 4 / / décimal = 4, binaire = 0000 0100
#define droite 0 x 8 / / décimal = 2, binaire = 0000 1000
La valeur de variable de commande soit tableau de deux octets,
commande [0] = tourner à gauche ou à droite et conduire vers l’avant ou vers l’arrière
la commande [1] = vitesse.
commande int [2] ;
void setup() {}
La valeur XBee SoftwareSerial bauds 9600 bps
XBeeSerial.begin(9600) ;
Assigne le Arduino moteurs contrôle épingles comme sortie
pinMode (TURN_ENABLE_PIN, sortie) ;
pinMode (LEFT_PIN, sortie) ;
pinMode (RIGHT_PIN, sortie) ;
pinMode (DRIVE_ENABLE_PIN, sortie) ;
pinMode (BACKWARD_PIN, sortie) ;
pinMode (FORWARD_PIN, sortie) ;
}
void loop() {}
XBee SoftwareSerial à l’écoute pour les commandes de traitement GUI,
/ / par définir la condition pour voir s’il y a une données dans le tampon de série
if(XBeeSerial.available() > 0) {}
/ / et si les fonctions de readCommand() retournent la valeur de plus de 0,
puis executeCommand()
if(readCommand() > 0) {}
executeCommand() ;
}
}
}
Méthode de lecture de Command(),
retourne la valeur entière de 1,
s’il y a trois octets commencent par 0x7F dans le tampon de série
ou retourner la valeur entière de 0, dans le cas contraire.
//
int readCommand() {}
int b = XBeeSerial.read() ;
if(b == BEGIN_COMMAND) {/ / BEGIN_COMMAND = 0x7F
commande [0] = readByte() ; commande [0] est 0 x 1, 0 x 2, 0 x 4 ou 0 x 8
la commande [1] = readByte() ; la commande [1] est la vitesse varie de 0 - 6
Return 1 ;
} else {}
return 0 ;
}
}
int readByte() {}
tout en (vrai) {}
if(XBeeSerial.available() > 0) {}
Return XBeeSerial.read() ;
}
}
}
Traduire les commandes recevoir de traitement GUI
et tourner les broches de la commande du moteur ON/OFF
void executeCommand() {}
int c = commande [0] ;
int vitesse = commande [1] ;
Contrôler les vers l’avant et vers l’arrière
DRIVE_ENABLE_PIN = 11
BACKWARD_PIN = 8
FORWARD_PIN = 12
digitalWrite (DRIVE_ENABLE_PIN, basse) ;
Comparer (logique et) premier octet du tableau de commande (command[0]) avec FORWARD (0 x 01)
Si le résultat est TRUE, puis affectez les tiges de commandes moteur moteur d’entraînement vers l’avant
Si {(c & avant)
digitalWrite (BACKWARD_PIN, basse) ;
digitalWrite (FORWARD_PIN, élevé) ;
}
Comparer (logique et) premier octet du tableau de commande (command[0]) avec BACKWARD (0 x 02)
Si le résultat est TRUE, puis définissez les broches de contrôles de moteur pour moteur d’entraînement vers l’arrière
//
Si {(c & en arrière)
digitalWrite (FORWARD_PIN, basse) ;
digitalWrite (BACKWARD_PIN, élevé) ;
}
Comparer (logique et) premier octet du tableau de commande (command[0]) avec
le résultat de la logique ou entre la marche avant (0 x 01) et BACKWARD(0x02)
Si le résultat est TRUE, puis régler la vitesse pour le deuxième octet du tableau de commande (command[1])
//
Si (c & (avant | VERS L’ARRIÈRE)) {}
analogWrite (DRIVE_ENABLE_PIN, vitesse) ;
Tourner à gauche contrôle & droit
TURN_ENABLE_PIN = 3
LEFT_PIN = 4
RIGHT_PIN = 2 digitalWrite (TURN_ENABLE_PIN, basse) ;
Si {(c & gauche)
digitalWrite (RIGHT_PIN, basse) ;
digitalWrite (LEFT_PIN, élevé) ;
}
Si {(c & droite)
digitalWrite (LEFT_PIN, basse) ;
digitalWrite (RIGHT_PIN, élevé) ;
}
Si (c & (gauche | DROIT)) {}
digitalWrite (TURN_ENABLE_PIN, élevé) ;
}
}