Project

General

Profile

Statistics
| Revision:

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