summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschodet2006-05-21 22:39:26 +0000
committerschodet2006-05-21 22:39:26 +0000
commita76ce92ad99a1a0a5b6eba55a8f4bac337da43cd (patch)
treeab0c5e982fa3129927a0378f3a9fe92bfabdfc52
parentdfcdd6007907ad86b99e8eab8b46e773ee0c4706 (diff)
Modifs du dimanche, restructuration de l'automate.
A faire : vérifier la vitesse des turbines dans les transitions, m'est d'avis que c'est foireux. dje: je t'ai repiqué le 'i' !!!
-rw-r--r--n/es-2006/src/barillet.c540
-rw-r--r--n/es-2006/src/barillet.h7
-rw-r--r--n/es-2006/src/main.c17
3 files changed, 268 insertions, 296 deletions
diff --git a/n/es-2006/src/barillet.c b/n/es-2006/src/barillet.c
index d5dd29d..733210c 100644
--- a/n/es-2006/src/barillet.c
+++ b/n/es-2006/src/barillet.c
@@ -38,8 +38,9 @@
SIG_INTERRUPT5 pour la fourche barillet 2 => celle pres de la carte de puissance
SIG_INTERRUPT4 pour la fourche barillet 1 => celle pres de la carte de es-2006
*/
-
-
+#define OCR_BAR OCR1A
+#define OCR_TURB_AVANT OCR1B
+#define OCR_TURB_ARRIERE OCR1C
/* XXX verifier que les turbines sont en vitesse lente si inutilis */
/* XXX verifier que le sens de rotation du barillet est 0 si inutilis */
@@ -49,7 +50,7 @@
#define VITESSE_BAR_MAX_ 0x03FF
/* vitesse de rotation minimale du barillet */
-#define VITESSE_BAR_MIN_ 0x1FF /* XXX a etalonner */
+#define VITESSE_BAR_MIN_ 0x01FF /* XXX a etalonner */
/* vitesse de rotation maximale des turbines */
#define VITESSE_TURB_MAX_ 0x0333
@@ -60,58 +61,69 @@
/* delai d'une s pour la carte puissance */
#define DELAY_ 1
-/* define de l'etat_en_cours_ */
-#define SLEEP_ 0
-#define STAND_BY_ 1
-#define BALLE_AVALE_ATTENTE 2
-#define BALLE_AVALEE 3
-#define TOURNE_ANALYSE_BALLE 4
-#define ANALYSE_BALLE 5
-#define ROTATION 6
-#define ROTATION_EN_COURS 7
-#define EXTRACTION 8
-#define EXTRACTION_EN_COURS 9
-#define EXTRACTION_EN_HAUT 10
-#define DEPOT 11
-#define DEPOT_EN_COURS 12
-#define DEPOT_FIN 13
-
-
-
-/* variable d'tat_barillet */
+/* Define de l'etat_en_cours_.
+ * Lexique :
+ * AV : trou avant.
+ * AR : trou arrire.
+ * EX : extraction/monte.
+ * DEP : depot/descente.
+ * sans rien (ex AR_EX) : on a reu un ordre, mais on n'a pas encore vu de
+ * balle.
+ * VU : balle devant le capteur.
+ * PASSE : balle n'est plus devant le capteur, on attend qu'elle arrive
+ * destination (tombe ou monte).
+ * FIN : opration ralise avec succs, on l'indique l'uart.
+ */
+
+#define ETAT_ROTATION 0x80
+/** Retourne une valeur non nulle si c'est une rotation. */
+#define EST_CE_UNE_ROTATION(e) ((e) & ETAT_ROTATION)
+/** Passe l'tat suivant si on est dans un etat rotation. */
+#define ETAT_SUIVANT_ROTATION(e) (((e) & ~ETAT_ROTATION) + 1)
+
+/** Etat initial au reset. */
+#define RESET (0x00)
+/** Initialisation de la position zero du barillet. */
+#define INIT (0x01)
+/** Attente sans rien faire. */
+#define SLEEP (0x02)
+/** Prt agir. */
+#define STAND_BY (0x03)
+/** Prt agir sauf pour faire monter des balles. */
+#define STAND_BY_FULL (0x04)
+#define ROTATION (0x10 | ETAT_ROTATION)
+#define ROTATION_FIN (0x11)
+#define AV_EX_VU (0x20)
+#define AV_EX_PASSE (0x21)
+#define AV_EX_ROTATION (0x22 | ETAT_ROTATION)
+#define AV_EX_FIN (0x23)
+#define AR_EX (0x30)
+#define AR_EX_VU (0x31)
+#define AR_EX_PASSE (0x32)
+#define AR_EX_ROTATION (0x33 | ETAT_ROTATION)
+#define AR_EX_FIN (0x34)
+#define AR_DEP (0x40)
+#define AR_DEP_VU (0x41)
+#define AR_DEP_PASSE (0x42)
+#define AR_DEP_FIN (0x43)
+
+/* at barillet. */
volatile uint8_t etat_en_cours_;
-/*XXX XXX variable de debug pour la rotation barillet */
-volatile uint8_t pos_temp_;
+/* Etat des fourches barillet. */
+volatile uint8_t fourche_barillet_prec_;
/* position relative au barillet */
volatile uint8_t pos_actuel_;
-volatile uint8_t pos_prec_;
volatile uint8_t pos_final_;
volatile uint8_t pos_lenteur_;
-/* etat d'attente pour l'interruption fourche optique */
-volatile uint8_t etat_inter_ar_; /* fourche arriere */
-volatile uint8_t etat_inter_av_; /* fourche avant */
-
-/* variable d'attente pour que la balle soit completemebnt montee dnas le barillet */
-volatile uint8_t attente;
-
-/* variable gerant le pb de rebond dans les interruptions */
-volatile uint8_t rebond_inter_ar;
-volatile uint8_t rebond_inter_av;
-
-/* position du barillet a aller */
-uint8_t pos_a_aller_;
+/* Compteur utilis pour les time out ou les passages de balle. */
+volatile uint8_t attente_;
/* fonctions static dans le fichier */
-static void rotation_barillet( void );
+static void rotation_barillet (uint8_t pos_final, uint8_t etat);
static void pos_bar(void);
-static void extraction_balle(void);
-static void extraction_fin(void);
-static void new_balle(void);
-static void depose_balle(void);
-static void depot_fin(void);
/* Initialisation pour tout ce qui concerne le barillet */
@@ -142,11 +154,11 @@ barillet_init (void)
PORTE |= _BV(7) | _BV(6);
/* mode PWM = 0 */
- OCR1A = 0; /* vitesse moteur barillet nulle */
- utils_delay_us ( DELAY_ ); /* attente d'1 s pour la puiss_barillet */
+ OCR_BAR = 0; /* vitesse moteur barillet nulle */
+ utils_delay_us ( DELAY_ ); /* attente_ d'1 s pour la puiss_barillet */
- OCR1B = 0; /* vitesse turb nulle */
- OCR1C = 0; /* vitesse turb nulle */
+ OCR_TURB_AVANT = 0; /* vitesse turb nulle */
+ OCR_TURB_ARRIERE = 0; /* vitesse turb nulle */
/* initialisation sens rotation */
PORTB &= ~_BV(4);
@@ -159,181 +171,214 @@ barillet_init (void)
EIMSK |= _BV(7) | _BV(6) | _BV(5) | _BV(4);
/* initialisation de la position du barillet */
- // XXX penser a mettre le barillet avec un trou vers l'avant du robot XXX
- pos_prec_ = ( PINE >> 4) & 3; // 00 00 00 XX
- pos_temp_ = pos_prec_;
- pos_a_aller_ = 0;
pos_actuel_ = 0;
pos_final_ = 0;
pos_lenteur_ = 0;
- etat_en_cours_ = SLEEP_;
- rebond_inter_av = 0;
- rebond_inter_ar = 0;
- attente = 0;
+ etat_en_cours_ = RESET;
+ attente_ = 0;
+ fourche_barillet_prec_ = (PINE >> 4) & 3;
}
-/***************************
- * init quand le jack part * XXX changer le nom et gerer autrament
- * *************************/
+/********************************
+ * fonction appelee dans le main *
+ * ******************************/
-void init_2_barillet(void)
+/** Initialise la position zero du barillet. */
+void
+barillet_init_zero (void)
{
- /* commencer a faire tourner les turbines */
- OCR1B = VITESSE_TURB_MAX_;
- OCR1C = VITESSE_TURB_MIN_;
- /* passer a l'etat suivant */
- etat_en_cours_ = STAND_BY_;
+ if (etat_en_cours_ == RESET)
+ {
+ OCR_BAR = VITESSE_BAR_MIN_;
+ etat_en_cours_ = INIT;
+ }
}
+/* Lance la procdure de collecte de toutes les balles de la table. */
+void
+barillet_lancement (void)
+{
+ if (etat_en_cours_ == SLEEP || etat_en_cours_ == STAND_BY_FULL)
+ {
+ /* Commencer a faire tourner les turbines. */
+ OCR_TURB_AVANT = VITESSE_TURB_MAX_;
+ OCR_TURB_ARRIERE = VITESSE_TURB_MIN_;
+ etat_en_cours_ = STAND_BY;
+ }
+}
-
-
-/********************************
- * fonction appelee dans le main *
- * ******************************/
-
-/* demande de rotation */
-void
-rotation (uint8_t pos_fin)
+/* Dodo. */
+void
+barillet_sleep (void)
{
- if (etat_en_cours_ == STAND_BY_)
+ if (etat_en_cours_ == STAND_BY || etat_en_cours_ == STAND_BY_FULL)
{
- pos_a_aller_ = pos_fin;
- etat_en_cours_ = ROTATION;
+ OCR_TURB_AVANT = 0;
+ OCR_TURB_ARRIERE = 0;
}
}
-/* demande d'extraction */
-void extraction ( void )
+
+/* Demande de rotation. */
+void
+rotation (uint8_t pos_final)
+{
+ if (etat_en_cours_ == STAND_BY || etat_en_cours_ == STAND_BY_FULL)
+ rotation_barillet (pos_final, ROTATION);
+}
+
+/* Demande d'extraction. */
+void
+extraction (void)
{
- if ( etat_en_cours_ == STAND_BY_ )
+ if (etat_en_cours_ == STAND_BY || etat_en_cours_ == STAND_BY_FULL)
{
- etat_en_cours_ = EXTRACTION;
+ etat_en_cours_ = AR_EX;
+ OCR_TURB_AVANT = VITESSE_TURB_MIN_;
+ OCR_TURB_ARRIERE = VITESSE_TURB_MAX_;
}
}
-/* demande de depot */
-void depot_balle ( void )
+
+/* Demande de depot. */
+void
+depot_balle (void)
{
- if ( etat_en_cours_ == STAND_BY_ )
+ if (etat_en_cours_ == STAND_BY || etat_en_cours_ == STAND_BY_FULL)
{
- etat_en_cours_ = DEPOT;
+ etat_en_cours_ = AR_DEP;
+ OCR_TURB_AVANT = VITESSE_TURB_MIN_;
+ OCR_TURB_ARRIERE = 0;
+ attente_ = 200;
}
}
-/* fonction main barillet */
void sequenceur_barillet()
{
static uint8_t old_pos_actuel = 0;
if (old_pos_actuel != pos_actuel_)
{
- proto_send2b('W', pos_actuel_, pos_temp_);
+ proto_send2b('W', pos_actuel_, fourche_barillet_prec_);
old_pos_actuel = pos_actuel_;
}
+ if (attente_)
+ {
+ attente_--;
+ return;
+ }
switch(etat_en_cours_)
{
- case SLEEP_ :
+ case RESET:
+ break;
+ case SLEEP:
+ break;
+ case STAND_BY:
+ break;
+ case STAND_BY_FULL:
break;
- case STAND_BY_ :
- break;
- case BALLE_AVALE_ATTENTE :
- new_balle();
+ case ROTATION_FIN:
+ // XXX ack
+ etat_en_cours_ = STAND_BY_FULL;
break;
- case TOURNE_ANALYSE_BALLE :
- // faire une rotation pour checker la couleur
- rotation_barillet( );
+ case AV_EX_VU:
+ /* Time out en cas de deux balles dans le trou avant. */
+ case AV_EX_PASSE:
+ rotation_barillet ((pos_actuel_ + 8) % 40, AV_EX_ROTATION);
break;
- case ANALYSE_BALLE :
- // lancer la fonction pour l'analyse balle
+ case AV_EX_FIN:
+ // XXX ack
+ etat_en_cours_ = STAND_BY_FULL;
break;
- case ROTATION :
- //appel de la fonction rotation_barillet
- rotation_barillet();
+ case AR_EX:
break;
- case ROTATION_EN_COURS :
+ case AR_EX_VU:
break;
- case EXTRACTION :
- //debut de l'extraction
- extraction_balle();
+ case AR_EX_PASSE:
+ rotation_barillet ((pos_actuel_ + 8) % 40, AR_EX_ROTATION);
break;
- case EXTRACTION_EN_COURS :
+ case AR_EX_FIN:
+ // XXX ack
+ etat_en_cours_ = STAND_BY_FULL;
break;
- case EXTRACTION_EN_HAUT :
- extraction_fin();
+ case AR_DEP:
+ // info PC104 que le timer est arriv expiration.
+ etat_en_cours_ = STAND_BY_FULL;
break;
- case DEPOT :
- depose_balle();
+ case AR_DEP_VU:
+ etat_en_cours_ = STAND_BY_FULL;
break;
- case DEPOT_EN_COURS :
+ case AR_DEP_PASSE:
+ OCR_TURB_ARRIERE = VITESSE_TURB_MIN_;
+ etat_en_cours_ = AR_DEP_FIN;
break;
- case DEPOT_FIN :
- depot_fin();
+ case AR_DEP_FIN:
+ // XXX ack
+ etat_en_cours_ = STAND_BY_FULL;
break;
default : break;
}
}
-
-
-
-
-/* **********************
- * ROTATION DU BARILLET *
- * **********************/
-void rotation_barillet(void)
+/** Dmare une rotation du barillet. */
+static void
+rotation_barillet (uint8_t pos_final, uint8_t etat)
{
uint8_t dist_trigo, dist_pas_trigo;
- pos_final_ = pos_a_aller_;
-
- if (pos_final_ != pos_actuel_)
+ uint8_t pos_actuel;
+ /* a a l'air con comme a, mais en fait la premire ligne recopie
+ * l'argument dans la variable globale et la seconde recopie la variable
+ * globale dans la variable locale. Intrt ? La variable globale est
+ * volatile donc lente accder. La variable locale ne l'est pas, donc on
+ * garde sa valeur dans un registre. Cool non ? */
+ pos_final_ = pos_final;
+ pos_actuel = pos_actuel_;
+ if (pos_final != pos_actuel)
{
- /* affecter le bon sens de rotation */
- dist_trigo = (40 + pos_final_ - pos_actuel_) % 40;
- dist_pas_trigo = (40 + pos_actuel_ - pos_final_) % 40;
-
- if ( dist_trigo < dist_pas_trigo )
+ /* Affecter le bon sens de rotation */
+ dist_trigo = (40 + pos_final - pos_actuel) % 40;
+ dist_pas_trigo = (40 + pos_actuel - pos_final) % 40;
+ if (dist_trigo < dist_pas_trigo)
{
+ /* Tourne dans le sens trigo. */
PORTB &= ~_BV(4);
- pos_lenteur_ = (pos_final_ + (40 - 2)) % 40;
+ pos_lenteur_ = (pos_final + (40 - 2)) % 40;
}
else
{
PORTB |= _BV(4);
- pos_lenteur_ = (pos_final_ + 2) % 40;
+ pos_lenteur_ = (pos_final + 2) % 40;
}
- utils_delay_us ( DELAY_ );
-
- vitesse_turbine ( 1,VITESSE_TURB_MIN_);
- vitesse_turbine ( 2,VITESSE_TURB_MIN_);
-
- /* affectation de la vitesse du barillet */
- if ( ( dist_pas_trigo < 4 ) || ( dist_trigo < 4 ) )
+ /* Delay pour la commutation du pont en H. */
+ utils_delay_us (DELAY_);
+ OCR_TURB_AVANT = VITESSE_TURB_MIN_;
+ OCR_TURB_ARRIERE = VITESSE_TURB_MIN_;
+ /* Affectation de la vitesse du barillet. */
+ if ((dist_pas_trigo <= 2) || (dist_trigo <= 2))
{
- OCR1A = VITESSE_BAR_MIN_;
+ OCR_BAR = VITESSE_BAR_MIN_;
}
else
{
- OCR1A = VITESSE_BAR_MAX_;
+ OCR_BAR = VITESSE_BAR_MAX_;
}
- etat_en_cours_ = ROTATION_EN_COURS;
+ etat_en_cours_ = etat;
}
else
- {
- etat_en_cours_ = STAND_BY_;
- }
+ etat_en_cours_ = ETAT_SUIVANT_ROTATION (etat);
}
/* gestion de la position du barillet */
-void pos_bar(void)
+static void
+pos_bar (void)
{
- uint8_t pos_conc_;
-
- // proto_send0('Z'); //debug interrupt
-
- pos_temp_ = ( PINE >> 4) & 3; // 00 00 00 XX
- pos_conc_ = ( pos_temp_ << 2 ) | pos_prec_;
-
- switch ( pos_conc_ )
- { // actu pres
+ uint8_t concat, fourche;
+ /* Ici, on place dans concat une valeur 0000nnoo, avec nn la nouvelle
+ * valeur, et oo l'ancienne valeur des fourches, et on mmorise la
+ * nouvelle valeur pour le prochain passage dans le coin. */
+ fourche = (PINE >> 4) & 3;
+ concat = (fourche << 2) | fourche_barillet_prec_;
+ fourche_barillet_prec_ = fourche;
+ switch ( concat )
+ { // actu prec
case 1 : // 00 01
case 7 : // 01 11
case 8 : // 10 00
@@ -357,24 +402,29 @@ void pos_bar(void)
default :
break;
}
- pos_prec_ = pos_temp_;
-
- if ( etat_en_cours_ == ROTATION_EN_COURS )
+ /* Transitions. */
+ if (EST_CE_UNE_ROTATION (etat_en_cours_))
{
- if ( pos_actuel_ == pos_lenteur_ )
+ if (pos_actuel_ == pos_lenteur_)
{
- OCR1A = VITESSE_BAR_MIN_;
+ OCR_BAR = VITESSE_BAR_MIN_;
}
- else if ( pos_actuel_ == pos_final_ )
+ else if (pos_actuel_ == pos_final_)
{
- OCR1A = 0;
- vitesse_turbine ( 1, VITESSE_TURB_MAX_); /* XXX a changer, il faut attendre que la PC104 nous disent : ok tu peux remettre le ventillo avant a fond, donc ce sera pas a mettre ici*/
- etat_en_cours_ = STAND_BY_;
+ OCR_BAR = 0;
+ etat_en_cours_ = ETAT_SUIVANT_ROTATION (etat_en_cours_);
}
}
+ /* Pour l'initialisation, il faut tre sur une position ou les deux
+ * fourches sont non coupes, et la troisime fourche aussi. */
+ else if (etat_en_cours_ == INIT && (fourche == 3) && (PINF & 0x01))
+ {
+ OCR_BAR = 0;
+ pos_actuel_ == 0;
+ etat_en_cours_ = SLEEP;
+ }
}
-
/**************************************
* CHANGEMENT DE VITESSE DES TURBINES *
**************************************/
@@ -383,25 +433,26 @@ void vitesse_turbine(uint8_t turbine, uint16_t vitesse)
if ( turbine == 1 )
{
if (vitesse > VITESSE_TURB_MAX_)
- OCR1B = VITESSE_TURB_MAX_;
+ OCR_TURB_AVANT = VITESSE_TURB_MAX_;
else
- OCR1B = vitesse;
+ OCR_TURB_AVANT = vitesse;
}
else if ( turbine == 2 )
{
if (vitesse > VITESSE_TURB_MAX_)
- OCR1C = VITESSE_TURB_MAX_;
+ OCR_TURB_ARRIERE = VITESSE_TURB_MAX_;
else
- OCR1C = vitesse;
+ OCR_TURB_ARRIERE = vitesse;
}
else if ( turbine == 3 ) // moteur barillet
{
if (vitesse > VITESSE_BAR_MAX_)
- OCR1A = VITESSE_BAR_MAX_;
+ OCR_BAR = VITESSE_BAR_MAX_;
else
- OCR1A = vitesse;
+ OCR_BAR = vitesse;
}
}
+
/**** changement de sens ****/
void sens(uint8_t sens_rotat)
{
@@ -415,8 +466,6 @@ void sens(uint8_t sens_rotat)
}
}
-
-
/* ******************************
* EXTRACTION ET DEPOT DE BALLE *
* ******************************/
@@ -424,153 +473,68 @@ void sens(uint8_t sens_rotat)
/* Si balle dans trou => Extraction */
void extraction_balle(void)
{
- rebond_inter_ar = 0;
/* Ralentir la turbine avant */
- vitesse_turbine( 1, VITESSE_TURB_MIN_);
+ OCR_TURB_AVANT = VITESSE_TURB_MIN_;
/* Vitesse max de la turbine arriere */
- vitesse_turbine( 2, VITESSE_TURB_MAX_);
-
- etat_en_cours_ = EXTRACTION_EN_COURS;
+ OCR_TURB_ARRIERE = VITESSE_TURB_MAX_;
+ etat_en_cours_ = AR_EX;
}
-/* fin d'extration de balle */
-void extraction_fin(void)
+/* ***************
+ * INTERRUPTIONS *
+ * ***************/
+
+/* interruption fourche optique turbine avant */
+SIGNAL (SIG_INTERRUPT6)
{
- if ( (PINE & 128 ) == 0 ) /* le Port E bit 7 est a 0 => plus de balle devant la barriere optique */
+ if (etat_en_cours_ == STAND_BY)
{
- ++attente;
- /* attendre que la balle soit bien montee */
- if ( attente >= 10 )
- {
- rebond_inter_ar = 0;
- vitesse_turbine( 2, VITESSE_TURB_MIN_);
- /* fin d'extraction - faire la rotation */
- pos_a_aller_ = ( 40 + pos_actuel_ + 8 ) % 40;
- etat_en_cours_ = TOURNE_ANALYSE_BALLE;
- }
+ etat_en_cours_ = AV_EX_VU;
+ attente_ = 200;
}
- else
+ else if (etat_en_cours_ == AV_EX_VU)
{
- // XXX que faire ???
+ etat_en_cours_ = AV_EX_PASSE;
+ attente_ = 200;
}
}
-/* deposer une balle dans un trou apres rotation */
-void depose_balle(void)
-{
- rebond_inter_ar = 0;
- /* vitesse turbine arriere nulle */
- vitesse_turbine( 2, 0);
- etat_en_cours_ = DEPOT_EN_COURS;
-}
-/* fin de la depose de balle */
-void depot_fin(void)
+/* interruption fourche optique turbine arriere */
+SIGNAL (SIG_INTERRUPT7)
{
- if ( (PINE & 128 ) == 0 ) /* le Port E bit 6 est a 0 => plus de balle devant la barriere optique */
+ if (etat_en_cours_ == AR_EX)
{
- ++attente;
- /* attendre que la balle soit bien montee */
- if ( attente >= 10 )
- {
- etat_inter_ar_ = 0;
- vitesse_turbine( 2, VITESSE_BAR_MIN_);
- etat_en_cours_ = STAND_BY_;
- }
+ etat_en_cours_ = AR_EX_VU;
}
- else
+ else if (etat_en_cours_ == AR_EX_VU)
{
- /* XXX que faire */
+ etat_en_cours_ = AR_EX_PASSE;
+ attente_ = 200;
}
-}
-
-
-/* ***********************
- * MONTEE DE BALLE AVANT *
- * ***********************/
-void new_balle(void)
-{
- if ( (PINE & 64 ) == 0 ) /* le Port E bit 6 est a 0 => plus de balle devant la barriere optique */
+ if (etat_en_cours_ == AR_DEP)
{
- ++attente;
- /* attendre que la balle soit bien montee */
- if ( attente >= 10 )
- {
- rebond_inter_av = 0;
- /* faire tourner le barillet pour voir la couleur */
- pos_a_aller_ = ( 40 + pos_actuel_ + 8 ) % 40;
- etat_en_cours_ = TOURNE_ANALYSE_BALLE;
- }
+ // dans le cas d'une descente, il se peut qu'il n'y ai
+ // pas de balle
+ etat_en_cours_ = AR_DEP_VU;
+ attente_ = 200;
}
-}
-
-
-
-
-/* ***************
- * INTERRUPTIONS *
- * ***************/
-
-/* interruption fourche optique turbine avant */
-SIGNAL ( SIG_INTERRUPT6 )
-{
- if ( etat_en_cours_ != SLEEP_ )
- {
- if ( rebond_inter_av == 0 )
- {
- rebond_inter_av == 1;
- OCR1B = VITESSE_TURB_MIN_;
- attente = 0;
- etat_en_cours_ = BALLE_AVALE_ATTENTE;
- //proto_send0('A');
- }
- }
-}
-
-/* interruption fourche optique turbine arriere */
-SIGNAL ( SIG_INTERRUPT7 )
-{
- if ( etat_en_cours_ != SLEEP_ )
+ else if (etat_en_cours_ == AR_DEP_VU)
{
- if ( rebond_inter_ar == 0 )
- {
- attente = 0;
- rebond_inter_ar = 1;
- if ( etat_en_cours_ == EXTRACTION_EN_COURS )
- {
- etat_en_cours_ = EXTRACTION_EN_HAUT;
- }
- else if ( etat_en_cours_ == DEPOT_EN_COURS )
- {
- /* remettre la vitesse turbine a min */
- vitesse_turbine( 2, VITESSE_TURB_MIN_);
- /* XXX verifier que la balle ne remonte pas */
- etat_en_cours_ = DEPOT_FIN;
- }
- //proto_send0('B');
- }
+ etat_en_cours_ = AR_DEP_PASSE;
+ attente_ = 200;
}
}
-
/* interruption fourche optique barillet 1 */
SIGNAL ( SIG_INTERRUPT5 )
{
- //proto_send0('A');
- if ( etat_en_cours_ != SLEEP_ )
- {
- pos_bar();
- }
+ pos_bar();
}
-
/* interruption fourche optique barillet 1 */
SIGNAL ( SIG_INTERRUPT4 )
{
- //proto_send0('B');
- if ( etat_en_cours_ != SLEEP_ )
- {
- pos_bar();
- }
+ pos_bar();
}
/* XXX dans la PC104, apres un depot, il faudra remmetre le barillet dans une des positions 00, 08, 10, 18, 20 ( position exa ) */
diff --git a/n/es-2006/src/barillet.h b/n/es-2006/src/barillet.h
index 5f67d60..b783782 100644
--- a/n/es-2006/src/barillet.h
+++ b/n/es-2006/src/barillet.h
@@ -31,8 +31,11 @@
/* fonction d'initialisation */
void barillet_init(void);
-/* fonction d'initialisation 2 */
-void init_2_barillet(void);
+/** Initialise la position zero du barillet. */
+void barillet_init_zero (void);
+
+/* fonction appelee pour lancer le barillet */
+void barillet_lancement (void);
/* changement de vitesse turbine */
void vitesse_turbine(uint8_t num_turb, uint16_t vitesse);
diff --git a/n/es-2006/src/main.c b/n/es-2006/src/main.c
index 5d79a4f..ecc80f0 100644
--- a/n/es-2006/src/main.c
+++ b/n/es-2006/src/main.c
@@ -108,8 +108,8 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
sensor_rvb_upper_sensors (args[0]);
break;
/* contact */
- case c ('i', 0 ):
- proto_send1b ('i', others_contact());
+ case c ('c', 0 ):
+ proto_send1b ('c', others_contact());
break;
/* jack */
case c ('j', 0 ):
@@ -137,21 +137,26 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
/* tests plus complexes de la gestion du barillet */
+ /* Initialise la position du barillet. */
+ case c ('i', 0):
+ barillet_init_zero ();
+ break;
/* bon on commence - le jack est parti */
case c ('g', 0):
- init_2_barillet(); // le nom est mal choisi, mais cette fonction sera gerer autrement quand le main sera fini
+ barillet_lancement();
+ break;
+ /* Coucouche panier. */
+ case c ('s', 0):
+ barillet_sleep ();
break;
-
/* deposer une balle du barillet */
case c ('d', 0):
depot_balle();
break;
-
/* extraire une balle */
case c ('e', 0):
extraction();
break;
-
/* rotation du barillet */
case c ('t', 1):
rotation(args[0]);