-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrobot_control.ino
93 lines (83 loc) · 2.24 KB
/
robot_control.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
// Motor and sensor pin definitions
const int MR1 = 8; // Motor right 1
const int MR2 = 9; // Motor right 2
const int ML1 = 10; // Motor left 1
const int ML2 = 11; // Motor left 2
const int SR = 6; // Sensor right
const int SL = 7; // Sensor left
const int LED = 13; // LED indicator
const int ENR = 3; // Enable pin for right motor
const int ENL = 5; // Enable pin for left motor
// Speed and timing parameters
const int VSPEED = 100; // Speed for forward and backward motion
const int TSPEED = 255; // Speed for turning
const int TDELAY = 20; // Delay for turning
void setup() {
// Initialize pin modes
pinMode(MR1, OUTPUT);
pinMode(MR2, OUTPUT);
pinMode(ML1, OUTPUT);
pinMode(ML2, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SR, INPUT);
pinMode(SL, INPUT);
delay(5000); // Delay for setup
}
void loop() {
// Read sensor values
int svr = digitalRead(SR);
int svl = digitalRead(SL);
// Determine robot behavior based on sensor values
if (svl == LOW && svr == LOW) {
forward(); // Move forward
} else if (svl == HIGH && svr == LOW) {
left(); // Turn left
} else if (svl == LOW && svr == HIGH) {
right(); // Turn right
} else if (svl == HIGH && svr == HIGH) {
stop(); // Stop
}
}
void forward() {
// Move forward by setting motor directions
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(ENR, VSPEED);
analogWrite(ENL, VSPEED);
}
void backward() {
// Move backward by setting motor directions
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(ENR, VSPEED);
analogWrite(ENL, VSPEED);
}
void right() {
// Turn right by adjusting motor speeds
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(ENR, TSPEED);
analogWrite(ENL, TSPEED);
delay(TDELAY);
}
void left() {
// Turn left by adjusting motor speeds
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(ENR, TSPEED);
analogWrite(ENL, TSPEED);
delay(TDELAY);
}
void stop() {
// Stop the robot by setting motor speeds to zero
analogWrite(ENR, 0);
analogWrite(ENL, 0);
}