-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathir_array_test.ino
More file actions
100 lines (82 loc) · 3.1 KB
/
ir_array_test.ino
File metadata and controls
100 lines (82 loc) · 3.1 KB
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
// IR Sensor Array Test Program
// Pins for 5 IR sensors (adjust these pins based on your connections)
const int IR_LEFT_2 = 2; // Leftmost sensor
const int IR_LEFT_1 = 3; // Left sensor
const int IR_CENTER = 4; // Center sensor
const int IR_RIGHT_1 = 5; // Right sensor
const int IR_RIGHT_2 = 6; // Rightmost sensor
// Sensor states
int sensorStates[5] = {0, 0, 0, 0, 0};
void setup() {
Serial.begin(9600);
// Configure IR sensor pins as inputs with pull-up resistors
pinMode(IR_LEFT_2, INPUT_PULLUP);
pinMode(IR_LEFT_1, INPUT_PULLUP);
pinMode(IR_CENTER, INPUT_PULLUP);
pinMode(IR_RIGHT_1, INPUT_PULLUP);
pinMode(IR_RIGHT_2, INPUT_PULLUP);
Serial.println("IR Sensor Array Test Program");
Serial.println("----------------------------");
}
void loop() {
// Read all sensors
sensorStates[0] = digitalRead(IR_LEFT_2);
sensorStates[1] = digitalRead(IR_LEFT_1);
sensorStates[2] = digitalRead(IR_CENTER);
sensorStates[3] = digitalRead(IR_RIGHT_1);
sensorStates[4] = digitalRead(IR_RIGHT_2);
// Print sensor states
Serial.print("Sensor States: ");
for(int i = 0; i < 5; i++) {
Serial.print(sensorStates[i]);
Serial.print(" ");
}
Serial.println();
// Determine robot action based on sensor readings
String command = determineCommand();
Serial.print("Command: ");
Serial.println(command);
delay(500); // Delay for readability
}
String determineCommand() {
// All sensors off line
if (sensorStates[0] == 0 && sensorStates[1] == 0 && sensorStates[2] == 0 &&
sensorStates[3] == 0 && sensorStates[4] == 0) {
return "STOP - No line detected";
}
// All sensors on line
if (sensorStates[0] == 1 && sensorStates[1] == 1 && sensorStates[2] == 1 &&
sensorStates[3] == 1 && sensorStates[4] == 1) {
return "STOP - All sensors on line";
}
// Perfect alignment (center sensor on line)
if (sensorStates[2] == 1 && sensorStates[1] == 0 && sensorStates[3] == 0) {
return "FORWARD - Perfect alignment";
}
// Slight left adjustment needed
if (sensorStates[1] == 1 && sensorStates[2] == 0) {
return "SLIGHT_LEFT - Adjust left";
}
// Slight right adjustment needed
if (sensorStates[3] == 1 && sensorStates[2] == 0) {
return "SLIGHT_RIGHT - Adjust right";
}
// Sharp left turn needed
if (sensorStates[0] == 1 || (sensorStates[0] == 1 && sensorStates[1] == 1)) {
return "SHARP_LEFT - Turn left";
}
// Sharp right turn needed
if (sensorStates[4] == 1 || (sensorStates[4] == 1 && sensorStates[3] == 1)) {
return "SHARP_RIGHT - Turn right";
}
// Lost line - need to search
if (sensorStates[0] == 0 && sensorStates[1] == 0 && sensorStates[2] == 0 &&
(sensorStates[3] == 1 || sensorStates[4] == 1)) {
return "SEARCH_RIGHT - Lost line, searching right";
}
if (sensorStates[0] == 0 && sensorStates[1] == 0 && sensorStates[2] == 0 &&
(sensorStates[0] == 1 || sensorStates[1] == 1)) {
return "SEARCH_LEFT - Lost line, searching left";
}
return "UNKNOWN - Unexpected sensor pattern";
}