root / trunk / code / projects / traffic_navigation / highways.c @ 1890
History | View | Annotate | Download (1.41 KB)
1 | 1876 | markwill | #include "highways.h" |
---|---|---|---|
2 | #include "lineDrive.h" |
||
3 | #include <dragonfly_lib.h> |
||
4 | 1890 | markwill | |
5 | 1877 | markwill | static int counti =0; |
6 | static long averagei = 0; |
||
7 | static int states = 0; |
||
8 | int canMerge = 1; |
||
9 | 1890 | markwill | void highwayStart(){
|
10 | canMerge = 1;
|
||
11 | } |
||
12 | int highwayFSM(){
|
||
13 | 1877 | markwill | switch(states){
|
14 | |||
15 | case 0: // Normal Drive |
||
16 | 1890 | markwill | { |
17 | int theCode = doDrive(225); |
||
18 | if(theCode != NORMAL && theCode >= 0) |
||
19 | return theCode;
|
||
20 | int range = range_read_distance(IR2);
|
||
21 | 1877 | markwill | usb_puti(range); |
22 | usb_puts(" : ");
|
||
23 | usb_puti(averagei); |
||
24 | usb_puts("\r\n");
|
||
25 | orb1_set_color(PURPLE); |
||
26 | if(range == -1){ |
||
27 | 1890 | markwill | range = 200;
|
28 | 1877 | markwill | } |
29 | counti ++; |
||
30 | averagei += range; |
||
31 | if(counti>= COUNT_MAX){
|
||
32 | if(averagei / COUNT_MAX < PASS_DISTANCE && canMerge)
|
||
33 | states = 1;
|
||
34 | averagei = 0;
|
||
35 | counti = 0;
|
||
36 | } |
||
37 | break;
|
||
38 | 1890 | markwill | } |
39 | case 1: |
||
40 | 1877 | markwill | merge(ILEFT); |
41 | states = 2;
|
||
42 | canMerge = 0;
|
||
43 | 1890 | markwill | case 2: |
44 | 1877 | markwill | if(doDrive(160) == FINISHED) states = 0; |
45 | orb1_set_color(BLUE); |
||
46 | break;
|
||
47 | } |
||
48 | 1890 | markwill | return 0; |
49 | 1877 | markwill | } |
50 | |||
51 | /*
|
||
52 | 1876 | markwill | void driveHighway( void ){
|
53 | doDrive(200);
|
||
54 | int range = range_read_distance(IR2);
|
||
55 | usb_puti(range);
|
||
56 | usb_puts(" : ");
|
||
57 | usb_puti(average);
|
||
58 | usb_puts("\r\n");
|
||
59 | if(range == -1){
|
||
60 | return;
|
||
61 | }
|
||
62 | |||
63 | count ++;
|
||
64 | average += range;
|
||
65 | if(count >= COUNT_MAX){
|
||
66 | if(state[0] != MERGELEFT){
|
||
67 | orb1_set_color(ORANGE);
|
||
68 | if(average / COUNT_MAX < PASS_DISTANCE){
|
||
69 | merge(ILEFT);
|
||
70 | usb_puts("MERGE \r\n");
|
||
71 | }
|
||
72 | }
|
||
73 | 1877 | markwill | |
74 | 1876 | markwill | count =0;
|
75 | average = 0;
|
||
76 | }
|
||
77 | //else orb1_set_color(GREEN);
|
||
78 | }
|
||
79 | 1877 | markwill | */ |