root / trunk / code / projects / diagnostic_station / station / test_motors.c @ 1205
History | View | Annotate | Download (2.57 KB)
1 |
#include "test_motors.h" |
---|---|
2 |
#include "global.h" |
3 |
|
4 |
#include "comm_robot.h" |
5 |
|
6 |
// NB don't produce overflows!
|
7 |
#define vel_min 100 |
8 |
#define vel_max 250 |
9 |
#define vel_inc 10 |
10 |
#define vel_delay 200 |
11 |
|
12 |
static void test_motors_direction_velocity (uint8_t direction1, uint8_t direction2, uint8_t velocity) |
13 |
{ |
14 |
robot_set_motors (direction1, velocity, direction2, velocity); |
15 |
delay_ms (vel_delay); |
16 |
|
17 |
// wait (steady)
|
18 |
//
|
19 |
// reset_encoders ();
|
20 |
// for (measurements)
|
21 |
// {
|
22 |
// measure left/right
|
23 |
// wait
|
24 |
// }
|
25 |
} |
26 |
|
27 |
static void test_motors_direction (uint8_t direction1, uint8_t direction2) |
28 |
{ |
29 |
// Use 16 bit variable for vel to avoid problems with overflow (if vel=250 and 10 is added, it would be 260-256=4
|
30 |
// which is still smaller than vel_max). There are more elegant solutions to this problem, but this one is
|
31 |
// easy and performance is not an issue here anyway.
|
32 |
|
33 |
for (uint16_t vel=vel_min; vel<=vel_max; vel+=vel_inc)
|
34 |
test_motors_direction_velocity (direction1, direction2, vel); |
35 |
|
36 |
// Send data
|
37 |
for (uint8_t i=1; i<=2; ++i) |
38 |
{ |
39 |
uint8_t direction=(i==1)?direction1:direction2;
|
40 |
|
41 |
if (direction!=motor_direction_off)
|
42 |
{ |
43 |
usb_puts ("data motor ");
|
44 |
usb_puti (i); |
45 |
usb_puts (" ");
|
46 |
usb_puts (motor_direction_string (direction)); |
47 |
usb_puts (" increasing ");
|
48 |
usb_puts (" 160/100 170/200 180/300 190/400 200/500 210/600 220/700" NL);
|
49 |
} |
50 |
} |
51 |
|
52 |
// TODO code duplication
|
53 |
|
54 |
for (uint16_t vel=vel_max; vel>=vel_min; vel-=vel_inc)
|
55 |
test_motors_direction_velocity (direction1, direction2, vel); |
56 |
|
57 |
// Send data
|
58 |
for (uint8_t i=1; i<=2; ++i) |
59 |
{ |
60 |
uint8_t direction=(i==1)?direction1:direction2;
|
61 |
|
62 |
if (direction!=motor_direction_off)
|
63 |
{ |
64 |
usb_puts ("data motor ");
|
65 |
usb_puti (i); |
66 |
usb_puts (" ");
|
67 |
usb_puts (motor_direction_string (direction)); |
68 |
usb_puts (" decreasing ");
|
69 |
usb_puts (" 220/700 210/600 200/500 190/400 180/300 170/200 160/100" NL);
|
70 |
} |
71 |
} |
72 |
|
73 |
|
74 |
} |
75 |
|
76 |
|
77 |
void test_motor_all (void) |
78 |
{ |
79 |
usb_puts("# Testing motors" NL);
|
80 |
|
81 |
test_motors_direction (motor_direction_forward, motor_direction_backward); |
82 |
test_motors_direction (motor_direction_backward, motor_direction_forward); |
83 |
|
84 |
robot_set_motors_off (); |
85 |
|
86 |
usb_puts("# Testing motors finished" NL);
|
87 |
} |
88 |
|
89 |
void test_motor (uint8_t num)
|
90 |
{ |
91 |
if (num==1) |
92 |
{ |
93 |
test_motors_direction (motor_direction_forward, motor_direction_off); |
94 |
test_motors_direction (motor_direction_backward, motor_direction_off); |
95 |
} |
96 |
else if (num==2) |
97 |
{ |
98 |
test_motors_direction (motor_direction_off, motor_direction_forward); |
99 |
test_motors_direction (motor_direction_off, motor_direction_backward); |
100 |
} |
101 |
} |