Projet S5 Info / Mbed 2 deprecated Projet-xbee-mbed_fixe

Dependencies:   mbed

Fork of APP4 by S5info_H14

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers coordinateur.cpp Source File

coordinateur.cpp

00001 #include "coordinateur.hpp"
00002 
00003 Serial pc(USBTX, USBRX);
00004 
00005 Coordinateur::Coordinateur(PinName _tx, PinName _rx) :
00006     trame(_tx, _rx), xbee(_tx, _rx), etat(Start)
00007 {
00008     // Reset le xbee
00009     DigitalOut reset(p8);
00010     
00011     reset = 0;
00012     wait(0.4);
00013     reset = 1;
00014 }
00015 
00016 Coordinateur::~Coordinateur()
00017 {
00018     delete data;
00019 }
00020 
00021 void Coordinateur::setPanID(string _pan)
00022 {
00023     trame.sendATCommand("ID", _pan.c_str(), _pan.length()); // Set le PANID selon le fichier de config
00024     trame.sendATCommand("WR", 0, 0);    // Écrit la valeur du PANID en mémoire
00025     trame.sendATCommand("AC", 0, 0);    // Applique les changements effectués
00026 }
00027 
00028 void Coordinateur::getBytes()
00029 {
00030     if (xbee.readable())
00031     {
00032         etatTrame(xbee.getc()); // Envoie les char recu en sans-fil dans la machine à état
00033     }
00034 }
00035 
00036 // Machine à état qui reconstruit la trame
00037 void Coordinateur::etatTrame(char c)
00038 {
00039     switch (etat)
00040     {
00041         // Trouve les delimiter pour partir la trame
00042         case Start:
00043             if (c == 0x7E)
00044                 etat = Length;
00045             break;
00046         
00047         // Prend les MSB de length
00048         case Length:
00049             length[0] = c;
00050             etat = Length2;
00051             break;
00052         
00053         // Prend les LSB de length et calcul le length
00054         case Length2:
00055             length[1] = c;
00056             length_int = (length[0] << 8) | length[1];
00057             if (length_int == 16)
00058                 etat = Data;
00059             else
00060                 etat = Start;
00061             counter = 0;
00062             data = new char[length_int];
00063             break;
00064         
00065         // Prend les datas
00066         case Data:
00067             if (c == 0x7E)
00068                 etat = Length;
00069             else if (counter < length_int)
00070             {
00071                 data[counter] = c;
00072                 counter++;
00073             }
00074             else
00075             {
00076                 //trame.checkTrame(data, c, length_int);
00077                 pc.putc(0xFF);      // delimiter pour l'application sur l'ordinateur
00078                 wait(0.1);          // 
00079                 pc.putc(data[12]);  // 
00080                 wait(0.1);          // 
00081                 pc.putc(data[13]);  // envoie sur le port usb des 4 char déterminant le code du mouvement à exécuter
00082                 wait(0.1);          // 
00083                 pc.putc(data[14]);  // 
00084                 wait(0.1);          // 
00085                 pc.putc(data[15]);  // 
00086                 etat = Start;
00087             }
00088             break;
00089     }
00090 }