-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathProgram5.13.ino
More file actions
138 lines (136 loc) · 2.77 KB
/
Program5.13.ino
File metadata and controls
138 lines (136 loc) · 2.77 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
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
#define BAUDRATE 9600
#define TIMEOUT_OVERFLOW 1000
#define DIST 20
const int TrigPin = 13;
const int EchoPin = 10;
const int MotR_A = 3; // DC Motor1 Pole_A
const int MotR_B = 5; // DC Motor1 Pole_B
const int MotL_A = 6; // DC Motor2 Pole_A
const int MotL_B = 9; // DC Motor2 Pole_B
unsigned long USS_Value;
unsigned int Flag=0,i=0,USS_Val1=0,USS_Val2=0,USS_Val3=0,USS_Val4=0,
USS_Val5=0,USS_Val6 =0,USS_Val7=0,USS_Val8=0,USS_Val9=0,USS_Val10=0;
void setup()
{
Serial.begin(BAUDRATE);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(MotR_A, OUTPUT);
pinMode(MotR_B, OUTPUT);
pinMode(MotL_A, OUTPUT);
pinMode(MotL_B, OUTPUT);
}
byte ReadOneByte()
{
int ByteRead;
while(!Serial.available());
ByteRead = Serial.read();
return ByteRead;
}
void loop()
{
USS_Value = US_Sensor(); // Read Ultrasonic Sensor value
USS_Val10 = USS_Val9;
USS_Val9 = USS_Val8;
USS_Val8 = USS_Val7;
USS_Val7 = USS_Val6;
USS_Val6 = USS_Val5; // Get Previous 6 values
USS_Val5 = USS_Val4;
USS_Val4 = USS_Val3;
USS_Val3 = USS_Val2;
USS_Val2 = USS_Val1;
USS_Val1 = USS_Value;
if (Flag==0)
{
if (USS_Val1 < DIST && USS_Val2 < DIST && USS_Val3 < DIST && USS_Val4 <
DIST && USS_Val5 < DIST &&USS_Val6 < DIST && USS_Val7 <
DIST && USS_Val8 < DIST &&USS_Val9 < DIST &&USS_Val10 < DIST )
{
Robot_Right();
Serial.print("Robo Turn!");
Serial.println();
Flag=1;
}
else
{
Robot_Forword();
Serial.print("Robo Forword!");
Serial.println();
Flag=0;
}
}
else if (Flag==1)
{
Robot_Right();
Serial.print("Robo Turn!");
Serial.println();
i++;
if (i==100) // Turn range
{
Flag=0;
i=0;
}
}
}
void Robot_Forword()
{
digitalWrite(MotR_A, LOW);
digitalWrite(MotR_B, HIGH);
digitalWrite(MotL_B, LOW);
digitalWrite(MotL_A, HIGH);
}
void Robot_Reverse()
{
digitalWrite(MotR_A, HIGH);
digitalWrite(MotR_B, LOW);
digitalWrite(MotL_B, HIGH);
digitalWrite(MotL_A, LOW);
}
void Robot_Right()
{
digitalWrite(MotR_A, HIGH);
digitalWrite(MotR_B, LOW);
digitalWrite(MotL_B, LOW);
digitalWrite(MotL_A, HIGH);
}
void Robot_Left()
{
digitalWrite(MotR_A, LOW);
digitalWrite(MotR_B, HIGH);
digitalWrite(MotL_B, HIGH);
digitalWrite(MotL_A, LOW);
}
void Robot_Stop()
{
digitalWrite(MotR_A, LOW);
digitalWrite(MotR_B, LOW);
digitalWrite(MotL_B, LOW);
digitalWrite(MotL_A, LOW);
}
unsigned int US_Sensor()
{
unsigned long ultrasoundDuration;
unsigned char pin = 0;
unsigned int time_flag = 0;
digitalWrite(TrigPin, HIGH);
delayMicroseconds(2);
digitalWrite(TrigPin, LOW);
delayMicroseconds(10);
digitalWrite(TrigPin, HIGH);
TCCR1A = 0x00;
TCNT1 = 0x0000;
TCCR1B = 0x01;
pin = digitalRead(EchoPin);
while(pin)
{
pin = digitalRead(EchoPin);
time_flag++;
if(time_flag > TIMEOUT_OVERFLOW)
break;
}
TCCR1B = 0x00;
ultrasoundDuration = TCNT1;
ultrasoundDuration = ultrasoundDuration / 16;
ultrasoundDuration = ultrasoundDuration * 0.017;
return (ultrasoundDuration);
}