-
Notifications
You must be signed in to change notification settings - Fork 0
/
Maze_solver_3ir.ino
108 lines (87 loc) · 2.54 KB
/
Maze_solver_3ir.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
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
#include <AFMotor.h>
// Motor shield initialization
AF_DCMotor motor1(3); // Motor connected to M3
AF_DCMotor motor2(4); // Motor connected to M4
// IR sensor pins
const int leftSensorPin = 11; // Digital pin for the left IR sensor
const int middleSensorPin = 9; // Digital pin for the middle IR sensor
const int rightSensorPin = 2; // Digital pin for the right IR sensor
// IR sensor thresholds
const int leftThreshold = 700; // Adjust this value for the left sensor
const int rightThreshold = 700; // Adjust this value for the right sensor
// Motor speeds
const int forwardSpeed = 200; // Speed for forward movement
const int turnSpeed = 150; // Speed for turning
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Set up the motor pins
motor1.setSpeed(forwardSpeed);
motor2.setSpeed(forwardSpeed);
}
void loop() {
int IR1 = digitalRead(leftSensorPin);
int IR2 = digitalRead(middleSensorPin);
int IR3 = digitalRead(rightSensorPin);
// Print IR sensor values for debugging
Serial.print("Left sensor: ");
Serial.print(IR1);
Serial.print(" | Middle sensor: ");
Serial.println(IR2);
Serial.print(" | Right sensor: ");
Serial.println(IR3);
if (IR1 == LOW && IR2 == HIGH && IR3 == LOW)//Straight path
{
Forward();
}
if (IR1 == HIGH && IR2 == LOW && IR3 == LOW)//Left turn
{
Left();
}
if (IR1 == LOW && IR2 == LOW && IR3 == HIGH)//Right Turn
{
Right();
}
if (IR1 == HIGH && IR2 == LOW && IR3 == HIGH)//T Intersection
{
Left(); // As left is possible
}
if (IR1 == HIGH && IR2 == HIGH && IR3 == LOW)//Left T Intersection
{
Left();// As Left is possible
}
if (IR1 == LOW && IR2 == HIGH && IR3 == HIGH)//Right T Tntersection
{
Forward();//As Straight path is possible
}
if (IR1 == LOW && IR2 ==LOW && IR3 == LOW)//Dead End
{
Right(); //As no other direction is possible nnnnnnnnn
}
if (IR1 == HIGH && IR2 == HIGH && IR3 == HIGH)//4 Lane intersection
{
Left(); //As no other direction is possible
}
if (IR1 == HIGH && IR2 == HIGH && IR3 == HIGH)//End of Maze
{
Stop(); //As no other direction is possible
}
}
void Forward() {
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void Right() {
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(500); // Adjust this value for desired turning time
}
void Left() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(500); // Adjust this value for desired turning time
}
void Stop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}