summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-05-03 23:29:58 +0000
committerhaller2005-05-03 23:29:58 +0000
commitccf18730f3ecfe2cce1fdc02b949b757b42dcb16 (patch)
tree7bcbc60ea0e7b088a3afb2bf28b8de6a51da4fd2
parent6eaaa29c57b70f3e9aa48c2d14fe9acfe008669d (diff)
Virage du cachalot
Implémentation du télémètre
-rw-r--r--2005/i/robert/src/es/es.cc44
-rw-r--r--2005/i/robert/src/es/es.hh18
-rw-r--r--2005/i/robert/src/es/test_es.cc3
3 files changed, 39 insertions, 26 deletions
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<int>("es.ascAccBas");
pVentouses_ = config.get<int>("es.pVentouses");
+
+ pStatTele_ = config.get<int>("es.pStatTele");
+ teleSeuil_ = config.get<int>("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;
}