Subversion Repositories svnkaklik

Rev

Rev 1 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 1 Rev 5
1
#define THRESHOLD  44     // rozhodovaci uroven mezi cernou a bilou
1
#define THRESHOLD  44     // rozhodovaci uroven mezi cernou a bilou
2
#define RED_WHITE  60     // maximum bile na cervenem senzoru
2
#define RED_WHITE  60     // maximum bile na cervenem senzoru
3
#define MLEFT     OUT_A
3
#define MLEFT     OUT_A
4
#define MRIGHT    OUT_C
4
#define MRIGHT    OUT_C
5
#define BLUE      SENSOR_1
5
#define BLUE      SENSOR_1
6
#define RED       SENSOR_2
6
#define RED       SENSOR_2
7
#define BBUMPER   SENSOR_3
7
#define BBUMPER   SENSOR_3
8
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
8
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
9
 
9
 
10
int semafor;
10
int semafor;
11
 
11
 
12
task main()
12
task main()
13
{
13
{
14
  PlaySound (SOUND_DOUBLE_BEEP);
14
  PlaySound (SOUND_DOUBLE_BEEP);
15
  Wait(500); // 5s podle pravidel
15
  Wait(500); // 5s podle pravidel
16
  SetSensor(BLUE,SENSOR_LIGHT);   // senzor na caru modry
16
  SetSensor(BLUE,SENSOR_LIGHT);   // senzor na caru modry
17
  SetSensor(RED,SENSOR_LIGHT);   // senzor na caru cerveny
17
  SetSensor(RED,SENSOR_LIGHT);   // senzor na caru cerveny
18
  SetSensor(BBUMPER, SENSOR_TOUCH);  // naraznik modry
18
  SetSensor(BBUMPER, SENSOR_TOUCH);  // naraznik modry
19
  SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
19
  SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
20
  SetPower (MLEFT,OUT_FULL);
20
  SetPower (MLEFT,OUT_FULL);
21
  SetPower (MRIGHT,OUT_FULL);
21
  SetPower (MRIGHT,OUT_FULL);
22
  SetDirection(MLEFT, OUT_FWD);
22
  SetDirection(MLEFT, OUT_FWD);
23
  SetDirection(MRIGHT, OUT_FWD);
23
  SetDirection(MRIGHT, OUT_FWD);
24
 
24
 
25
//  k_care();
25
//  k_care();
26
  OnFwd (MLEFT);                  // dojezd k care
26
  OnFwd (MLEFT);                  // dojezd k care
27
  OnFwd (MRIGHT);                  // dojezd k care
27
  OnFwd (MRIGHT);                  // dojezd k care
28
  Wait(50);
28
  Wait(50);
29
  GoRed();
29
  GoRed();
30
 
30
 
31
  start red_bumper;
31
  start red_bumper;
32
  start blue_bumper;
32
  start blue_bumper;
33
  start cara_cervena;
33
  start cara_cervena;
34
  start cara_modra;
34
  start cara_modra;
35
  semafor = false;
35
  semafor = false;
36
 
36
 
37
  ClearTimer (0);
37
  ClearTimer (0);
38
  start stochastika;
38
  start stochastika;
39
}
39
}
40
 
40
 
41
task stochastika()
41
task stochastika()
42
{
42
{
43
   while (true)
43
   while (true)
44
   {
44
   {
45
     Wait(500);
45
     Wait(500);
46
     if (semafor) start blue_bumper;
46
     if (semafor) start blue_bumper;
47
 
47
 
48
     PlaySound (SOUND_CLICK);
48
     PlaySound (SOUND_CLICK);
49
 
49
 
50
     OnFwd (MLEFT);                  // dojezd k care
50
     OnFwd (MLEFT);                  // dojezd k care
51
     OnFwd (MRIGHT);                 // dojezd k care
51
     OnFwd (MRIGHT);                 // dojezd k care
52
     while (BLUE > THRESHOLD);
52
     while (BLUE > THRESHOLD);
53
     GoRed();
53
     GoRed();
54
     OnRev (MLEFT);
54
     OnRev (MLEFT);
55
     OnRev (MRIGHT);
55
     OnRev (MRIGHT);
56
     Wait(100);              // popojed kus
56
     Wait(100);              // popojed kus
57
     Zatoc();
57
     Zatoc();
58
 
58
 
59
     ClearTimer (0);
59
     ClearTimer (0);
60
   }
60
   }
61
}
61
}
62
 
62
 
63
void GoBlue()
63
void GoBlue()
64
{
64
{
65
  OnFwd (MLEFT);
65
  OnFwd (MLEFT);
66
  OnFwd (MRIGHT);
66
  OnFwd (MRIGHT);
67
  Wait(100);              // popojed kus
67
  Wait(100);              // popojed kus
68
  Off(MLEFT);
68
  Off(MLEFT);
69
  Off(MRIGHT);
69
  Off(MRIGHT);
70
}
70
}
71
 
71
 
72
void GoRed()
72
void GoRed()
73
{
73
{
74
  OnRev (MLEFT);
74
  OnRev (MLEFT);
75
  OnRev (MRIGHT);
75
  OnRev (MRIGHT);
76
  Wait(100);              // popojed kus
76
  Wait(100);              // popojed kus
77
  Off(MLEFT);
77
  Off(MLEFT);
78
  Off(MRIGHT);
78
  Off(MRIGHT);
79
}
79
}
80
 
