From 11fbb3acd0e0c699143556e951f0e372bb1eca1b Mon Sep 17 00:00:00 2001 From: haller Date: Sun, 1 May 2005 00:28:34 +0000 Subject: Correction de deux trois bug Implémentation des nouvelles commandes AVR de Tb --- 2005/i/robert/src/es/es.cc | 67 +++++++++++++++++++++++++---------------- 2005/i/robert/src/es/es.hh | 38 ++++++++++++----------- 2005/i/robert/src/es/test_es.cc | 19 ++++++------ 3 files changed, 70 insertions(+), 54 deletions(-) (limited to '2005/i/robert') diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index 5554d0a..6fe728a 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -27,8 +27,10 @@ /// Constructeur Es::Es (const Config & config) - :proto_(*this), vitesseAsc(/*XXX*/), couleur(/*comment on la récup?*/), jackOut(/*idem*/) + :proto_(*this), vitesseAsc(/*XXX*/), couleur(/*comment on la récup?*/) { + // Récupération des valeurs de configuration dans le fichier + pVentouses_ = config.get("es.pVentouses"); init(); } @@ -37,39 +39,45 @@ void Es::init(void) // XXX Bon ca serait cool que l'AVR renvoie toute ses info au reset // On reset l'AVR proto_.send('z'); // XXX z = reset AVR - // on récup les données de couleur_ et de jackOut(mais comment??) + // XXX on récup les données de couleur_ et de jackOut(mais comment??) proto_.sync(); } -bool Es::stateJack(void) +bool Es::getColor(void) { - return jackOut_; + return couleur_; } -bool Es::capteursContact(void) +bool Es::getAscCurrentPos(void) { - return stateCapteurs_; + return ascCurrentPos_; } -levelAsc Es::stateAsc(void) // XXX Au secours!! +bool Es::getAscState(void) { - return stateAsc_; + return ascFailure__; } -void Es::moveAsc(levelAsc niveau) +bool Es::AscIsIdle(void) { - if(niveau == HAUT) - proto_.send('a',"b",2); - else if(niveau == MILIEU) - proto_.send('a',"b",1); - else - proto_.send('a',"b",0); - ascIdle_ == false; + return ascIdle_; +} + +void Es::monterAsc(void) +{ + proto_.send('m'); + ascIdle_ = false; +} + +void Es::descendreAsc(void) +{ + proto_.send('d'); + ascIdle_ = false; } void Es::ventouses(void) { - proto_.send('v'); + proto_.send('v',"b",pVentouses_); } void Es::wait(int timeout) @@ -81,21 +89,28 @@ void receive(char command, const Proto::Frame & frame) { switch(command) { - case 'J': //position jack - if(frame.args[0]) - jackOut_ = true; - else - jackOut = false; - break; - case 'C': //couleur selectionné + case 'C': //couleur selectionné XXX A voir if(frame.args[0]) couleur_ = true; else couleur_ = false; break; - case 'F': //J'ai fini (on suppose qu'il n'y a que l'asc) - proto.send('F'); // XXX On met un argument?? + 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 + ascCurrentPos_ = false; ascIdle_ = true; + break; + case 'E': // XXX Problème d'ascenseur + proto_.send('F', "b", 0); // XXX idem + ascCurrentPos_ = false; + ascIdle = true; + ascFailure_ = true; // XXX Mais alors pour le repasser à false... + break; } } diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh index a4d57f9..4e62e48 100644 --- a/2005/i/robert/src/es/es.hh +++ b/2005/i/robert/src/es/es.hh @@ -32,40 +32,42 @@ class Config; /// Gère la carte es et ses capteurs et actionneurs class Es : public Proto::Receiver { - public: - enum levelAsc_t {HAUT, MILIEU, BAS}; private: // Objet Proto de communication vers la carte es Proto proto_; // vitesse de déplacement de l'ascenceur - int ascMinHaut; - int ascMaxHaut; - int ascAscHaut; - int ascMinBas; - int ascMaxBas; - int ascAscBas; + int ascMinHaut_; // XXX Mais dis donc, ca sert à RIEN ca!!!!! (si ca sert, rajouter les ligne config dans le cstr) + int ascMaxHaut_; + int ascAscHaut_; + int ascMinBas_; + int ascMaxBas_; + int ascAscBas_; + // Periode de desactivation des ventouses + int pVentouses_; // couleur de notre camp (rouge(true)/vert(false)); bool couleur_; - // Etat du jack (false si entré, true si sortie) - bool jackOut_; - /// Etat des capteurs enculeurs de murs (true si enfoncés) - bool stateCapteurs_; - levelAsc_t stateAsc_; + /// Etat de l'ascenceur (true en haut, false en bas) + bool ascCurrentPos_; bool ascIdle_; + bool ascFailure_; public: /// Constructeur Es (const Config & config); /// Initialise les capteurs et actionneurs void init(void); - // Renvoie la position du jack (false si entré, true si sortie) - bool getStateJack(void); /// Renvoie la couleur sélectionné bool getColor(void); /// Renvoie la position de l'ascenceur(true en haut false en bas) - levelAsc_t stateAsc(void); - /// Execute un déplacement de l'ascenceur - void moveAsc(levelAsc_t monte); + bool getAscCurrentPos(void); + /// Renvoie l'état de l'ascenceur + bool getAscState(void); + /// Renvoie si l'ascenceur est idle + bool AscIsIdle(void); + /// Fait monter l'ascenceur + void monterAsc(void); + /// Fait descendre l'ascenceur + void descendreAsc(void); /// Désactive les ventouses pour X secondes XXX vérifier la durées arg/config void ventouses(void); /// On attend ... diff --git a/2005/i/robert/src/es/test_es.cc b/2005/i/robert/src/es/test_es.cc index e5d561a..9fa528d 100644 --- a/2005/i/robert/src/es/test_es.cc +++ b/2005/i/robert/src/es/test_es.cc @@ -67,27 +67,26 @@ main (int argc, char **argv) case 'z': es.init(); break; - case 'J': - std::cout << "Jack: \n" << - "Booléen: " << es.getStateJack() << "\n" << - "Le Jack est " << (es.getStateJack() ? "sortie" : "Entrée") << std::endl; - 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 'A': + case 'P': std::cout << "L'ascenceur est en position "; - if(es.stateAsc() == Es::levelAsc_t::HAUT) // XXX Faudrait qu'on m'explique + if(es.stateAsc()) std::cout << "HAUTE" << std::endl; - else if(es.stateAsc() == Es::levelAsc_t::MILIEU) - std::cout << "MILIEU" << std::endl; else std::cout << "BASSE" << std::endl; break; - case 'a': + case 'S': + 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; + break; + case 'm': // REPRENDRE ICI, FAIRE LES LOGS AUSSI if(++i + 1 > argc) throw std::runtime_error("syntax error"); switch(argv[i][0]) -- cgit v1.2.3