From e5949c0b3a7995d9f0908e151152731278b1db84 Mon Sep 17 00:00:00 2001 From: jp7g21 <jp7g21@soton.ac.uk> Date: Sat, 13 Nov 2021 21:34:28 +0000 Subject: [PATCH] Improved shake, added debug mode --- duck/duck.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/duck/duck.c b/duck/duck.c index cf2c4d3..1735615 100644 --- a/duck/duck.c +++ b/duck/duck.c @@ -5,19 +5,26 @@ #include <stdlib.h> #include "../libduck/libduck.h" -#define SHAKE_ANGLE 45 +#define SHAKE_ANGLE 90 #define SHAKE_T 300 -void shake(int motor, int number) +void shake(int motor, int number, int min, int max, int delay) { - for (int j=0; j < number; j++) { - duck_set_position(motor, -SHAKE_ANGLE); - duck_delay(SHAKE_T); - duck_set_position(motor, SHAKE_ANGLE); - duck_delay(2 * SHAKE_T); - duck_set_position(motor, 0); - duck_delay(SHAKE_T); + int delay1 = (delay * (-min)) / (max - min); + int delay2 = delay - delay1; + + duck_set_position(motor, min); + duck_delay(delay1); + + for (int j=0; j < number-1; j++) { + duck_set_position(motor, max); + duck_delay(delay); + duck_set_position(motor, min); + duck_delay(delay); } + + duck_set_position(motor, 0); + duck_delay(delay2); } int main(int argc, char **argv) @@ -26,8 +33,11 @@ int main(int argc, char **argv) const char *fname = DEFAULT_DUCK_FNAME; char buf[100]; - while ((option=getopt(argc, argv, "t:")) != -1) { + while ((option=getopt(argc, argv, "t:d")) != -1) { switch (option) { + case 'd': + duck_debug_mode = 1; + break; case 't': strncpy(buf, optarg, 100); fname = buf; @@ -60,13 +70,19 @@ int main(int argc, char **argv) } else if (strcmp(argv[i], "headshake") == 0) { if (argv[i+1]) { int numshakes = atoi(argv[i+1]); - shake(MOTOR_1, numshakes); + shake(MOTOR_3, numshakes, -90, 90, 250); i++; } } else if (strcmp(argv[i], "nod") == 0) { if (argv[i+1]) { int numnods = atoi(argv[i+1]); - shake(MOTOR_2, numnods); + shake(MOTOR_2, numnods, -90, 0, 250); + i++; + } + } else if (strcmp(argv[i], "facepalm") == 0) { + if (argv[i+1]) { + int numnods = atoi(argv[i+1]); + shake(MOTOR_2, numnods, -90, 0, 250); i++; } } -- GitLab