80
 
81
void Zatoc()
81
void Zatoc()
82
{
82
{
83
  switch (Random(2))
83
  switch (Random(2))
84
  {
84
  {
85
    case 0:
85
    case 0:
86
     OnRev (MLEFT);
86
     OnRev (MLEFT);
87
     OnFwd (MRIGHT);
87
     OnFwd (MRIGHT);
88
     break;
88
     break;
89
    case 1:
89
    case 1:
90
     OnFwd (MLEFT);
90
     OnFwd (MLEFT);
91
     OnRev (MRIGHT);
91
     OnRev (MRIGHT);
92
     break;
92
     break;
93
    case 2:
93
    case 2:
94
     OnRev (MLEFT);
94
     OnRev (MLEFT);
95
     OnRev (MRIGHT);
95
     OnRev (MRIGHT);
96
  }
96
  }
97
  Wait(100);              // popojed kus
97
  Wait(100);              // popojed kus
98
  Off(MLEFT);
98
  Off(MLEFT);
99
  Off(MRIGHT);
99
  Off(MRIGHT);
100
}
100
}
101
 
101
 
102
void k_care()  // najed do vyckavaci pozice
102
void k_care()  // najed do vyckavaci pozice
103
{
103
{
104
  OnFwd (MLEFT);                  // dojezd k care
104
  OnFwd (MLEFT);                  // dojezd k care
105
  OnFwd (MRIGHT);                  // dojezd k care
105
  OnFwd (MRIGHT);                  // dojezd k care
106
  while (BLUE > THRESHOLD);
106
  while (BLUE > THRESHOLD);
107
  GoRed();
107
  GoRed();
108
  OnRev (MLEFT);
108
  OnRev (MLEFT);
109
  OnRev (MRIGHT);
109
  OnRev (MRIGHT);
110
  Wait(100);              // popojed kus
110
  Wait(100);              // popojed kus
111
  Off(MLEFT);
111
  Off(MLEFT);
112
  Off(MRIGHT);
112
  Off(MRIGHT);
113
}
113
}
114
 
114
 
115
task red_bumper()
115
task red_bumper()
116
{
116
{
117
  while(true)
117
  while(true)
118
  {
118
  {
119
    while (100 != RED); // utoc, kdyz neco narazi do narazniku
119
    while (100 != RED); // utoc, kdyz neco narazi do narazniku
120
    PlaySound (SOUND_FAST_UP);
120
    PlaySound (SOUND_FAST_UP);
121
    stop stochastika;
121
    stop stochastika;
122
    GoRed();
122
    GoRed();
123
//!!!    Zatoc();
123
//!!!    Zatoc();
124
    start stochastika;
124
    start stochastika;
125
    if (semafor) start blue_bumper;
125
    if (semafor) start blue_bumper;
126
  }
126
  }
127
}
127
}
128
 
128
 
129
task blue_bumper()
129
task blue_bumper()
130
{
130
{
131
    semafor = false;
131
    semafor = false;
132
    while (0 == BBUMPER); // utoc, kdyz neco narazi do narazniku
132
    while (0 == BBUMPER); // utoc, kdyz neco narazi do narazniku
133
    PlaySound (SOUND_FAST_UP);
133
    PlaySound (SOUND_FAST_UP);
134
    OnFwd (MLEFT);
134
    OnFwd (MLEFT);
135
    OnFwd (MRIGHT);
135
    OnFwd (MRIGHT);
136
    semafor = true;
136
    semafor = true;
137
}
137
}
138
 
138
 
139
task cara_cervena() // hlidani natlaceni na caru
139
task cara_cervena() // hlidani natlaceni na caru
140
{
140
{
141
  while(true)
141
  while(true)
142
  {
142
  {
143
    while (RED < THRESHOLD || RED > RED_WHITE); // utoc, kdyz nas neco dotlaci k care
143
    while (RED < THRESHOLD || RED > RED_WHITE); // utoc, kdyz nas neco dotlaci k care
144
    Wait(2);        // kontrola za 20ms, aby se to nespletlo s naraznikem
144
    Wait(2);        // kontrola za 20ms, aby se to nespletlo s naraznikem
145
    if (RED > THRESHOLD && RED < RED_WHITE)
145
    if (RED > THRESHOLD && RED < RED_WHITE)
146
    {
146
    {
147
      PlaySound (SOUND_DOUBLE_BEEP);
147
      PlaySound (SOUND_DOUBLE_BEEP);
148
      GoBlue();
148
      GoBlue();
149
    }
149
    }
150
  }
150
  }
151
}
151
}
152
 
152
 
153
task cara_modra()    // hlidani cary
153
task cara_modra()    // hlidani cary
154
{
154
{
155
  while(true)
155
  while(true)
156
  {
156
  {
157
     while (BLUE > THRESHOLD);    // cekej na caru
157
     while (BLUE > THRESHOLD);    // cekej na caru
158
     stop cara_cervena;
158
     stop cara_cervena;
159
     PlaySound (SOUND_DOUBLE_BEEP);
159
     PlaySound (SOUND_DOUBLE_BEEP);
160
     GoRed();
160
     GoRed();
161
     if (semafor) start blue_bumper;
161
     if (semafor) start blue_bumper;
162
     start cara_cervena;
162
     start cara_cervena;
163
  }
163
  }
164
}
164
}
165
 
165