-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathline_follower.ino
151 lines (149 loc) · 3.67 KB
/
line_follower.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
* This part of the code controls the line follower and
* also sends and receive data from ThinkSpeak
* and dumps waste at dumping ground by opening the
* shaft of the collector using a servo motor
* which is connected to a Arduino Yun mounted on the bot
*/
#include "ThingSpeak.h"
#include <BridgeClient.h>
#include <Servo.h>
//
//for Line Following Robot using 2IR sensors
int lm1 = 8; //left motor output 1
int lm2 = 9; //left motor output 2
int rm1 = 10; //right motor output 1
int rm2 = 11; //right motor output 2
int sl = 13; //sensor 1 input (left)
int sr = 12; //sensor 2 input (right)
int SlV = 0;
int SrV = 0;
int led = A0;
int flag1 = 0;
int flag2 = 0;
int c = 0;
/*
* c == 0 -> bot at dumping ground
* c == 1 -> bot at dustbin 1
* c == 2 -> bot at dustbin 2
*/
int p = 0;
String myStatus = "";
Servo motor;
BridgeClient client;
unsigned long myChannelNumber = 000000; // Enter your channel number here
const char * myWriteAPIKey = "Enter your Write API key here";
void setup() {
Serial.begin(115200); //Initialize serial
pinMode(lm1, OUTPUT);
pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT);
pinMode(rm2, OUTPUT);
pinMode(led, OUTPUT);
pinMode(sl, INPUT);
pinMode(sr, INPUT);
motor.attach(3);
Bridge.begin();
ThingSpeak.begin(client); // Initialize ThingSpeak
sTOP();
}
void loop() {
SlV = digitalRead(sl);
SrV = digitalRead(sr);
if (SrV == HIGH && SlV == HIGH) {
ForWard();
}
if (SrV == HIGH && SlV == LOW) {
Left();
}
if (SrV == LOW && SlV == HIGH) {
Right();
}
if (SrV == LOW && SlV == LOW) { //bot stops at either a station or dumping yard
if (c == 0) {
c = c + 1;
for (p = 0; p < 55; p++) {
motor.write(p);
delay(10);
}
delay(5000);
for (p = 55; p >= 1; p--) {
motor.write(p);
delay(10);
}
float bin1 = ThingSpeak.readFloatField(myChannelNumber, 3);
if (bin1 >= 0.2) {
flag1 = 1;
}
ThingSpeak.setField(1, flag1);
ThingSpeak.setField(2, flag2);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
sTOP();
}
else if (c == 1) {
c = c + 1;
float bin2 = ThingSpeak.readFloatField(myChannelNumber, 4);
if (bin2 >= 0.2) {
flag2 = 1;
}
ThingSpeak.setField(2, flag2);
if (flag1 == 1) {
flag1 = 0;
ThingSpeak.setField(1, flag1);
ThingSpeak.setField(5, 1);
ThingSpeak.setField(6, 0);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
sTOP();
}
}
else if (c == 2) {
c = 0;
if (flag2 == 1) {
flag2 = 0;
ThingSpeak.setField(1, flag1);
ThingSpeak.setField(5, 0);
ThingSpeak.setField(6, 1);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
}
sTOP();
}
}
}
void ForWard() {
digitalWrite(lm1, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm1, HIGH);
digitalWrite(rm2, LOW);
}
void BackWard() {
digitalWrite(lm1, LOW);
digitalWrite(lm2, HIGH);
digitalWrite(rm1, LOW);
digitalWrite(rm2, HIGH);
}
void Left() {
digitalWrite(lm1, LOW);
digitalWrite(lm2, HIGH);
digitalWrite(rm1, HIGH);
digitalWrite(rm2, LOW);
}
void Right() {
digitalWrite(lm1, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW);
digitalWrite(rm2, HIGH);
}
void sTOP() {
digitalWrite(lm1, LOW);
digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW);
digitalWrite(rm2, LOW);
delay(5000);
// to help the bot move forward after seeing a black cross
while (!(digitalRead(sl) == HIGH && digitalRead(sr) == HIGH)) {
digitalWrite(lm1, HIGH);
digitalWrite(lm2, LOW);
digitalWrite(rm1, HIGH);
digitalWrite(rm2, LOW);
}
}