-
Notifications
You must be signed in to change notification settings - Fork 1
/
arduino-robot-due.ino
136 lines (111 loc) · 1.88 KB
/
arduino-robot-due.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
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
#include <Servo.h>
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
Servo myservo1;
Servo myservo2;
#define SERVO_1_PIN 2
#define SERVO_2_PIN 3
#define LEFT_SENSOR_PIN 9
#define RIGHT_SENSOR_PIN 8
short left_sensor;
short right_sensor;
void setup()
{
Serial.begin(9600);
myservo1.attach(SERVO_1_PIN);
myservo2.attach(SERVO_2_PIN);
pinMode(LEFT_SENSOR_PIN, INPUT_PULLUP);
pinMode(RIGHT_SENSOR_PIN, INPUT_PULLUP);
Wire.begin();
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1)
{
}
}
sensor.startContinuous();
FORWARD();
}
void readSensors()
{
left_sensor = digitalRead(LEFT_SENSOR_PIN);
right_sensor = digitalRead(RIGHT_SENSOR_PIN);
Serial.print(left_sensor);
Serial.print(" - ");
Serial.print(right_sensor);
}
void loop()
{
Serial.print(sensor.readRangeContinuousMillimeters());
if (sensor.timeoutOccurred())
{
Serial.print(" TIMEOUT");
}
int mm = sensor.readRangeContinuousMillimeters();
doObstacleLineFollower(mm);
readSensors();
if (left_sensor == 1 && right_sensor == 0)
{
RIGHT();
Serial.print("RIGHT");
}
else if (left_sensor == 0 && right_sensor == 1)
{
LEFT();
Serial.print("LEFT");
}
Serial.println("");
}
void doObstacleLineFollower(int mm)
{
if (mm < 60)
{
STOP();
BACK();
delay(500);
STOP();
TURN();
delay(800);
while (true)
{
readSensors();
if (left_sensor == 1)
{
break;
}
}
}
}
void FORWARD()
{
myservo1.write(180);
myservo2.write(0);
}
void BACK()
{
myservo1.write(0);
myservo2.write(180);
}
void STOP()
{
myservo1.write(90);
myservo2.write(90);
}
void RIGHT()
{
myservo2.write(90);
myservo1.write(180);
}
void LEFT()
{
myservo1.write(90);
myservo2.write(0);
}
void TURN()
{
myservo1.write(0);
myservo2.write(0);
}