-
Notifications
You must be signed in to change notification settings - Fork 2
/
code.c
165 lines (145 loc) · 2.75 KB
/
code.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*
* mBot code for Group 3a2
*
* Members:
* Sungmin
* Kishor
* Svetha
* Alvin
*/
#include "MeMCore.h"
MeLineFollower lineFinder(PORT_2); //TO STOP AT THE BLACK STRIP
MeUltrasonicSensor ultraSensor(PORT_3); //MEASURE DISTANCE BETWEEN WALL AND MBOT
MeLightSensor lightsensor(PORT_6); //FOR COLOR DETECTION ON TOP
MeRGBLed rgbled(PORT_7); //FOR COLOR DETECTION ON TOP
MeDCMotor motor_right(M1); //RIGHT WHEEL
MeDCMotor motor_left(M2); //LEFT WHEEL
int motorspeed = 100;
//Stop
void stop()
{
motor_right.stop();
motor_left.stop();
}
//Move Forward
void forward()
{
motor_right.run(+motorSpeed);
motor_left.run(-motorSpeed);
}
//Turn Right
void right_turn()
{
motor_right.run(+motorSpeed);
motor_left.run(+motorSpeed);
stop();
//then readjust
}
//Turn Left
void left_turn()
{
motor_right.run(-motorSpeed);
motor_left.run(-motorSpeed);
//then readjust
}
//Detect Black Strip
bool black_strip()
{
switch(sensorState)
{
case S1_IN_S2_IN:
colour_challenge();
break;
case S1_IN_S2_OUT:
case S1_OUT_S2_IN:
case S1_OUT_S2_OUT:
motor_right.run(+motorSpeed);
motor_left.run(-motorSpeed);
break;
default:
break;
}//Line follower code
}
//Ultrasound (distance from wall)
float dist_front() {
float dist = ultraSensor.distanceCm();
return dist;
}
//colour challenge
void colour_challenge(){
//detect color
if (//parameters here) {
red_task();
}
else if (//parameters){
green_task();
}
else if (//parameters) {
yellow_task();
}
else if(//parameters) {
purple_task();
}
else if(//parameters) {
lightblue_task();
}
else if(//parameters) {
black_task();
}
//red (left turn)
void red_task(){
left_turn();
}
//green (right turn)
void green_task(){
right_turn();
}
//yellow (U-turn within same grid)
void yellow_task(){
right_turn();
right_turn();
}
//purple (2x left in 2 grid)
void purple_task(){
left_turn();
while(dist_front() > 4) {
//go straight
}
//stop
left_turn();
}
}
//light blue (2x right in 2 grid)
void lightblue_task(){
right_turn();
while(dist_front() > 4) {
//go straight
}
//stop
right_turn();
}
}
void music()
{
for (int thisNote = 0; thisNote < 112; thisNote++) {
int noteDuration = 750 / noteDurations[thisNote];
tone(7, melody[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(7);
}
}
//black (make noise)
void black_task(){
stop();
music();
exit(0);
}
void setup(){
}
void loop() {
forward();
if(black_strip()){
color_challenge();
}
}