summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/getsamples_cb.c
diff options
context:
space:
mode:
authorNélio Laranjeiro2008-03-30 20:45:33 +0200
committerNélio Laranjeiro2008-03-30 20:45:33 +0200
commit0968f4428bd842b06b4218741b7a70f83f9517a4 (patch)
tree0d102370b9b193263839f0dceefd170b9e65aebf /digital/io/src/getsamples_cb.c
parent6b1099c487e9d7be85d4fbd513f9e5236d0d10d4 (diff)
Moved teh getsamples fsm.
Diffstat (limited to 'digital/io/src/getsamples_cb.c')
-rw-r--r--digital/io/src/getsamples_cb.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/digital/io/src/getsamples_cb.c b/digital/io/src/getsamples_cb.c
new file mode 100644
index 00000000..de10ac53
--- /dev/null
+++ b/digital/io/src/getsamples_cb.c
@@ -0,0 +1,116 @@
+/*
+ * THIS IS AN AUTOMATICALLY GENERATED FILE, DO NOT EDIT!
+ *
+ * Skeleton for get_samples callbacks implementation.
+ *
+ *
+ */
+#include "getsamples_cb.h"
+
+/*
+ * PREPARE_ARM =arm_moved=>
+ * => FORWARD_CONTROL
+ * Prepare the arm to the correct position.
+ */
+getsamples_branch_t
+getsamples__PREPARE_ARM__arm_moved (getsamples_t *user)
+{
+ // Try to end the position to the distributor.
+ asserv_set_x_position (user->distributor_x);
+ // Go to the color distributor.
+ asserv_set_y_position (user->distributor_y);
+ return getsamples_next (PREPARE_ARM, arm_moved);
+}
+
+/*
+ * FORWARD_CONTROL =position_reached=>
+ * => TAKE_SAMPLES
+ * End the position to the distributor.
+ */
+getsamples_branch_t
+getsamples__FORWARD_CONTROL__position_reached (getsamples_t *user)
+{
+ // Take as many samples as necessary. This shall be updated to verify the
+ asserv_move_arm (1666, 100);
+ return getsamples_next (FORWARD_CONTROL, position_reached);
+}
+
+/*
+ * START =ok=>
+ * => GO_TO_POSITION
+ * Go to the distributor. The distributor to reach shall be setted in the fsm structure.
+ */
+getsamples_branch_t
+getsamples__START__ok (getsamples_t *user)
+{
+ asserv_set_x_position (user->distributor_x - 20);
+ asserv_set_y_position (user->distributor_y - 20);
+ return getsamples_next (START, ok);
+}
+
+/**
+ * TAKE_SAMPLES =sample_took=>
+ * no_more => BACKWARD
+ * If the quantity of samples are tooked, then go backeward and conitnue classifying the samples.
+ * more => TAKE_SAMPLES
+ * Continue to take samples and classify the next sample.
+ */
+getsamples_branch_t
+getsamples__TAKE_SAMPLES__sample_took (getsamples_t *user)
+{
+ // Decrement the samples counter.
+ if (user->samples)
+ {
+ asserv_move_arm (1666, 100);
+ return getsamples_next_branch (TAKE_SAMPLES, sample_took, more);
+ }
+ else
+ {
+ asserv_move_arm (5000, 100);
+ // Try to end the position to the distributor.
+ asserv_set_x_position (user->distributor_x - 20);
+ // Go to the color distributor.
+ asserv_set_y_position (user->distributor_y - 20);
+
+ return getsamples_next_branch (TAKE_SAMPLES, sample_took, no_more);
+ }
+}
+
+/*
+ * BACKWARD =position_reached=>
+ * => END
+ * Ending this state machine.
+ */
+getsamples_branch_t
+getsamples__BACKWARD__position_reached (getsamples_t *user)
+{
+ return getsamples_next (BACKWARD, position_reached);
+}
+
+/*
+ * GO_TO_POSITION =position_failed=>
+ * => GO_TO_POSITION
+ * Go to another point before trying to go to this one again.
+ */
+getsamples_branch_t
+getsamples__GO_TO_POSITION__position_failed (getsamples_t *user)
+{
+ // TODO In this case i don't know what to do.
+ return getsamples_next (GO_TO_POSITION, position_failed);
+}
+
+/*
+ * GO_TO_POSITION =position_reached=>
+ * => PREPARE_ARM
+ * Go to the position desired, it is very near the position of the distributor in case it is a ice distributor or sample distributor.
+ */
+getsamples_branch_t
+getsamples__GO_TO_POSITION__position_reached (getsamples_t *user)
+{
+ // Put the ARM in the position to allow the robot to take samples from the
+ // distributor.
+ asserv_move_arm (625, 100);
+ return getsamples_next (GO_TO_POSITION, position_reached);
+}
+
+