From 6196925a8925a3c43ed60a0805c0aee450db8640 Mon Sep 17 00:00:00 2001 From: haller Date: Mon, 2 May 2005 19:03:39 +0000 Subject: Modification mineur et correction de bug Le programme compile et a été testé sur Mani --- 2005/i/robert/src/es/Makefile.defs | 2 +- 2005/i/robert/src/es/es.cc | 59 +++++++++++++++++++++++++------------- 2005/i/robert/src/es/es.hh | 27 +++++++++++------ 2005/i/robert/src/es/test_es.cc | 30 +++++-------------- 4 files changed, 65 insertions(+), 53 deletions(-) diff --git a/2005/i/robert/src/es/Makefile.defs b/2005/i/robert/src/es/Makefile.defs index 065bcd8..dff8870 100644 --- a/2005/i/robert/src/es/Makefile.defs +++ b/2005/i/robert/src/es/Makefile.defs @@ -2,6 +2,6 @@ PROGRAMS += test_es es_OBJECTS = es.o -test_es_OBJECTS = test_es.o $(es_OBJECTS) +test_es_OBJECTS = test_es.o $(es_OBJECTS) $(proto_OBJECTS) $(log_OBJECTS) $(utils_OBJECTS) $(serial_OBJECTS) $(timer_OBJECTS) $(config_OBJECTS) test_es: $(test_es_OBJECTS) diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index 6fe728a..6185328 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -24,13 +24,15 @@ // }}} #include "es/es.hh" +#include "config/config.hh" /// Constructeur Es::Es (const Config & config) - :proto_(*this), vitesseAsc(/*XXX*/), couleur(/*comment on la récup?*/) + :proto_(*this) { // Récupération des valeurs de configuration dans le fichier - pVentouses_ = config.get("es.pVentouses"); + loadConfig(config); + proto_.open(tty_); init(); } @@ -41,24 +43,30 @@ void Es::init(void) proto_.send('z'); // XXX z = reset AVR // XXX on récup les données de couleur_ et de jackOut(mais comment??) proto_.sync(); + angle1_ = 0; + dist1_ = 0; + angle2_ = 0; + dist2_ = 0; + angle3_ = 0; + dist3_ = 0; + ascIdle_ = true; + ascFailure_ = false; + proto_.send('P',"bbbbbb", ascMinHaut_, ascMaxHaut_, ascAccHaut_, + ascMinBas_, ascMaxBas_, ascAccBas_); + ascCurrentPos_ = false; } -bool Es::getColor(void) -{ - return couleur_; -} - -bool Es::getAscCurrentPos(void) +bool Es::getAscCurPos(void) { return ascCurrentPos_; } bool Es::getAscState(void) { - return ascFailure__; + return ascFailure_; } -bool Es::AscIsIdle(void) +bool Es::ascIsIdle(void) { return ascIdle_; } @@ -85,32 +93,43 @@ void Es::wait(int timeout) proto_.wait(timeout); } -void receive(char command, const Proto::Frame & frame) +void Es::loadConfig(const Config & config) +{ + tty_ = config.get("es.tty"); + ascMinHaut_ = config.get("es.ascMinHaut"); + ascMaxHaut_ = config.get("es.ascMaxHaut"); + ascAccHaut_ = config.get("es.ascAccHaut"); + ascMinBas_ = config.get("es.ascMinBas"); + ascMaxBas_ = config.get("es.ascMaxBas"); + ascAccBas_ = config.get("es.ascAccBas"); + + pVentouses_ = config.get("es.pVentouses"); +} + +void Es::receive(char command, const Proto::Frame & frame) { switch(command) { - case 'C': //couleur selectionné XXX A voir - if(frame.args[0]) - couleur_ = true; - else - couleur_ = false; - break; case 'T': //L'ascenceur est en haut proto_.send('F', "b", 0); //XXX on met l'arg?? ascCurrentPos_ = true; ascIdle_ = true; break; - case 'B': // XXX L'ascenceur est en bas (ca serait cool si c'était implenté) - proto_.send('F', "b", O); // XXX idem + case 'I': // XXX L'ascenceur est en bas (ca serait cool si c'était implenté) + proto_.send('F', "b", 0); // XXX idem ascCurrentPos_ = false; ascIdle_ = true; break; case 'E': // XXX Problème d'ascenseur proto_.send('F', "b", 0); // XXX idem ascCurrentPos_ = false; - ascIdle = true; + ascIdle_ = true; ascFailure_ = true; // XXX Mais alors pour le repasser à false... break; + case 't': // Cachalot de Romain(Tourelle) + // XXX A CODER + break; + } } diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh index 4e62e48..0a07a6e 100644 --- a/2005/i/robert/src/es/es.hh +++ b/2005/i/robert/src/es/es.hh @@ -27,6 +27,8 @@ #include "proto/proto.hh" +#include + class Config; /// Gère la carte es et ses capteurs et actionneurs @@ -35,35 +37,40 @@ class Es : public Proto::Receiver private: // Objet Proto de communication vers la carte es Proto proto_; + // le tty est ... + std::string tty_; // vitesse de déplacement de l'ascenceur - int ascMinHaut_; // XXX Mais dis donc, ca sert à RIEN ca!!!!! (si ca sert, rajouter les ligne config dans le cstr) + int ascMinHaut_; int ascMaxHaut_; - int ascAscHaut_; + int ascAccHaut_; int ascMinBas_; int ascMaxBas_; - int ascAscBas_; + int ascAccBas_; // Periode de desactivation des ventouses int pVentouses_; - // couleur de notre camp (rouge(true)/vert(false)); - bool couleur_; /// Etat de l'ascenceur (true en haut, false en bas) bool ascCurrentPos_; bool ascIdle_; bool ascFailure_; + /// Obstacles détecté par la tourelle + int angle1_; + int dist1_; + int angle2_; + int dist2_; + int angle3_; + int dist3_; public: /// Constructeur Es (const Config & config); /// Initialise les capteurs et actionneurs void init(void); - /// Renvoie la couleur sélectionné - bool getColor(void); /// Renvoie la position de l'ascenceur(true en haut false en bas) - bool getAscCurrentPos(void); + bool getAscCurPos(void); /// Renvoie l'état de l'ascenceur bool getAscState(void); /// Renvoie si l'ascenceur est idle - bool AscIsIdle(void); + bool ascIsIdle(void); /// Fait monter l'ascenceur void monterAsc(void); /// Fait descendre l'ascenceur @@ -72,6 +79,8 @@ class Es : public Proto::Receiver void ventouses(void); /// On attend ... void wait(int timeout); + /// Charge les paramètre du fichier de config + void loadConfig(const Config & config); /// définition du receiver::receive void receive(char command, const Proto::Frame & frame); }; diff --git a/2005/i/robert/src/es/test_es.cc b/2005/i/robert/src/es/test_es.cc index 9fa528d..4e733ab 100644 --- a/2005/i/robert/src/es/test_es.cc +++ b/2005/i/robert/src/es/test_es.cc @@ -67,15 +67,9 @@ main (int argc, char **argv) case 'z': es.init(); break; - case 'C': - std::cout << "Couleur: \n" << - "Booléen: " << es.getColor() << "\n" << - "La couleur sélectionné est le " << - (es.getColor() ? "rouge" : "vert") << std::endl; - break; case 'P': std::cout << "L'ascenceur est en position "; - if(es.stateAsc()) + if(es.getAscCurPos()) std::cout << "HAUTE" << std::endl; else std::cout << "BASSE" << std::endl; @@ -84,23 +78,13 @@ main (int argc, char **argv) std::cout << "L'ascenceur est " << (es.getAscState() ? "HORS" : "EN") << " service" << std::endl; break; case 'I': - std::cout << "L'ascenceur est " << (es.ascIdle() ? "INACTIF" : "ACTIF") << std::endl; + std::cout << "L'ascenceur est " << (es.ascIsIdle() ? "INACTIF" : "ACTIF") << std::endl; + break; + case 'm': // Monter l'ascenceur + es.monterAsc(); break; - case 'm': // REPRENDRE ICI, FAIRE LES LOGS AUSSI - if(++i + 1 > argc) - throw std::runtime_error("syntax error"); - switch(argv[i][0]) - { - case '0': - es.moveAsc(Es::levelAsc_t::BAS); - break; - case '1': - es.moveAsc(Es::levelAsc_t::MILIEU); - break; - case '2': - es.moveAsc(Es::levelAsc_t::HAUT); - break; - } + case 'd': // Descendre asc + es.descendreAsc(); break; case 'v': es.ventouses(); -- cgit v1.2.3