Project

General

Profile

Revision 753

it basically works! It calibrates the motors then drives in a mostly straight line

View differences:

branches/encoders/code/behaviors/encoder_test/main.c
1 1
#include <dragonfly_lib.h>
2 2
//#define usb_puti(x) x
3 3

  
4
#define GO 1024
5
#define K 1
6

  
7
#define ABS(x) ((x>0)?x:-x)
8

  
4 9
int main(void)
5 10
{
11
  int l=0,r=0;
12

  
13
  short int lmin=0,rmin=0;
14

  
6 15
	dragonfly_init(ALL_ON);
7 16

  
8 17
	encoders_init();
9 18

  
10
	move(200,0);
11
	
19
	while(l<4){
20
	  l=encoder_get_dx(LEFT);
21
	  motor1_set(FORWARD,++lmin);
22
	  delay_ms(1);
23
	}
24
	motor1_set(FORWARD,0);
25

  
26
	while(r<4){
27
	  r=encoder_get_dx(RIGHT);
28
	  motor2_set(FORWARD,++rmin);
29
	  delay_ms(1);
30
	}
31
	motor2_set(FORWARD,0);
32

  
33
	usb_puts("lmin: ");usb_puti(lmin);
34
	usb_puts(" rmin: ");usb_puti(rmin);usb_puts("\r\n");
35

  
12 36
	while(1){
13
		usb_puti(encoder_get_dx(LEFT));
14
		usb_puts(" ");
15
		usb_puti(encoder_get_dx(RIGHT));
16
		usb_puts("\r\n");
37
		l=encoder_get_dx(LEFT);
38
		r=encoder_get_dx(RIGHT);
39

  
40
		l = (GO-l)/K;
41

  
42
		r = (GO-r)/K;
43

  
44
		if(l>255)
45
		  l=255;
46
		if(l<0)
47
		  l=0;
48

  
49
		if(r>255)
50
		  r=255;
51
		if(r<0)
52
		  r=0;
53

  
54
		usb_puti(l);usb_puts(" ");usb_puti(r);usb_puts("\r\n");
55

  
56
		motor1_set(FORWARD,(l<lmin)?(lmin+5):l);
57
		motor2_set(FORWARD,(r<rmin)?(rmin+5):r);
58

  
59
		if(ABS(r)<2 && ABS(l)<2){
60
		  move(0,0);
61
		  usb_puts("done!\r\n");
62
		  while(1);
63
		}
64

  
17 65
	}
18 66

  
19 67
}

Also available in: Unified diff