Project

General

Profile

Statistics
| Revision:

root / trunk / code / projects / traffic_navigation / highways.c @ 1992

History | View | Annotate | Download (1.97 KB)

1 1876 markwill
#include "highways.h"
2 1966 alevkoy
#include "../linefollowing/lineDrive.h"
3 1876 markwill
#include <dragonfly_lib.h>
4 1890 markwill
5 1966 alevkoy
static int changeLanes(void);   // declared here to preserve static status
6
7 1902 markwill
int counti =0;
8
long averagei = 0;
9
int states = 0;
10 1877 markwill
int canMerge = 1;
11 1899 markwill
12 1890 markwill
void highwayStart(){
13
        canMerge = 1;
14
}
15 1966 alevkoy
16
static int changeLanes()
17
{
18 1899 markwill
        if(counti<10000){
19
                counti++;
20
                motor_r_set(FORWARD,232);
21
                motor_l_set(FORWARD,200);
22
                return 0;
23
        }
24
        int colours[5];
25
        updateLine(colours);
26
        int pos = lineLocate(colours);
27
        if(pos >= 3 || pos <= -3){
28
                motor_r_set(FORWARD,187);
29
                motor_l_set(FORWARD,190);
30
                return 0;
31
        }
32
        counti = 0;
33
        return 1;
34
}
35 1966 alevkoy
36 1890 markwill
int highwayFSM(){
37 1877 markwill
        switch(states){
38
39
        case 0: // Normal Drive
40 1890 markwill
                {
41 1899 markwill
                int theCode = doDrive(205);
42 1900 markwill
                if(theCode != NORMAL && theCode >= 0)
43 1890 markwill
                        return theCode;
44 1900 markwill
                int range = range_read_distance(IR3);
45 1877 markwill
                usb_puti(range);
46
                       usb_puts(" : ");
47
                usb_puti(averagei);
48
                usb_puts("\r\n");
49 1969 azl
#ifdef ORB_HIGHWAY
50 1899 markwill
                orb1_set_color(CYAN);
51 1969 azl
#endif
52 1877 markwill
                       if(range == -1){
53 1900 markwill
                        range = PASS_DISTANCE+50;
54 1877 markwill
                }
55
                counti ++;
56
                averagei += range;
57
                if(counti>= COUNT_MAX){
58
                        if(averagei / COUNT_MAX < PASS_DISTANCE && canMerge)
59
                                states = 1;
60
                        averagei = 0;
61
                        counti = 0;
62
                }
63
                break;
64 1890 markwill
                }
65
        case 1:
66 1877 markwill
                        states = 2;
67
                        canMerge = 0;
68 1890 markwill
        case 2:
69 1899 markwill
                        if(changeLanes()){
70
                           states = 0;
71 1969 azl
#ifdef ORB_HIGHWAY
72 1899 markwill
                           orb1_set_color(GREEN);
73 1969 azl
#endif
74 1899 markwill
                        }
75 1969 azl
#ifdef ORB_HIGHWAY
76 1899 markwill
                        else orb1_set_color(YELLOW);
77 1969 azl
#endif
78 1877 markwill
                        break;
79
        }
80 1890 markwill
        return 0;
81 1877 markwill
}
82
83
/*
84 1876 markwill
void driveHighway( void ){
85
        doDrive(200);
86
        int range = range_read_distance(IR2);
87
        usb_puti(range);
88
        usb_puts(" : ");
89
        usb_puti(average);
90
        usb_puts("\r\n");
91
        if(range == -1){
92
                return;
93
        }
94

95
        count ++;
96
        average += range;
97
        if(count >= COUNT_MAX){
98
                if(state[0] != MERGELEFT){
99 1969 azl
#ifdef ORB_HIGHWAY
100 1876 markwill
                        orb1_set_color(ORANGE);
101 1969 azl
#endif
102 1876 markwill
                        if(average / COUNT_MAX < PASS_DISTANCE){
103
                                merge(ILEFT);
104
                                usb_puts("MERGE \r\n");
105
                        }
106
                }
107 1877 markwill

108 1876 markwill
                count =0;
109
                average = 0;
110
        }
111 1969 azl
#ifdef ORB_HIGHWAY
112 1876 markwill
        //else orb1_set_color(GREEN);
113 1969 azl
#endif
114 1876 markwill
}
115 1877 markwill
*/