From ccf18730f3ecfe2cce1fdc02b949b757b42dcb16 Mon Sep 17 00:00:00 2001 From: haller Date: Tue, 3 May 2005 23:29:58 +0000 Subject: Virage du cachalot Implémentation du télémètre --- 2005/i/robert/src/es/es.cc | 44 +++++++++++++++++++++++------------------ 2005/i/robert/src/es/es.hh | 18 ++++++++++------- 2005/i/robert/src/es/test_es.cc | 3 +++ 3 files changed, 39 insertions(+), 26 deletions(-) (limited to '2005') diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index 6185328..3673fb3 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -28,31 +28,25 @@ /// Constructeur Es::Es (const Config & config) - :proto_(*this) + :proto_(*this), log_("Es") { // Récupération des valeurs de configuration dans le fichier loadConfig(config); proto_.open(tty_); - init(); } 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 - // XXX on récup les données de couleur_ et de jackOut(mais comment??) + proto_.send('z'); proto_.sync(); - angle1_ = 0; - dist1_ = 0; - angle2_ = 0; - dist2_ = 0; - angle3_ = 0; - dist3_ = 0; ascIdle_ = true; ascFailure_ = false; + // Envoire des paramètre ascenceur vers l'AVR proto_.send('P',"bbbbbb", ascMinHaut_, ascMaxHaut_, ascAccHaut_, ascMinBas_, ascMaxBas_, ascAccBas_); + // Envoie de la période de retour des mesure télémètre + proto_.send('C',"b", pStatTele_); ascCurrentPos_ = false; } @@ -71,6 +65,14 @@ bool Es::ascIsIdle(void) return ascIdle_; } +bool Es::obsTropPres(void) +{ + if(distGauche_ > teleSeuil_ || distDroite_ > teleSeuil_) + return true; + else + return false; +} + void Es::monterAsc(void) { proto_.send('m'); @@ -104,6 +106,9 @@ void Es::loadConfig(const Config & config) ascAccBas_ = config.get("es.ascAccBas"); pVentouses_ = config.get("es.pVentouses"); + + pStatTele_ = config.get("es.pStatTele"); + teleSeuil_ = config.get("es.teleSeuil"); } void Es::receive(char command, const Proto::Frame & frame) @@ -111,23 +116,24 @@ void Es::receive(char command, const Proto::Frame & frame) switch(command) { case 'T': //L'ascenceur est en haut - proto_.send('F', "b", 0); //XXX on met l'arg?? + proto_.send('F', "b", 0); ascCurrentPos_ = true; ascIdle_ = true; break; - case 'I': // XXX L'ascenceur est en bas (ca serait cool si c'était implenté) - proto_.send('F', "b", 0); // XXX idem + case 'I': // L'ascenceur est en bas + proto_.send('F', "b", 0); ascCurrentPos_ = false; ascIdle_ = true; break; - case 'E': // XXX Problème d'ascenseur - proto_.send('F', "b", 0); // XXX idem + case 'E': // Problème d'ascenseur + proto_.send('F', "b", 0); ascCurrentPos_ = false; ascIdle_ = true; - ascFailure_ = true; // XXX Mais alors pour le repasser à false... + ascFailure_ = true; break; - case 't': // Cachalot de Romain(Tourelle) - // XXX A CODER + case 'C': // retour télémètre + proto_.decode(frame,"ww", distGauche_, distDroite_); + log_("Télémètre") << "Valeur gauche" << distGauche_ << "Valeur Droite" << distDroite_; break; } diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh index 0a07a6e..6bb0fc4 100644 --- a/2005/i/robert/src/es/es.hh +++ b/2005/i/robert/src/es/es.hh @@ -39,6 +39,8 @@ class Es : public Proto::Receiver Proto proto_; // le tty est ... std::string tty_; + /// Vitesse d'envoie de la distance du prochain obstacle + int pStatTele_; // vitesse de déplacement de l'ascenceur int ascMinHaut_; int ascMaxHaut_; @@ -52,13 +54,13 @@ class Es : public Proto::Receiver bool ascCurrentPos_; bool ascIdle_; bool ascFailure_; - /// Obstacles détecté par la tourelle - int angle1_; - int dist1_; - int angle2_; - int dist2_; - int angle3_; - int dist3_; + /// Dernière distance du télémètre + int distGauche_; + int distDroite_; + /// Seuil du télémètre + int teleSeuil_; + /// Système de log + Log log_; public: /// Constructeur @@ -71,6 +73,8 @@ class Es : public Proto::Receiver bool getAscState(void); /// Renvoie si l'ascenceur est idle bool ascIsIdle(void); + /// Renvoie si l'obstacle le plus proche est trop proche + bool obsTropPres(void); /// Fait monter l'ascenceur void monterAsc(void); /// Fait descendre l'ascenceur diff --git a/2005/i/robert/src/es/test_es.cc b/2005/i/robert/src/es/test_es.cc index 4e733ab..42f681d 100644 --- a/2005/i/robert/src/es/test_es.cc +++ b/2005/i/robert/src/es/test_es.cc @@ -89,6 +89,9 @@ main (int argc, char **argv) case 'v': es.ventouses(); break; + case 'C': + std::cout << "Le prochain obstacle est " << (es.obsTropPres() ? "TROP PRES." : "LOIN.") << std::endl; + break; } break; } -- cgit v1.2.3