summaryrefslogtreecommitdiff
path: root/n/es/src
diff options
context:
space:
mode:
authorburg2005-04-29 23:44:43 +0000
committerburg2005-04-29 23:44:43 +0000
commit9f5a860dd57faab7e3d8e7915a373de1f26cc611 (patch)
treea298187587e1417f03e5fad7ccf86f737cf6eb52 /n/es/src
parent762682a040987d56b9f12685c103cad4621912b8 (diff)
Mise en commentaire du STuFF à Snayle qui compile pas pour la gestion des
fromages Gestion de l'ascenseur avec un automate d'état. Epuration du protocole de commande.
Diffstat (limited to 'n/es/src')
-rw-r--r--n/es/src/ascenseur.c133
-rw-r--r--n/es/src/ascenseur.h16
-rw-r--r--n/es/src/main.c89
3 files changed, 125 insertions, 113 deletions
diff --git a/n/es/src/ascenseur.c b/n/es/src/ascenseur.c
index 0cbe866..964ca41 100644
--- a/n/es/src/ascenseur.c
+++ b/n/es/src/ascenseur.c
@@ -32,7 +32,7 @@
uint8_t ascenseur_vitesse_voulue;
uint8_t ascenseur_vitesse;
uint8_t ascenseur_min_monte = 0x20;
-uint8_t ascenseur_max_monte = 0x03;
+uint8_t ascenseur_max_monte = 0x05;
uint8_t ascenseur_accel_monte = 1;
uint8_t ascenseur_min_descend = 0x10;
uint8_t ascenseur_max_descend = 0x01;
@@ -40,7 +40,10 @@ uint8_t ascenseur_accel_descend = 1;
uint8_t ascenseur_max;
uint8_t ascenseur_min;
uint8_t ascenseur_accel;
-uint8_t ascenseur_state = ASCENSEUR_LIBRE;
+uint8_t ascenseur_state = WAIT;
+uint8_t asc_ordre;
+uint8_t asc_message;
+
#define TC_STOP 0x00
#define TC_GO 0x1f /* mode CTC | OC2 | prescaler = 128. */
@@ -58,76 +61,86 @@ static uint8_t capteur_milieu();
static void asc_libre(void);
static void ascenseur_update_vitesse (void);
-
void ascenseur_init ()
{
TCCR2 = TC_STOP;
+ ascenseur_state = WAIT;
+ asc_libre();
}
void ascenseur_update ()
{
switch (ascenseur_state)
{
- case ASCENSEUR_LIBRE:
- asc_libre ();
- break;
- case ASCENSEUR_STOP:
- asc_stable ();
- break;
- case ASCENSEUR_MONTE:
- if (capteur_haut ())
- {
- ascenseur_state = ASCENSEUR_MONTE_STOP;
- ascenseur_vitesse_voulue = ascenseur_min;
- }
- ascenseur_update_vitesse ();
- asc_haut (ascenseur_vitesse);
- break;
- case ASCENSEUR_MONTE_STOP:
- if (!capteur_haut ())
- {
- ascenseur_state = ASCENSEUR_STOP;
- }
- ascenseur_update_vitesse ();
- asc_haut (ascenseur_vitesse);
- break;
- case ASCENSEUR_DESCEND:
- if (capteur_bas ())
- {
- ascenseur_state = ASCENSEUR_DESCEND_STOP;
- ascenseur_vitesse_voulue = ascenseur_min;
- }
- ascenseur_update_vitesse ();
- asc_bas (ascenseur_vitesse);
- break;
- case ASCENSEUR_DESCEND_STOP:
- if (!capteur_bas ())
- {
- ascenseur_state = ASCENSEUR_STOP;
- }
- ascenseur_update_vitesse ();
- asc_bas (ascenseur_vitesse);
- break;
- case ASCENSEUR_MILIEU:
- if (capteur_milieu ())
- {
- ascenseur_state = ASCENSEUR_MILIEU_STOP;
- ascenseur_vitesse_voulue = ascenseur_min;
- }
- ascenseur_update_vitesse ();
- asc_bas (ascenseur_vitesse);
- break;
- case ASCENSEUR_MILIEU_STOP:
- if (!capteur_milieu ())
- {
- ascenseur_state = ASCENSEUR_STOP;
- }
- ascenseur_update_vitesse ();
- asc_bas (ascenseur_vitesse);
- break;
+ case CMD_Mgrande: // monter à vive allure
+ ascenseur_update_vitesse ();
+ asc_haut (ascenseur_vitesse);
+ asc_message = 255;
+ if (capteur_haut())
+ ascenseur_state = CMD_Mpetite;
+ else
+ ascenseur_state = CMD_Mgrande;
+ break;
+ case CMD_Mpetite: // monter en réduisant la vitesse
+ ascenseur_vitesse_voulue = ascenseur_min;
+ ascenseur_update_vitesse ();
+ asc_haut (ascenseur_vitesse);
+ asc_message = 255;
+ if (capteur_bas())
+ ascenseur_state = ERR;
+ else if (capteur_haut())
+ ascenseur_state = CMD_Mpetite;
+ else
+ ascenseur_state = TENIR;
+ break;
+ case TENIR: // maintenir le mobile en haut
+ asc_stable();
+ if (asc_message != 0) asc_message = 1;
+ if (capteur_bas())
+ ascenseur_state = ERR;
+ else if (asc_ordre == 0x02)
+ {
+ ascenseur_state = CMD_D;
+ asc_ordre = 0;
+ }
+ else
+ ascenseur_state = TENIR;
+ break;
+ case CMD_D: // descente du mobile
+ ascenseur_vitesse_voulue = ascenseur_max;
+ ascenseur_update_vitesse ();
+ asc_bas (ascenseur_vitesse);
+ asc_message = 255;
+ if (!capteur_bas())
+ ascenseur_state = CMD_D;
+ else
+ ascenseur_state = WAIT;
+ break;
+ case WAIT: // attente mobile normalement en bas
+ asc_libre();
+ asc_message = 255;
+ if (capteur_bas() && (asc_ordre ==0x01 ))
+ {
+ ascenseur_state = CMD_Mgrande;
+ asc_ordre = 0;
+ }
+ else
+ ascenseur_state = WAIT;
+ break;
+ case ERR: // etat d'erreur
+ if (asc_message != 0) asc_message = 2;
+ asc_libre();
+ if (capteur_bas() && (asc_ordre == 0x01))
+ {
+ ascenseur_state = CMD_Mgrande;
+ asc_ordre = 0;
+ }
+ else
+ ascenseur_state = ERR;
}
}
+
static void
ascenseur_update_vitesse (void)
{
diff --git a/n/es/src/ascenseur.h b/n/es/src/ascenseur.h
index cf8ddac..31783c8 100644
--- a/n/es/src/ascenseur.h
+++ b/n/es/src/ascenseur.h
@@ -26,14 +26,12 @@
#include <stdint.h>
-#define ASCENSEUR_LIBRE 0
-#define ASCENSEUR_STOP 1
-#define ASCENSEUR_MONTE 2
-#define ASCENSEUR_MONTE_STOP 3
-#define ASCENSEUR_DESCEND 4
-#define ASCENSEUR_DESCEND_STOP 5
-#define ASCENSEUR_MILIEU 6
-#define ASCENSEUR_MILIEU_STOP 7
+#define CMD_Mgrande 0
+#define CMD_Mpetite 1
+#define TENIR 2
+#define CMD_D 3
+#define WAIT 4
+#define ERR 5
extern uint8_t ascenseur_vitesse_voulue;
extern uint8_t ascenseur_vitesse;
@@ -47,6 +45,8 @@ extern uint8_t ascenseur_max;
extern uint8_t ascenseur_min;
extern uint8_t ascenseur_accel;
extern uint8_t ascenseur_state;
+extern uint8_t asc_ordre;
+extern uint8_t asc_message;
void ascenseur_init ();
void ascenseur_update ();
diff --git a/n/es/src/main.c b/n/es/src/main.c
index 2394884..fc49dc7 100644
--- a/n/es/src/main.c
+++ b/n/es/src/main.c
@@ -136,27 +136,41 @@ int main (void)
PORTB &= ~_BV (1);
}
}
-
- if (socle) // active les fonctions liées au socle.
- {
- adc_start (pin_socle1); // pin socle1 sélectionnée
- while(!adc_checkf()){}
- valeur_socle1 = adc_read();
-
- adc_start (pin_socle2); // pin socle2 sélectionnée
- while(!adc_checkf()){}
- valeur_socle2 = adc_read();
-
- nb_valeur_socle++;
- if(valeur_socle1 > SEUIL_SOCLE || valeur_socle2 > SEUIL_SOCLE) tableau_socle[nb_valeur_socle & 15] = 1;
- else tableau_socle[nb_valeur_socle & 15] = 0;
-
-
- for(temp = 0; temp < 16 ;temp++)
- valeur_socle = tableau_socle[temp];
-
- twi_update ((uint8_t *) valeur >> 3)
- }
+ switch(asc_message) /* Affiche les messages de retour de
+ l'ascenceur :
+ 1 ascenseur en haut en attente.
+ 2 ascenseur en bas mais suite à un
+ disfonctionement
+ 255 valeur réservée à la réactivation
+ du message (Ne pas utiliser ici)
+ */
+ {
+ case 1 : proto_send0('T'); break;
+ case 2 : proto_send0('E'); break;
+ }
+
+// Stuff a Snayle qui compile pas :-(
+//
+// if (socle) // active les fonctions liées au socle.
+// {
+// adc_start (pin_socle1); // pin socle1 sélectionnée
+// while(!adc_checkf()){}
+// valeur_socle1 = adc_read();
+//
+// adc_start (pin_socle2); // pin socle2 sélectionnée
+// while(!adc_checkf()){}
+// valeur_socle2 = adc_read();
+//
+// nb_valeur_socle++;
+// if(valeur_socle1 > SEUIL_SOCLE || valeur_socle2 > SEUIL_SOCLE) tableau_socle[nb_valeur_socle & 15] = 1;
+// else tableau_socle[nb_valeur_socle & 15] = 0;
+//
+//
+// for(temp = 0; temp < 16 ;temp++)
+// valeur_socle = tableau_socle[temp];
+//
+// twi_update ((uint8_t *) valeur >> 3)
+// }
}
}
@@ -195,7 +209,7 @@ void proto_callback (uint8_t cmd, uint8_t size,uint8_t* args)
ascenseur_accel = ascenseur_accel_monte;
ascenseur_vitesse = ascenseur_min;
ascenseur_vitesse_voulue = ascenseur_max;
- ascenseur_state = ASCENSEUR_MONTE;
+ asc_ordre = 0x01;
}break;
case c ('d',0): { // ordre de descendre l'ascenseur
@@ -206,30 +220,9 @@ void proto_callback (uint8_t cmd, uint8_t size,uint8_t* args)
ascenseur_accel = ascenseur_accel_descend;
ascenseur_vitesse = ascenseur_min;
ascenseur_vitesse_voulue = ascenseur_max;
- ascenseur_state = ASCENSEUR_DESCEND;
- }break;
-
- case c ('n',0): { // ordre de nilieuser l'ascenseur
- etat = 1;
- ascenseur = 1;
- ascenseur_min = ascenseur_min_descend;
- ascenseur_max = ascenseur_max_descend;
- ascenseur_accel = ascenseur_accel_descend;
- ascenseur_vitesse = ascenseur_min;
- ascenseur_vitesse_voulue = ascenseur_max;
- ascenseur_state = ASCENSEUR_MILIEU;
+ asc_ordre = 0x02;
}break;
- case c ('s',0): { // ordre de stabiliser l'ascenseur
- etat = 1;
- ascenseur = 1;
- ascenseur_state = ASCENSEUR_STOP;
- }break;
- case c ('l',0): { // ordre de stabiliser l'ascenseur
- etat = 1;
- ascenseur = 1;
- ascenseur_state = ASCENSEUR_LIBRE;
- }break;
case c ('P',6): { // parametrage
ascenseur_min_monte = args[0];
ascenseur_max_monte = args[1];
@@ -238,10 +231,16 @@ void proto_callback (uint8_t cmd, uint8_t size,uint8_t* args)
ascenseur_max_descend = args[4];
ascenseur_accel_descend = args[5];
}break;
- case c ('v',1): {
+ case c ('v',1): { // ordre décrochage de la
+ // ventouse
ventouse = args[0];
PORTB |= _BV (1);
}break;
+ case c ('F',1): {
+ // reset du message de
+ // l'ascenseur.
+ asc_message = args[0];
+ }break;
default:
proto_send0 ('?');