summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/es
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/es')
-rw-r--r--2005/i/robert/src/es/es.cc20
-rw-r--r--2005/i/robert/src/es/es.hh8
-rw-r--r--2005/i/robert/src/es/test_es.cc9
3 files changed, 26 insertions, 11 deletions
diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc
index d1e8e76..9c32e9b 100644
--- a/2005/i/robert/src/es/es.cc
+++ b/2005/i/robert/src/es/es.cc
@@ -66,7 +66,16 @@ bool Es::ascIsIdle(void)
bool Es::obsTropPres(void)
{
- if(distGauche_ > teleSeuil_ || distDroite_ > teleSeuil_)
+ if (distGauche_ > teleSeuil_ || distDroite_ > teleSeuil_
+ || obsBasTropPres ())
+ return true;
+ else
+ return false;
+}
+bool
+Es::obsBasTropPres (void)
+{
+ if (distBas_ > teleSeuilBas_)
return true;
else
return false;
@@ -89,9 +98,10 @@ void Es::ventouses(void)
proto_.send('v',"b",pVentouses_);
}
-void Es::wait(int timeout)
+bool
+Es::wait(int timeout /*-1*/)
{
- proto_.wait(timeout);
+ return proto_.wait(timeout);
}
/// Récupère le File Descriptor
@@ -114,6 +124,7 @@ void Es::loadConfig(const Config & config)
pStatTele_ = config.get<int>("es.pStatTele");
teleSeuil_ = config.get<int>("es.teleSeuil");
+ teleSeuilBas_ = config.get <int> ("es.teleSeuilBas");
}
void Es::receive(char command, const Proto::Frame & frame)
@@ -137,8 +148,7 @@ void Es::receive(char command, const Proto::Frame & frame)
ascFailure_ = true;
break;
case 'C': // retour télémètre
- proto_.decode(frame,"ww", distGauche_, distDroite_);
-// log_("Télémètre") << "Valeur gauche" << distGauche_ << "Valeur Droite" << distDroite_;
+ proto_.decode(frame,"www", distGauche_, distDroite_, distBas_);
break;
}
diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh
index bccfcf6..df5aaec 100644
--- a/2005/i/robert/src/es/es.hh
+++ b/2005/i/robert/src/es/es.hh
@@ -59,6 +59,10 @@ class Es : public Proto::Receiver
int distDroite_;
/// Seuil du télémètre
int teleSeuil_;
+ /// Distance du télémêtre du bas (quille dans l'ascenceur)
+ int distBas_;
+ /// Seuil du télémêtre du bas
+ int teleSeuilBas_;
/// Système de log
Log log_;
@@ -75,6 +79,8 @@ class Es : public Proto::Receiver
bool ascIsIdle(void);
/// Renvoie si l'obstacle le plus proche est trop proche
bool obsTropPres(void);
+ /// Renvoie la présence d'un obstacle devant le capteur du bas
+ bool obsBasTropPres (void);
/// Fait monter l'ascenceur
void monterAsc(void);
/// Fait descendre l'ascenceur
@@ -82,7 +88,7 @@ class Es : public Proto::Receiver
/// Désactive les ventouses pour X secondes XXX vérifier la durées arg/config
void ventouses(void);
/// On attend ...
- void wait(int timeout);
+ bool wait(int timeout = -1);
/// Récupère le File Descriptor
int getFd(void);
/// Charge les paramètre du fichier de config
diff --git a/2005/i/robert/src/es/test_es.cc b/2005/i/robert/src/es/test_es.cc
index 630edc6..7e49762 100644
--- a/2005/i/robert/src/es/test_es.cc
+++ b/2005/i/robert/src/es/test_es.cc
@@ -93,10 +93,10 @@ main (int argc, char **argv)
std::cout << "Le prochain obstacle est " << (es.obsTropPres() ? "TROP PRES." : "LOIN.") << std::endl;
break;
}
- do
- {
- es.sync();
- }while(!es.ascIsIdle());
+
+ while (!es.wait (-1) || !es.ascIsIdle())
+ ;
+
break;
}
case 'w':
@@ -110,7 +110,6 @@ main (int argc, char **argv)
{
es.wait (stop - t);
t = Timer::getProgramTime ();
- es.sync();
}
break;
}