summaryrefslogtreecommitdiff
path: root/2005/i
diff options
context:
space:
mode:
authorhaller2005-05-01 00:28:34 +0000
committerhaller2005-05-01 00:28:34 +0000
commit11fbb3acd0e0c699143556e951f0e372bb1eca1b (patch)
treeccd7d432640db1f0c0b26126f7b9a7e0ef40e92d /2005/i
parent79cee4f5f7fc5179c1476b8e9cf031059544cb56 (diff)
Correction de deux trois bug
Implémentation des nouvelles commandes AVR de Tb
Diffstat (limited to '2005/i')
-rw-r--r--2005/i/robert/src/es/es.cc67
-rw-r--r--2005/i/robert/src/es/es.hh38
-rw-r--r--2005/i/robert/src/es/test_es.cc19
3 files changed, 70 insertions, 54 deletions
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<int>("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])