Subversion Repositories svnkaklik

Rev

Rev 1 | Go to most recent revision | 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_3
5
#define BLUE      SENSOR_3
6
#define RED       SENSOR_2
6
#define RED       SENSOR_2
7
#define BBUMPER   SENSOR_1
7
#define BBUMPER   SENSOR_1
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_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
17
  SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // 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
  SetTxPower(TX_POWER_HI);    // aby daleko videl
24
  SetTxPower(TX_POWER_HI);    // aby daleko videl
25
 
25
 
26
  OnFwd (MLEFT);         // cuknuti na shozeni radlic
26
  OnFwd (MLEFT);         // cuknuti na shozeni radlic
27
  OnFwd (MRIGHT);
27
  OnFwd (MRIGHT);
28
  Wait(20);
28
  Wait(20);
29
  OnRev (MLEFT);
29
  OnRev (MLEFT);
30
  OnRev (MRIGHT);
30
  OnRev (MRIGHT);
31
  Wait(70);
31
  Wait(70);
32
  Off(MLEFT);
32
  Off(MLEFT);
33
  Off(MRIGHT);
33
  Off(MRIGHT);
34
 
34
 
35
  start blue_bumper;
35
  start blue_bumper;
36
  start cervena;
36
  start cervena;
37
  start cara_modra;
37
  start cara_modra;
38
  start stochastika;
38
  start stochastika;
39
}
39
}
40
 
40
 
41
task stochastika()        // nahodne otaceni
41
task stochastika()        // nahodne otaceni
42
{
42
{
43
  while(true) Zatoc();
43
  while(true) Zatoc();
44
}
44
}
45
 
45
 
46
void GoBlue()
46
void GoBlue()
47
{
47
{
48
  OnFwd (MLEFT);
48
  OnFwd (MLEFT);
49
  OnFwd (MRIGHT);
49
  OnFwd (MRIGHT);
50
  Wait(300);              // popojed kus
50
  Wait(300);              // popojed kus
51
  Off(MLEFT);
51
  Off(MLEFT);
52
  Off(MRIGHT);
52
  Off(MRIGHT);
53
}
53
}
54
 
54
 
55
void GoRed()
55
void GoRed()
56
{
56
{
57
  OnRev (MLEFT);
57
  OnRev (MLEFT);
58
  OnRev (MRIGHT);
58
  OnRev (MRIGHT);
59
  Wait(300);              // popojed kus
59
  Wait(300);              // popojed kus
60
  Off(MLEFT);
60
  Off(MLEFT);
61
  Off(MRIGHT);
61
  Off(MRIGHT);
62
}
62
}
63
 
63
 
64
void Obrat()
64
void Obrat()
65
{
65
{
66
  OnRev (MLEFT);
66
  OnRev (MLEFT);
67
  OnFwd (MRIGHT);
67
  OnFwd (MRIGHT);
68
  Wait(125);              // popojed kus
68
  Wait(125);              // popojed kus
69
  Off(MLEFT);
69
  Off(MLEFT);
70
  Off(MRIGHT);
70
  Off(MRIGHT);
71
}
71
}
72
 
72
 
73
void Zatoc()
73
void Zatoc()
74
{
74
{
75
  switch (Random(1))
75
  switch (Random(1))
76
  {
76
  {
77
    case 0:
77
    case 0:
78
     OnRev (MLEFT);
78
     OnRev (MLEFT);
79
     OnFwd (MRIGHT);
79
     OnFwd (MRIGHT);
80
     Wait(50);
80
     Wait(50);
81
     break;
81
     break;
82
    case 1:
82
    case 1:
83
     OnFwd (MLEFT);
83
     OnFwd (MLEFT);
84
     OnRev (MRIGHT);
84
     OnRev (MRIGHT);
85
     Wait(50);
85
     Wait(50);
86
     break;
86
     break;
87
    case 2:
87
    case 2:
88
     OnRev (MLEFT);
88
     OnRev (MLEFT);
89
     OnRev (MRIGHT);
89
     OnRev (MRIGHT);
90
     Wait(70);
90
     Wait(70);
91
     break;
91
     break;
92
    case 3:
92
    case 3:
93
     OnFwd (MLEFT);
93
     OnFwd (MLEFT);
94
     OnFwd (MRIGHT);
94
     OnFwd (MRIGHT);
95
     Wait(70);
95
     Wait(70);
96
     break;
96
     break;
97
  }
97
  }
98
}
98
}
99
 
99
 
100
task blue_bumper() // naraznik na modre strane
100
task blue_bumper() // naraznik na modre strane
101
{
101
{
102
  while(true)
102
  while(true)
103
  {
103
  {
104
    if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
104
    if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
105
    {
105
    {
106
      stop stochastika;
106
      stop stochastika;
107
      PlaySound (SOUND_FAST_UP);
107
      PlaySound (SOUND_FAST_UP);
108
      OnFwd (MLEFT);
108
      OnFwd (MLEFT);
109
      OnFwd (MRIGHT);
109
      OnFwd (MRIGHT);
110
      Wait(50);
110
      Wait(50);
111
    }
111
    }
112
  }
112
  }
113
}
113
}
114
 
114
 
115
task cervena() // dalkovy sensor
115
task cervena() // dalkovy sensor
116
{
116
{
117
  int lastlevel;
117
  int lastlevel;
118
 
118
 
119
  lastlevel = 0;
119
  lastlevel = 0;
120
  while(true)
120
  while(true)
121
  {
121
  {
122
    SendMessage(0);
122
    SendMessage(0);
123
    if(lastlevel > SENSOR_2)
123
    if(lastlevel > SENSOR_2)
124
    {
124
    {
125
      PlaySound(SOUND_FAST_UP);
125
      PlaySound(SOUND_FAST_UP);
126
      stop stochastika;
126
      stop stochastika;
127
      OnRev (MLEFT);
127
      OnRev (MLEFT);
128
      OnRev (MRIGHT);
128
      OnRev (MRIGHT);
129
      Wait(10);              // popojed kus
129
      Wait(10);              // popojed kus
130
      Off(MLEFT);
130
      Off(MLEFT);
131
      Off(MRIGHT);
131
      Off(MRIGHT);
132
      Obrat();
132
      Obrat();
133
      GoBlue();
133
      GoBlue();
134
      start stochastika;
134
      start stochastika;
135
    }
135
    }
136
    lastlevel = SENSOR_2;
136
    lastlevel = SENSOR_2;
137
    lastlevel -= THRESHOLD;
137
    lastlevel -= THRESHOLD;
138
  }
138
  }
139
}
139
}
140
 
140
 
141
task cara_modra()    // hlidani cary
141
task cara_modra()    // hlidani cary
142
{
142
{
143
  while(true)
143
  while(true)
144
  {
144
  {
145
     if (BLUE < THRESHOLD)    // cekej na caru
145
     if (BLUE < THRESHOLD)    // cekej na caru
146
     {
146
     {
147
        PlaySound (SOUND_DOUBLE_BEEP);
147
        PlaySound (SOUND_DOUBLE_BEEP);
148
        stop blue_bumper;
148
        stop blue_bumper;
149
        stop stochastika;
149
        stop stochastika;
150
        stop cervena;
150
        stop cervena;
151
        GoRed();
151
        GoRed();
152
        start cervena;
152
        start cervena;
153
        start blue_bumper;
153
        start blue_bumper;
154
        start stochastika;
154
        start stochastika;
155
     }
155
     }
156
  }
156
  }
157
}
157
}
158
 
158