summaryrefslogtreecommitdiff
path: root/2004/n/asserv/src/motor.c
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/asserv/src/motor.c')
-rw-r--r--2004/n/asserv/src/motor.c48
1 files changed, 44 insertions, 4 deletions
diff --git a/2004/n/asserv/src/motor.c b/2004/n/asserv/src/motor.c
index 242ff74..aab34cf 100644
--- a/2004/n/asserv/src/motor.c
+++ b/2004/n/asserv/src/motor.c
@@ -50,6 +50,10 @@ unsigned int motor_stat_delay; /* Delay between stats. */
unsigned int motor_stat_delay_cpt; /* Delay counter. */
short motor_cpt; /* Report motors counters. */
+/* Entrées. */
+unsigned int motor_gpi_delay; /* Delais entre deux envois. */
+unsigned int motor_gpi_delay_cpt; /* Compteur. */
+
/* Moteurs. */
signed int motor_g_vdes, motor_g_vacc; /* Vitesse désirée, actuelle. */
signed int motor_d_vdes, motor_d_vacc;
@@ -83,6 +87,8 @@ motor_init (void)
motor_stat_delay = 0;
motor_stat_delay_cpt = 0;
motor_cpt = 0;
+ motor_gpi_delay = 0;
+ motor_gpi_delay_cpt = 0;
motor_g_vdes = 0; motor_g_vacc = 0;
motor_d_vdes = 0; motor_d_vacc = 0;
motor_g_cpt_av = 0; motor_g_cpt_ar = 0;
@@ -389,11 +395,19 @@ motor_main (void)
}
}
/* Accélère. */
- if (!--motor_a_cpt)
+ if (motor_a)
+ {
+ if (!--motor_a_cpt)
+ {
+ motor_update_left_speed ();
+ motor_update_right_speed ();
+ motor_a_cpt = motor_a;
+ }
+ }
+ else
{
- motor_update_left_speed ();
- motor_update_right_speed ();
- motor_a_cpt = motor_a;
+ motor_g_vacc = motor_g_vdes;
+ motor_d_vacc = motor_d_vdes;
}
}
/* Le reste. */
@@ -413,6 +427,15 @@ motor_main (void)
serial_send_motor_cpt (motor_g_cpt, motor_d_cpt);
serial_unreliable_send_eob ();
}
+ /* GPI. */
+ if (motor_gpi_delay)
+ {
+ if (!--motor_gpi_delay_cpt)
+ {
+ serial_send_gpi (input_d ());
+ motor_gpi_delay_cpt = motor_gpi_delay;
+ }
+ }
}
motor_pid_int++;
}
@@ -422,6 +445,7 @@ motor_main (void)
short
motor_parse (void)
{
+ int temp;
switch (serial_recv_com ())
{
case 'v':
@@ -472,6 +496,22 @@ motor_parse (void)
motor_toggle_asservi ();
serial_send_ok ();
return 1;
+ case 'h':
+ serial_recv_int (motor_gpi_delay);
+ motor_gpi_delay_cpt = motor_gpi_delay;
+ serial_send_ok ();
+ return 1;
+ case 'k':
+ serial_recv_int (temp);
+ output_b (temp);
+ serial_send_ok ();
+ return 1;
+ case 'D':
+ serial_recv_int (temp);
+ if (temp == 0x42)
+ enable_interrupts (INT_EXT);
+ serial_send_ok ();
+ return 1;
default:
return 0;
}