root / branches / encoders / code / behaviors / encoder_test / main.c @ 754
History | View | Annotate | Download (1.18 KB)
1 |
|
---|---|
2 |
/* encoders_test: this behavior uses the encoders to move a given
|
3 |
* distance, specified by GO where GO/1024 is the number of wheel
|
4 |
* rotations.
|
5 |
* It first calibrates the motors by finding the minimum reading
|
6 |
* it can use to move them.
|
7 |
*/
|
8 |
|
9 |
#include <dragonfly_lib.h> |
10 |
//#define usb_puti(x) x
|
11 |
|
12 |
#define GO 2048 |
13 |
#define K 1 |
14 |
|
15 |
#define ABS(x) ((x>0)?x:-x) |
16 |
|
17 |
int main(void) |
18 |
{ |
19 |
int l=0,r=0; |
20 |
|
21 |
short int lmin=0,rmin=0; |
22 |
|
23 |
dragonfly_init(ALL_ON); |
24 |
|
25 |
encoders_init(); |
26 |
|
27 |
while(l<10){ |
28 |
l=encoder_get_dx(LEFT); |
29 |
motor1_set(FORWARD,++lmin); |
30 |
delay_ms(1);
|
31 |
} |
32 |
motor1_set(FORWARD,0);
|
33 |
|
34 |
while(r<10){ |
35 |
r=encoder_get_dx(RIGHT); |
36 |
motor2_set(FORWARD,++rmin); |
37 |
delay_ms(1);
|
38 |
} |
39 |
motor2_set(FORWARD,0);
|
40 |
|
41 |
usb_puts("lmin: ");usb_puti(lmin);
|
42 |
usb_puts(" rmin: ");usb_puti(rmin);usb_puts("\r\n"); |
43 |
|
44 |
while(1){ |
45 |
l=encoder_get_dx(LEFT); |
46 |
r=encoder_get_dx(RIGHT); |
47 |
|
48 |
l = (GO-l)/K; |
49 |
|
50 |
r = (GO-r)/K; |
51 |
|
52 |
if(l>255) |
53 |
l=255;
|
54 |
if(l<0) |
55 |
l=0;
|
56 |
|
57 |
if(r>255) |
58 |
r=255;
|
59 |
if(r<0) |
60 |
r=0;
|
61 |
|
62 |
usb_puti(l);usb_puts(" ");usb_puti(r);usb_puts("\r\n"); |
63 |
|
64 |
motor1_set(FORWARD,(l<lmin)?(lmin+5):l);
|
65 |
motor2_set(FORWARD,(r<rmin)?(rmin+5):r);
|
66 |
|
67 |
if(ABS(r)<2 && ABS(l)<2){ |
68 |
move(0,0); |
69 |
usb_puts("done!\r\n");
|
70 |
while(1); |
71 |
} |
72 |
|
73 |
} |
74 |
|
75 |
} |
76 |
|