ajout module_mouvement

Dependencies:   mbed xbee_lib ADXL345_I2C IMUfilter ITG3200 Motor RangeFinder Servo mbos PID

Fork of Labo_TRSE_Drone by HERBERT Nicolas

Committer:
IngesupMbed01
Date:
Wed Apr 17 15:52:51 2013 +0000
Revision:
33:ec7d635636bf
Parent:
32:119e060b45b3
Module communication modifi? et variables globales d?plac?es.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IngesupMbed01 18:0bfd3ad421e5 1 /* Copyright (c) 2012 - 2013 AUTHEUR
IngesupMbed01 18:0bfd3ad421e5 2 *
IngesupMbed01 18:0bfd3ad421e5 3 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
IngesupMbed01 18:0bfd3ad421e5 4 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
IngesupMbed01 18:0bfd3ad421e5 5 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
IngesupMbed01 18:0bfd3ad421e5 6 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
IngesupMbed01 18:0bfd3ad421e5 7 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
IngesupMbed01 18:0bfd3ad421e5 8 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
IngesupMbed01 18:0bfd3ad421e5 9 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
IngesupMbed01 18:0bfd3ad421e5 10 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
IngesupMbed01 18:0bfd3ad421e5 11 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
IngesupMbed01 18:0bfd3ad421e5 12 */
IngesupMbed01 18:0bfd3ad421e5 13
IngesupMbed01 18:0bfd3ad421e5 14 /*
IngesupMbed01 18:0bfd3ad421e5 15 * Description : Cette classe contient les fonctionnalités du module communication.
IngesupMbed01 18:0bfd3ad421e5 16 Le module communication gère la communication entre les modules présents sur le drône et le PC.
IngesupMbed01 18:0bfd3ad421e5 17 * Input
IngesupMbed01 18:0bfd3ad421e5 18 * Output
IngesupMbed01 18:0bfd3ad421e5 19 */
IngesupMbed01 18:0bfd3ad421e5 20
IngesupMbed01 18:0bfd3ad421e5 21 #include "Module_Communication.h"
IngesupMbed01 18:0bfd3ad421e5 22
IngesupMbed01 18:0bfd3ad421e5 23 // Pointeur sur la classe systeme d'exploitation instancié dans le main
IngesupMbed01 18:0bfd3ad421e5 24 extern mbos *os;
IngesupMbed01 33:ec7d635636bf 25 extern unsigned int COMMANDE_TRAJECTOIRE;
IngesupMbed01 33:ec7d635636bf 26 extern bool STOP;
IngesupMbed01 33:ec7d635636bf 27 extern bool EN_MOUVEMENT;
IngesupMbed01 33:ec7d635636bf 28 extern position COORDONNEE_DRONE;
IngesupMbed01 18:0bfd3ad421e5 29
IngesupMbed01 18:0bfd3ad421e5 30
IngesupMbed01 18:0bfd3ad421e5 31 /* CONSRTRUCTEUR(S) */
IngesupMbed01 18:0bfd3ad421e5 32 C_ModuleCommunication::C_ModuleCommunication()
IngesupMbed01 18:0bfd3ad421e5 33 {
IngesupMbed01 18:0bfd3ad421e5 34 m_xbee = new xbee(p9, p10, p11);
IngesupMbed01 24:3462a304f9a0 35 m_trameRxBuffer = C_FrameBuffer();
IngesupMbed01 24:3462a304f9a0 36 m_trameTxBuffer = C_FrameBuffer();
IngesupMbed01 32:119e060b45b3 37 m_charRxBuffer = new char[17];
IngesupMbed01 32:119e060b45b3 38 m_charTxBuffer = new char[17];
IngesupMbed01 18:0bfd3ad421e5 39 }
IngesupMbed01 18:0bfd3ad421e5 40
IngesupMbed01 18:0bfd3ad421e5 41 /* DESTRUCTEUR */
IngesupMbed01 18:0bfd3ad421e5 42 C_ModuleCommunication::~C_ModuleCommunication()
IngesupMbed01 18:0bfd3ad421e5 43 {
IngesupMbed01 24:3462a304f9a0 44 delete [] m_charRxBuffer;
IngesupMbed01 24:3462a304f9a0 45 delete [] m_charTxBuffer;
IngesupMbed01 24:3462a304f9a0 46 delete m_xbee;
IngesupMbed01 18:0bfd3ad421e5 47 }
IngesupMbed01 18:0bfd3ad421e5 48
IngesupMbed01 18:0bfd3ad421e5 49 /* Point d'entrée de la tache Module Video */
IngesupMbed01 24:3462a304f9a0 50 void C_ModuleCommunication::moduleCommunicationTask(void)
IngesupMbed01 18:0bfd3ad421e5 51 {
IngesupMbed01 18:0bfd3ad421e5 52 while(1){
IngesupMbed01 18:0bfd3ad421e5 53 // Code
IngesupMbed01 18:0bfd3ad421e5 54 }
IngesupMbed01 18:0bfd3ad421e5 55 }
IngesupMbed01 18:0bfd3ad421e5 56
IngesupMbed01 24:3462a304f9a0 57 void C_ModuleCommunication::envoiDeTrame(void)
IngesupMbed01 24:3462a304f9a0 58 {
IngesupMbed01 32:119e060b45b3 59 frame newFrame = m_trameTxBuffer.frameBuffer();
IngesupMbed01 32:119e060b45b3 60 m_charTxBuffer[0] = 0x02;
IngesupMbed01 32:119e060b45b3 61 m_charTxBuffer[1] = newFrame.systemIdentifier;
IngesupMbed01 32:119e060b45b3 62 m_charTxBuffer[2] = newFrame.moduleIdentifier;
IngesupMbed01 32:119e060b45b3 63 m_charTxBuffer[3] = newFrame.messageIdentifier;
IngesupMbed01 32:119e060b45b3 64 m_charTxBuffer[16] = 0x03;
IngesupMbed01 24:3462a304f9a0 65
IngesupMbed01 32:119e060b45b3 66 for(int i = 0; i < 12; i++) {
IngesupMbed01 32:119e060b45b3 67 m_charTxBuffer[i+4] = newFrame.data[i];
IngesupMbed01 24:3462a304f9a0 68 }
IngesupMbed01 24:3462a304f9a0 69
IngesupMbed01 24:3462a304f9a0 70 m_xbee->SendData(m_charTxBuffer);
IngesupMbed01 24:3462a304f9a0 71 }
IngesupMbed01 24:3462a304f9a0 72
IngesupMbed01 24:3462a304f9a0 73 void C_ModuleCommunication::receptionDeTrame(void)
IngesupMbed01 24:3462a304f9a0 74 {
IngesupMbed01 31:a0800d3da787 75 Serial pc(USBTX, USBRX);
IngesupMbed01 24:3462a304f9a0 76 m_xbee->RecieveData(m_charRxBuffer, 0);
IngesupMbed01 31:a0800d3da787 77 pc.printf("You said:%s \n",m_charRxBuffer);
IngesupMbed01 32:119e060b45b3 78
IngesupMbed01 32:119e060b45b3 79
IngesupMbed01 24:3462a304f9a0 80 frame newFrame;
IngesupMbed01 32:119e060b45b3 81 newFrame.systemIdentifier = m_charRxBuffer[1];
IngesupMbed01 32:119e060b45b3 82 newFrame.moduleIdentifier = m_charRxBuffer[2];
IngesupMbed01 32:119e060b45b3 83 newFrame.messageIdentifier = m_charRxBuffer[3];
IngesupMbed01 24:3462a304f9a0 84
IngesupMbed01 32:119e060b45b3 85 for(int i = 0; i < 12; i++) {
IngesupMbed01 32:119e060b45b3 86 newFrame.data[i] = m_charRxBuffer[i+4];
IngesupMbed01 24:3462a304f9a0 87 }
IngesupMbed01 24:3462a304f9a0 88
IngesupMbed01 32:119e060b45b3 89 m_trameRxBuffer.frameBuffer(newFrame);
IngesupMbed01 28:8b5ccd2f837e 90 }
IngesupMbed01 28:8b5ccd2f837e 91
IngesupMbed01 28:8b5ccd2f837e 92 void C_ModuleCommunication::traitementTrame(void)
IngesupMbed01 28:8b5ccd2f837e 93 {
IngesupMbed01 28:8b5ccd2f837e 94 if(m_trameRxBuffer.numberMessage() <= 0) return;
IngesupMbed01 28:8b5ccd2f837e 95
IngesupMbed01 28:8b5ccd2f837e 96 frame newFrame = m_trameRxBuffer.frameBuffer();
IngesupMbed01 28:8b5ccd2f837e 97
IngesupMbed01 32:119e060b45b3 98 switch(newFrame.moduleIdentifier) {
IngesupMbed01 33:ec7d635636bf 99 case 0x31 : consigneModuleTrajectoire(newFrame);
IngesupMbed01 28:8b5ccd2f837e 100 break;
IngesupMbed01 33:ec7d635636bf 101 case 0x32 : consigneModuleVideo(newFrame);
IngesupMbed01 28:8b5ccd2f837e 102 break;
IngesupMbed01 28:8b5ccd2f837e 103
IngesupMbed01 33:ec7d635636bf 104 default : creerTrameSpeciale(0x99);
IngesupMbed01 33:ec7d635636bf 105 break;
IngesupMbed01 33:ec7d635636bf 106
IngesupMbed01 28:8b5ccd2f837e 107 }
IngesupMbed01 33:ec7d635636bf 108 }
IngesupMbed01 33:ec7d635636bf 109
IngesupMbed01 33:ec7d635636bf 110 void C_ModuleCommunication::consigneModuleTrajectoire(frame newFrame)
IngesupMbed01 33:ec7d635636bf 111 {
IngesupMbed01 33:ec7d635636bf 112 switch(newFrame.messageIdentifier) {
IngesupMbed01 33:ec7d635636bf 113 case 0x11 : COMMANDE_TRAJECTOIRE = newFrame.data[0];
IngesupMbed01 33:ec7d635636bf 114 EN_MOUVEMENT = true;
IngesupMbed01 33:ec7d635636bf 115 while(EN_MOUVEMENT != false);
IngesupMbed01 33:ec7d635636bf 116 creerTrameModuleTrajectoire(0x12);
IngesupMbed01 33:ec7d635636bf 117 break;
IngesupMbed01 33:ec7d635636bf 118 case 0x13 : STOP = true;
IngesupMbed01 33:ec7d635636bf 119 EN_MOUVEMENT = true;
IngesupMbed01 33:ec7d635636bf 120 while(EN_MOUVEMENT != false);
IngesupMbed01 33:ec7d635636bf 121 creerTrameModuleTrajectoire(0x14);
IngesupMbed01 33:ec7d635636bf 122 break;
IngesupMbed01 33:ec7d635636bf 123 case 0x15 : creerTrameModuleTrajectoire(0x16);
IngesupMbed01 33:ec7d635636bf 124 break;
IngesupMbed01 33:ec7d635636bf 125
IngesupMbed01 33:ec7d635636bf 126 default : creerTrameSpeciale(0x99);
IngesupMbed01 33:ec7d635636bf 127 break;
IngesupMbed01 33:ec7d635636bf 128 }
IngesupMbed01 33:ec7d635636bf 129 }
IngesupMbed01 33:ec7d635636bf 130
IngesupMbed01 33:ec7d635636bf 131 void C_ModuleCommunication::creerTrameModuleTrajectoire(unsigned char idMessage)
IngesupMbed01 33:ec7d635636bf 132 {
IngesupMbed01 33:ec7d635636bf 133 frame newFrame;
IngesupMbed01 33:ec7d635636bf 134 newFrame.moduleIdentifier = 0x31;
IngesupMbed01 33:ec7d635636bf 135
IngesupMbed01 33:ec7d635636bf 136 switch(idMessage) {
IngesupMbed01 33:ec7d635636bf 137 case 0x12 : newFrame.messageIdentifier = 0x12;
IngesupMbed01 33:ec7d635636bf 138 break;
IngesupMbed01 33:ec7d635636bf 139 case 0x14 : newFrame.messageIdentifier = 0x14;
IngesupMbed01 33:ec7d635636bf 140 break;
IngesupMbed01 33:ec7d635636bf 141 case 0x16 : newFrame.messageIdentifier = 0x16;
IngesupMbed01 33:ec7d635636bf 142 union conversionCharFloat conv1;
IngesupMbed01 33:ec7d635636bf 143 conv1.f = COORDONNEE_DRONE.x;
IngesupMbed01 33:ec7d635636bf 144 newFrame.data[0] = conv1.ch[0];
IngesupMbed01 33:ec7d635636bf 145 newFrame.data[1] = conv1.ch[1];
IngesupMbed01 33:ec7d635636bf 146 newFrame.data[2] = conv1.ch[2];
IngesupMbed01 33:ec7d635636bf 147 newFrame.data[3] = conv1.ch[3];
IngesupMbed01 33:ec7d635636bf 148 conv1.f = 0;
IngesupMbed01 33:ec7d635636bf 149 conv1.f = COORDONNEE_DRONE.y;
IngesupMbed01 33:ec7d635636bf 150 newFrame.data[4] = conv1.ch[0];
IngesupMbed01 33:ec7d635636bf 151 newFrame.data[5] = conv1.ch[1];
IngesupMbed01 33:ec7d635636bf 152 newFrame.data[6] = conv1.ch[2];
IngesupMbed01 33:ec7d635636bf 153 newFrame.data[7] = conv1.ch[3];
IngesupMbed01 33:ec7d635636bf 154 conv1.f = 0;
IngesupMbed01 33:ec7d635636bf 155 conv1.f = COORDONNEE_DRONE.z;
IngesupMbed01 33:ec7d635636bf 156 newFrame.data[8] = conv1.ch[0];
IngesupMbed01 33:ec7d635636bf 157 newFrame.data[9] = conv1.ch[1];
IngesupMbed01 33:ec7d635636bf 158 newFrame.data[10] = conv1.ch[2];
IngesupMbed01 33:ec7d635636bf 159 newFrame.data[11] = conv1.ch[3];
IngesupMbed01 33:ec7d635636bf 160 break;
IngesupMbed01 33:ec7d635636bf 161 }
IngesupMbed01 33:ec7d635636bf 162
IngesupMbed01 33:ec7d635636bf 163 m_trameTxBuffer.frameBuffer(newFrame);
IngesupMbed01 33:ec7d635636bf 164 }
IngesupMbed01 33:ec7d635636bf 165
IngesupMbed01 33:ec7d635636bf 166 void C_ModuleCommunication::creerTrameSpeciale(unsigned char idMessage) {
IngesupMbed01 33:ec7d635636bf 167 frame newFrame;
IngesupMbed01 33:ec7d635636bf 168
IngesupMbed01 33:ec7d635636bf 169 switch(idMessage) {
IngesupMbed01 33:ec7d635636bf 170 case 0x00 : newFrame.moduleIdentifier = 0x00;
IngesupMbed01 33:ec7d635636bf 171 newFrame.messageIdentifier = 0x00;
IngesupMbed01 33:ec7d635636bf 172 break;
IngesupMbed01 33:ec7d635636bf 173 case 0x99 : newFrame.moduleIdentifier = 0x99;
IngesupMbed01 33:ec7d635636bf 174 newFrame.messageIdentifier = 0x99;
IngesupMbed01 33:ec7d635636bf 175 break;
IngesupMbed01 33:ec7d635636bf 176 }
IngesupMbed01 33:ec7d635636bf 177 m_trameTxBuffer.frameBuffer(newFrame);
IngesupMbed01 33:ec7d635636bf 178 }
IngesupMbed01 33:ec7d635636bf 179
IngesupMbed01 33:ec7d635636bf 180 void C_ModuleCommunication::consigneModuleVideo(frame newFrame)
IngesupMbed01 33:ec7d635636bf 181 {
IngesupMbed01 33:ec7d635636bf 182 }