summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-05-02 19:03:39 +0000
committerhaller2005-05-02 19:03:39 +0000
commit6196925a8925a3c43ed60a0805c0aee450db8640 (patch)
treeac9260da7cf3df90c08a4dbd8f4594520fa53882
parent4fa1434052dd603cec70f0edfeeca8f47905fbfe (diff)
Modification mineur et correction de bug
Le programme compile et a été testé sur Mani
-rw-r--r--2005/i/robert/src/es/Makefile.defs2
-rw-r--r--2005/i/robert/src/es/es.cc59
-rw-r--r--2005/i/robert/src/es/es.hh27
-rw-r--r--2005/i/robert/src/es/test_es.cc30
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<int>("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<std::string>("es.tty");
+ ascMinHaut_ = config.get<int>("es.ascMinHaut");
+ ascMaxHaut_ = config.get<int>("es.ascMaxHaut");
+ ascAccHaut_ = config.get<int>("es.ascAccHaut");
+ ascMinBas_ = config.get<int>("es.ascMinBas");
+ ascMaxBas_ = config.get<int>("es.ascMaxBas");
+ ascAccBas_ = config.get<int>("es.ascAccBas");
+
+ pVentouses_ = config.get<int>("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 <string>
+
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();