-
Notifications
You must be signed in to change notification settings - Fork 1
/
Avoid_Obstacle.ino
82 lines (71 loc) · 2.32 KB
/
Avoid_Obstacle.ino
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
#include <Servo.h>
/Define the pins
#define FRONT_IR //smith-trigger circuit?
Servo servoHead;
Servo servoLeft;
Servo servoRight;
Servo servoGrab;
void setup() {
// put your setup code here, to run once:
servoHead.attach(10);
servoLeft.attach(12);
servoRight.attach(13);
servoGrab.attach(11);
servoHead.write(90);
servoGrab.write(90);
Serial.begin(9600);
//attachInterrupt(digitalPinToInterrupt(FRONT_IR), LineStop, RISING);
}
void headRight(void){
servoHead.write(60);
delay(3000);
}
void headLeft(void){
servoHead.write(120);
delay(3000);
}
void forward(void){
servoLeft.writeMicroseconds(1300);
servoRight.writeMicroseconds(1700);
}
void turnLeft(void){
servoLeft.writeMicroseconds(1300);
servoRight.writeMicroseconds(1500);
}
void turnRight(void){
servoLeft.writeMicroseconds(1500);
servoRight.writeMicroseconds(1700);
}
void stop(void){
servoLeft.writeMicroseconds(1500);
servoRight.writeMicroseconds(1500);
}
void backWard(void){
servoLeft.writeMicroseconds(1700);
servoRight.writeMicroseconds(1300);
}
void AvoidObstacle()
{
if (InfraRedRight = HIGH ) // Wherever HIGH is mentioned, it means that it is detecting black tape (a function to obtain this 'detection' has still to be written)
{if (InfraRedLeft = HIGH)
{backWard();
delay(1500); // TO BE DEFINED BY TESTING: an appropriate distance has to be driven backwards, in case black tape is monitored on both sides of the front of the robot
}
if(InfraRedLeft = LOW)
{
turnLeft();
turnRight();
delay(1500); // TO BE DEFINED BY TESTING: this delay time has to be sufficient so that it turns 90° to the right
}
}
if (UltraSoundTop < 15)
{
turnRight();
delay(); // TO BE DEFINED BY TESTING: this delay should be to turn the robot for example 45°
// The AvoidObstacle function should be looped, this way it checks again after turning 45° to the right, if it then doesnt detect anymore then it can carry on with movement
if (UltraSoundTop < 15)
{turnLeft();
delay(); // This delay should be 2x as much as the delay to turnRight, this way it checks if there is an option to avoid the obstacle by driving to the left of it.
}
}
}