-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSeeTheLIGHT.ino
104 lines (81 loc) · 2.36 KB
/
SeeTheLIGHT.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
int analogPin = 5; // potentiometer wiper (middle terminal) connected to analog pin 3
int rDirPin = 12; //12
int rBreakPin = 9; //9
int rSpeedPin = 3; //3
int RIGHT = 1;
int LEFT = 0;
int THRESHHOLD = 50;
int lDirPin = 13; //13
int lBreakPin = 8; //8
int lSpeedPin = 11; //11
// outside leads to ground and +5V // variable to store the value read
//These are for math parts
int numberOfAverages = 5;
int oldAvg = 0;
void setup()
{
Serial.begin(9600); // setup serial
pinMode(rDirPin, OUTPUT); //Initiates Motor Channel A pin
pinMode(rBreakPin, OUTPUT); //Initiates Brake Channel A pin
//Setup Channel B
pinMode(lDirPin, OUTPUT); //Initiates Motor Channel A pin
pinMode(lBreakPin, OUTPUT); //Initiates Brake Channel A pin
}
void loop()
{
int variance = sensorMethod(); // read the input pin
// Serial.println(variance); // debug value
variance = smoothing(variance);
// Serial.println(variance);
if (variance >THRESHHOLD){
// Serial.print("right");
turn(RIGHT, variance);
}
else if (variance < -THRESHHOLD){
turn(LEFT, (-1* variance));
// Serial.print("left");
}
else{
Serial.println("forward");
turn(RIGHT, 0);
}
}
int smoothing(int newer){
oldAvg = ((oldAvg * numberOfAverages) + newer)/ (numberOfAverages + 1);
return oldAvg;
}
void turn(int dir, int magnitude){
if (magnitude != 0){
magnitude = map(magnitude, THRESHHOLD, 200, 200, 200);
if (dir == LEFT) {
digitalWrite(rDirPin, HIGH);
digitalWrite(rBreakPin, LOW);
analogWrite(rSpeedPin, magnitude);
digitalWrite(lDirPin, HIGH);
digitalWrite(lBreakPin, LOW); //Disengage the Brake for Channel B
analogWrite(lSpeedPin, magnitude);
}
if (dir == RIGHT){
digitalWrite(rDirPin, LOW);
digitalWrite(rBreakPin, LOW);
analogWrite(rSpeedPin, magnitude);
digitalWrite(lDirPin, LOW);
digitalWrite(lBreakPin, LOW); //Disengage the Brake for Channel B
analogWrite(lSpeedPin, magnitude);
}
}
else{
digitalWrite(rDirPin, LOW);
digitalWrite(rBreakPin, LOW);
digitalWrite(rSpeedPin, 200);
digitalWrite(lDirPin, HIGH);
digitalWrite(lSpeedPin, 200);
digitalWrite(rBreakPin, LOW);
}
}
int sensorMethod(){
//returns between +/-512
int val = analogRead(analogPin);
int turnAmount = 512 - val;
return turnAmount;
}