Projet S5 Info / Mbed 2 deprecated Projet_S5

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

Committer:
trixrabbit
Date:
Sun Apr 13 19:13:28 2014 +0000
Revision:
14:67f44035ef61
Parent:
12:16390cea4420
Child:
15:337d1c619d64
plus de printf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joGenie 9:40197c24ce2c 1 /*!
joGenie 9:40197c24ce2c 2 * \file analyzer.cpp
joGenie 9:40197c24ce2c 3 * \brief Class that analyzes the mouvement in C and C++
joGenie 9:40197c24ce2c 4 * \author Equipe P02
joGenie 9:40197c24ce2c 5 * \version 0.1
joGenie 9:40197c24ce2c 6 * \date 02/04/2014
joGenie 9:40197c24ce2c 7 */
joGenie 9:40197c24ce2c 8
joGenie 3:17a4ceb30535 9 #include "analyzer.h"
joGenie 8:9bf215a760f5 10
joGenie 3:17a4ceb30535 11 Analyzer::Analyzer()
joGenie 8:9bf215a760f5 12 {
joGenie 8:9bf215a760f5 13 }
joGenie 8:9bf215a760f5 14
joGenie 3:17a4ceb30535 15 Analyzer::~Analyzer()
joGenie 8:9bf215a760f5 16 {
joGenie 8:9bf215a760f5 17 allMouvement.clear();
joGenie 8:9bf215a760f5 18 }
joGenie 11:9c0786fc06b4 19
joGenie 11:9c0786fc06b4 20 void Analyzer::initialize()
joGenie 11:9c0786fc06b4 21 {
joGenie 11:9c0786fc06b4 22 DigitalOut reset(p8);
joGenie 11:9c0786fc06b4 23 reset = 0;
joGenie 11:9c0786fc06b4 24 wait(0.4);
joGenie 11:9c0786fc06b4 25 reset = 1;
joGenie 11:9c0786fc06b4 26
joGenie 12:16390cea4420 27 trame = new Trame(p13, p14);
joGenie 11:9c0786fc06b4 28
joGenie 12:16390cea4420 29 allMouvement[0x0002] = new Mouvement(0x0002, 0x0002, "Z vertical, vers le ciel", hand);
joGenie 12:16390cea4420 30 allMouvement[0x0003] = new Mouvement(0x0003, 0x0003, "Z vertical, vers le ciel INVERSE", hand);
joGenie 12:16390cea4420 31 allMouvement[0x0004] = new Mouvement(0x0004, 0x0004, "Z vertical, vers le sol", hand);
joGenie 12:16390cea4420 32 allMouvement[0x0005] = new Mouvement(0x0005, 0x0005, "Z vertical, vers le sol INVERSE", hand);
joGenie 12:16390cea4420 33 allMouvement[0x0006] = new Mouvement(0x0006, 0x0006, "Z horizontal", hand);
joGenie 12:16390cea4420 34 allMouvement[0x0007] = new Mouvement(0x0007, 0x0007, "Z horizontal INVERSE", hand);
joGenie 11:9c0786fc06b4 35
joGenie 12:16390cea4420 36 allMouvement[0x0020] = new Mouvement(0x0020, 0x0020, "X vertical, vers le ciel", hand);
joGenie 12:16390cea4420 37 allMouvement[0x0030] = new Mouvement(0x0030, 0x0030, "X vertical, vers le ciel INVERSE", hand);
joGenie 12:16390cea4420 38 allMouvement[0x0040] = new Mouvement(0x0040, 0x0040, "X vertical, vers le sol", hand);
joGenie 12:16390cea4420 39 allMouvement[0x0050] = new Mouvement(0x0050, 0x0050, "X vertical, vers le sol INVERSE", hand);
joGenie 12:16390cea4420 40 allMouvement[0x0060] = new Mouvement(0x0060, 0x0060, "X horizontal", hand);
joGenie 12:16390cea4420 41 allMouvement[0x0070] = new Mouvement(0x0070, 0x0070, "X horizontal INVERSE", hand);
joGenie 11:9c0786fc06b4 42
joGenie 12:16390cea4420 43 allMouvement[0x0200] = new Mouvement(0x0200, 0x0200, "Y vertical, vers le ciel", hand);
joGenie 12:16390cea4420 44 allMouvement[0x0300] = new Mouvement(0x0300, 0x0300, "Y vertical, vers le ciel INVERSE", hand);
joGenie 12:16390cea4420 45 allMouvement[0x0400] = new Mouvement(0x0400, 0x0400, "Y vertical, vers le sol", hand);
joGenie 12:16390cea4420 46 allMouvement[0x0500] = new Mouvement(0x0500, 0x0500, "Y vertical, vers le sol INVERSE", hand);
joGenie 12:16390cea4420 47 allMouvement[0x0600] = new Mouvement(0x0600, 0x0600, "Y horizontal", hand);
joGenie 12:16390cea4420 48 allMouvement[0x0700] = new Mouvement(0x0700, 0x0700, "Y horizontal INVERSE", hand);
joGenie 11:9c0786fc06b4 49 }
joGenie 8:9bf215a760f5 50
joGenie 6:ef8bfca9e69b 51 void Analyzer::setMinMax(signed char* values)
joGenie 3:17a4ceb30535 52 {
joGenie 3:17a4ceb30535 53 x.setMinMax(values[0]);
joGenie 3:17a4ceb30535 54 y.setMinMax(values[1]);
joGenie 3:17a4ceb30535 55 z.setMinMax(values[2]);
joGenie 3:17a4ceb30535 56 }
joGenie 8:9bf215a760f5 57
joGenie 5:6313ddd0dfdd 58 void Analyzer::checkMouvement()
joGenie 5:6313ddd0dfdd 59 {
joGenie 8:9bf215a760f5 60 bool deplacement[3] = {0};
joGenie 8:9bf215a760f5 61 int code_mouvement = 0;
joGenie 8:9bf215a760f5 62
joGenie 9:40197c24ce2c 63 deplacement[0] = x.isMouvement();
joGenie 9:40197c24ce2c 64 deplacement[1] = y.isMouvement();
joGenie 9:40197c24ce2c 65 deplacement[2] = z.isMouvement();
joGenie 8:9bf215a760f5 66
joGenie 8:9bf215a760f5 67
joGenie 8:9bf215a760f5 68 // Mouvement en x
joGenie 8:9bf215a760f5 69 if(deplacement[0])
joGenie 8:9bf215a760f5 70 {
joGenie 8:9bf215a760f5 71 if(x.initial > SEUIL_DETECTION)
joGenie 8:9bf215a760f5 72 {
joGenie 11:9c0786fc06b4 73 code_mouvement |= 0x1 << 9; // 0010
joGenie 8:9bf215a760f5 74 }
joGenie 8:9bf215a760f5 75 else if(x.initial < -SEUIL_DETECTION)
joGenie 8:9bf215a760f5 76 {
joGenie 11:9c0786fc06b4 77 code_mouvement |= 0x2 << 9; // 0100
joGenie 8:9bf215a760f5 78 }
joGenie 8:9bf215a760f5 79 else
joGenie 8:9bf215a760f5 80 {
joGenie 11:9c0786fc06b4 81 code_mouvement |= 0x3 << 9; // 0110
joGenie 8:9bf215a760f5 82 }
joGenie 8:9bf215a760f5 83
joGenie 8:9bf215a760f5 84 if(!x.sens)
joGenie 8:9bf215a760f5 85 {
joGenie 11:9c0786fc06b4 86 code_mouvement |= 0x1 << 8; // 0xx1
joGenie 8:9bf215a760f5 87 }
joGenie 8:9bf215a760f5 88 }
joGenie 5:6313ddd0dfdd 89
joGenie 8:9bf215a760f5 90 // Mouvement en y
joGenie 8:9bf215a760f5 91 if(deplacement[1])
joGenie 8:9bf215a760f5 92 {
joGenie 8:9bf215a760f5 93 if(y.initial > SEUIL_DETECTION)
joGenie 8:9bf215a760f5 94 {
joGenie 11:9c0786fc06b4 95 code_mouvement |= 0x1 << 5; // 0xxx 0010
joGenie 8:9bf215a760f5 96 }
joGenie 8:9bf215a760f5 97 else if(y.initial < -SEUIL_DETECTION)
joGenie 8:9bf215a760f5 98 {
joGenie 11:9c0786fc06b4 99 code_mouvement |= 0x2 << 5; // 0xxx 0100
joGenie 8:9bf215a760f5 100 }
joGenie 8:9bf215a760f5 101 else
joGenie 8:9bf215a760f5 102 {
joGenie 11:9c0786fc06b4 103 code_mouvement |= 0x3 << 5; // 0xxx 0110
joGenie 8:9bf215a760f5 104 }
joGenie 8:9bf215a760f5 105
joGenie 8:9bf215a760f5 106 if(!y.sens)
joGenie 8:9bf215a760f5 107 {
joGenie 11:9c0786fc06b4 108 code_mouvement |= 0x1 << 4; // 0xxx 0yy1
joGenie 8:9bf215a760f5 109 }
joGenie 8:9bf215a760f5 110 }
joGenie 8:9bf215a760f5 111
joGenie 8:9bf215a760f5 112 // Mouvement en z
joGenie 8:9bf215a760f5 113 if(deplacement[2])
joGenie 8:9bf215a760f5 114 {
joGenie 8:9bf215a760f5 115 if(z.initial > SEUIL_DETECTION)
joGenie 8:9bf215a760f5 116 {
joGenie 11:9c0786fc06b4 117 code_mouvement |= 1 << 1; // 0xxx 0yyy 0010
joGenie 8:9bf215a760f5 118 }
joGenie 8:9bf215a760f5 119 else if(z.initial < -SEUIL_DETECTION)
joGenie 8:9bf215a760f5 120 {
joGenie 11:9c0786fc06b4 121 code_mouvement |= 2 << 1; // 0xxx 0yyy 0100
joGenie 8:9bf215a760f5 122 }
joGenie 8:9bf215a760f5 123 else
joGenie 8:9bf215a760f5 124 {
joGenie 11:9c0786fc06b4 125 code_mouvement |= 3 << 1; // 0xxx 0yyy 0110
joGenie 8:9bf215a760f5 126 }
joGenie 8:9bf215a760f5 127
joGenie 8:9bf215a760f5 128 if(!z.sens)
joGenie 8:9bf215a760f5 129 {
joGenie 11:9c0786fc06b4 130 code_mouvement |= 1 << 0; // 0xxx 0yyy 0zz1
joGenie 8:9bf215a760f5 131 }
joGenie 8:9bf215a760f5 132 }
joGenie 8:9bf215a760f5 133
joGenie 11:9c0786fc06b4 134 map<int,Mouvement*>::iterator it;
joGenie 11:9c0786fc06b4 135 it = allMouvement.find(code_mouvement);
trixrabbit 14:67f44035ef61 136
joGenie 12:16390cea4420 137 if(it != allMouvement.end())
joGenie 12:16390cea4420 138 it->second->sendData(trame);
joGenie 7:89be89aeed5a 139 }
joGenie 12:16390cea4420 140
joGenie 7:89be89aeed5a 141 void Analyzer::setInitial(signed char* init)
joGenie 7:89be89aeed5a 142 {
joGenie 7:89be89aeed5a 143 x.setInitial(init[0]);
joGenie 7:89be89aeed5a 144 y.setInitial(init[1]);
joGenie 7:89be89aeed5a 145 z.setInitial(init[2]);
joGenie 5:6313ddd0dfdd 146 }
joGenie 8:9bf215a760f5 147
joGenie 3:17a4ceb30535 148 extern "C" void *Analyzer_C_new()
joGenie 3:17a4ceb30535 149 {
joGenie 3:17a4ceb30535 150 return new Analyzer();
joGenie 3:17a4ceb30535 151 }
joGenie 8:9bf215a760f5 152
joGenie 3:17a4ceb30535 153 extern "C" void Analyzer_C_delete(void *analyzer)
joGenie 3:17a4ceb30535 154 {
joGenie 3:17a4ceb30535 155 Analyzer *an = (Analyzer*)analyzer;
joGenie 3:17a4ceb30535 156 delete an;
joGenie 3:17a4ceb30535 157 }
joGenie 11:9c0786fc06b4 158
joGenie 11:9c0786fc06b4 159 extern "C" void Analyzer_C_Initialize(void *analyzer)
joGenie 11:9c0786fc06b4 160 {
joGenie 11:9c0786fc06b4 161 Analyzer *an = (Analyzer*)analyzer;
joGenie 11:9c0786fc06b4 162 an->initialize();
joGenie 11:9c0786fc06b4 163 }
joGenie 8:9bf215a760f5 164
joGenie 6:ef8bfca9e69b 165 extern "C" void Analyzer_C_setMinMax(signed char* values, void *analyzer)
joGenie 3:17a4ceb30535 166 {
joGenie 3:17a4ceb30535 167 Analyzer *an = (Analyzer*)analyzer;
joGenie 3:17a4ceb30535 168 an->setMinMax(values);
joGenie 5:6313ddd0dfdd 169 }
joGenie 8:9bf215a760f5 170
joGenie 7:89be89aeed5a 171 extern "C" void Analyzer_C_setInitial(signed char* init, void *analyzer)
joGenie 7:89be89aeed5a 172 {
joGenie 7:89be89aeed5a 173 Analyzer *an = (Analyzer*)analyzer;
joGenie 7:89be89aeed5a 174 an->setInitial(init);
joGenie 7:89be89aeed5a 175 }
joGenie 8:9bf215a760f5 176
joGenie 5:6313ddd0dfdd 177 extern "C" void Analyzer_C_checkMouvement(void *analyzer)
joGenie 5:6313ddd0dfdd 178 {
joGenie 5:6313ddd0dfdd 179 Analyzer *an = (Analyzer*)analyzer;
joGenie 5:6313ddd0dfdd 180 an->checkMouvement();
joGenie 8:9bf215a760f5 181 }
joGenie 12:16390cea4420 182
joGenie 12:16390cea4420 183 extern "C" void Analyzer_C_setHand(bool h, void *analyzer)
joGenie 12:16390cea4420 184 {
joGenie 12:16390cea4420 185 Analyzer *an = (Analyzer*)analyzer;
joGenie 12:16390cea4420 186 an->setHand(h);
joGenie 12:16390cea4420 187 }