Étape 5: Charger le logiciel
Extraire le contenu de cette archive dans la carte SD vide (ancienne carte SD plus petite que 2 Go est préférable) et insérez-la dans la fente SD de Pleo. N’allumez Pleo encore.
Vous devez également charger le logiciel Arduino. Pour cela, vous devrez télécharger le programme appelé Arduino ici : http://arduino.cc/en/Main/Software. Installez et exécutez le programme Arduino et exécutez-le. Dans l’outil de configuration -> Conseil et outils Port menus Sélectionnez le type d’Arduino et port série, à qu'il est connecté. Maintenant copypaste ce code dans l’Arduino croquis fenêtre et l’écrire dans l’Arduino mémoire (fichier -> charger sur i/o Board).
#include#include
#undef int
#include
#define BAUD_RATE 9600 / / 19200 pour la programmation, 115200 pour travailler avec Pleo, 9600 pour transmission via xbee
#define LED_PIN 13 / / la goupille de la LED est attachée à
#define GROUND_PIN PC2
#define POWER_PIN PC3
#define POWER_ON_LED_PIN 13
#define RECEIVE_LED_PIN 12
#define DELTA 20 / / position de la manette de jeu tolérance
#define ACTION « motion jeu roar » / / playes sur boutons anc C Z enfoncée
#define J_TOP_LEFT « motion jeu com_walk_fl_v1 »
#define J_TOP « motion jeu com_walk_fs_v1 »
#define J_TOP_RIGHT « motion jeu com_walk_fr_v1 »
#define J_LEFT « motion jeu hun_sniff_l » / /???
#define J_RIGHT « motion jeu hun_sniff_r » / /???
#define J_BOTTOM_LEFT « motion jeu com_walk_bl_v1 »
#define J_BOTTOM « motion jeu hun_exit » / /???
#define J_BOTTOM_RIGHT « motion jeu com_walk_br_v1 »
#define CMD_DISABLE_LOG « journal désactiver tous les »
#define MIN_X 316
#define MAX_X 730
#define MIN_Y 380
#define MAX_Y 630
uint8_t buf [6] ; tampon global pour le stockage des données de nunchuck, bad, bad...
installation de tout
void setup()
{
pinMode (POWER_ON_LED_PIN, sortie) ;
pinMode (RECEIVE_LED_PIN, sortie) ;
digitalWrite (POWER_ON_LED_PIN, élevé) ;
retard (100) ; Attendez que des choses à se stabiliser
Serial.Begin (BAUD_RATE) ; configurer la sortie série
wait_for_pleo() ; Attendez que Pleo de démarrer
Wire.Begin() ; Rejoignez les bus i2c avec adresse 0 x 52
power_on (PC3, PC2) ; PowerOn le nunchuck
init_nunchuck() ; Envoyer l’initialisation du handshake
}
attend pleo de démarrer. Il est important que le coordonnateur XBee connecté à arduino est activé premier
puis le nœud XBee connecté à Pleo doit être activé.
public static void wait_for_pleo()
{
digitalWrite (RECEIVE_LED_PIN, élevé) ;
int wait = 1 ;
int count = 0 ;
int lire = 0 ;
tandis que (attente)
{
Si (Serial.available())
{
lire = Serial.read() ;
Si (lire == ' >')
{
attendre = 0 ;
}
}
d’autre
{
retard (500) ;
Serial.Print ("") ;
}
}
commande (CMD_DISABLE_LOG, 500) ; Disable Pleo logging autrement série se perdent et tout s’arrête de fonctionner en une minute
digitalWrite (RECEIVE_LED_PIN, basse) ;
}
void delay_read (int sommeil)
{
int lire ;
tandis que (Serial.available())
{
lire = Serial.read() ;
}
retard (veille) ;
}
tour à tour à la puissance pour le nunchuck
public static power_on Sub (pwr octet, octet gnd)
{
DDRC | = _BV(pwr) | _BV(GND) ; faire des sorties
PORTC & = ~ _BV(gnd) ;
PORTC | = _BV(pwr) ;
Delay(100) ; Attendez que des choses à se stabiliser
}
initialiser le nunchuck
Sub init_nunchuck()
{
Wire.beginTransmission (0 x 52) ; transmettre à un périphérique 0 x 52
Wire.Send (0 x 40) ; envoie l’adresse mémoire
Wire.Send (0 x 00) ; envoie l’adresse mémoire
Wire.endTransmission() ; arrêter la transmission
}
envoi de zéro à nunchuck rend à envoyer ses données vitales actuelles retour
Sub send_zero()
{
Wire.beginTransmission (0 x 52) ; transmettre à un périphérique 0 x 52
Wire.Send (0 x 00) ; envoie un octet
Wire.endTransmission() ; arrêter la transmission
}
void loop()
{
digitalWrite (RECEIVE_LED_PIN, basse) ;
Serial.Print ("") ; Je ne sais pas pourquoi sans cette ligne la boucle ne fonctionne tout simplement pas.
cnt int = 0 ; nombre d’octets lus à partir de l’entrée
Wire.requestFrom (0 x 52, 6) ; demande 6 octets de nunchuck
tandis que (Wire.available())
{
buf [cnt ++] = décrypter (Wire.receive()) ; recevoir des octets en tant qu’entier
}
Si (cnt > = 5)
{
process_buffer() ; fait le travail
}
send_zero() ; Envoyer la demande pour les octets suivants
digitalWrite (RECEIVE_LED_PIN, élevé) ;
}
tête de postes selon la position de la manette de jeu
void position_head (int x, int y)
{
int nh = ((x - 320) * 13 / 41) - 65 ;
NH = nh nh = nh > 65 ? 65: nh ;
int nv = ((380 - y) * 15 / 25) + 75 ;
NV = nv nv = nv > 75 ? 75: nv ;
Serial.Print ("joint déplacer 11") ;
Serial.Print (nh) ;
Serial.Print ("") ;
Serial.Print ("joint déplacer 12") ;
Serial.Print (nv) ;
Serial.Print ("") ;
delay_read (1000) ;
}
queue de postes selon la position de la manette de jeu
void position_tail (int x, int y)
{
int nh = ((x - 320) * 18 / 41) - 90 ;
NH = nh nh = nh > 90 ? 90: nh ;
int nv = ((380 - y) * 18 / 25) + 90 ;
NV = nv nv = nv > 90 ? 90: nv ;
Serial.Print ("joint déplacer 9") ;
Serial.Print (nh) ;
Serial.Print ("") ;
Serial.Print ("joint déplacer 10") ;
Serial.Print (nv) ;
Serial.Print ("") ;
delay_read (1000) ;
}
annuler la commande (la cmd de char [], int sommeil)
{
Serial.Print (cmd) ;
Serial.Print ("") ;
delay_read (veille) ;
}
parses retournent de nunchuck (6 octets)
Sub process_buffer()
{
int jx = buf [0] ;
int jy = buf [1] ;
int ax = buf [2] > 2) & 0 x 03) ;
ay int = buf [3] > 4) & 0 x 03) ;
int az = buf [4] > 6) & 0 x 03) ;
int bz = buf [5] & 1 ;
int bc = (buf [5] >> 1) & 1 ;
Si (vérifier (jx, jy, 53, 205))
{
commande (J_TOP_LEFT, 2000) ;
}
ElseIf (vérifier (jx, jy, 123, 226))
{
commande (J_TOP, 2000) ;
}
ElseIf (vérifier (jx, jy, 202, 202))
{
commande (J_TOP_RIGHT, 2000) ;
}
ElseIf (vérifier (jx, jy, 25, 127))
{
commande (J_LEFT, 2000) ;
}
ElseIf (vérifier (jx, jy, 128, 132))
{
Si ((bz == 1) & & (bc == 1))
{
position_head (ax, ay) ;
}
ElseIf ((bz == 0) & & (bc == 1))
{
position_tail (ax, ay) ;
}
ElseIf ((bz == 0) & & (bc == 0))
{
commande (ACTION, 4000) ;
}
}
ElseIf (vérifier (jx, jy, 226, 130))
{
commande (J_RIGHT, 2000) ;
}
ElseIf (vérifier (jx, jy, 54, 59))
{
commande (J_BOTTOM_LEFT, 2000) ;
}
ElseIf (vérifier (jx, jy, 126, 30))
{
commande (J_BOTTOM, 2000) ;
}
ElseIf (vérifier (jx, jy, 200, 57))
{
commande (J_BOTTOM_RIGHT, 2000) ;
}
d’autre
{
print_data (jx, jy, ax, ay, az, bz, c.-b.) ; uniquement à des fins de débogage, il laisse ici
}
}
vérifie si la position de la manette de jeu est dans la position donnée avec une tolérance DELTA
vérification d’int (int sx, sy int, int tx, ty int) {}
retour (abs (sx - tx)}
sortie de débogage des données du nunchuck
void print_data (int jx, int jy, ax int, int Ayé, int az, int bz, int c.-b.)
{
Serial.Print (jx, DEC) ;
Serial.Print ("") ;
Serial.Print (jy, DEC) ;
Serial.Print ("") ;
Serial.Print (ax, DEC) ;
Serial.Print ("") ;
Serial.Print (ay, DEC) ;
Serial.Print ("") ;
Serial.Print (az, DEC) ;
Serial.Print ("") ;
Serial.Print (c.-b., DEC) ;
Serial.Print ("") ;
Serial.Print (bz, DEC) ;
Serial.Print ("") ;
Serial.Print ("") ;
}
déchiffre les données nunchuck, célèbre « formule », je n’ai pas trouvé pourquoi ça fonctionne
déchiffrer les char (char x)
{
retour (x ^ 0 x 17) + 0 x 17 ;
}
Notez les tas de retards dans le programme. Pleo ne commenter que la commande est exécutée. Aussi une fois que la commande est envoyée, vous ne peut pas abandonner il. Et, comme j’ai mentionné auparavant, servos de Pleo sont vraiment lents éviter une surchauffe. Tout cela signifie qu’il y a un délai entre le nunchuck déménagement et déplacement Pleo.
Ce code fonctionne avec d’autres robots en réécrivant les méthodes position_head et position_tail la traduction de commandes spécifiques à votre robot, vous pouvez mod.
C’est tout, les gens, vous avez votre propre Pleo télécommandé. Profitez !