Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of APP4 by
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 }
Generated on Fri Jul 15 2022 02:34:23 by
1.7.2
