-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.ino
163 lines (125 loc) · 3.5 KB
/
main.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
152
153
154
155
156
157
158
159
160
161
162
163
// control digital pins controls direction
// sol analogwrite controls strength of the solenoid
// brake digital pins control auto shut off
#define BAUD_RATE 9600
//X-axis corresponds to pin A
const int controlX = 12;
const int solX = 3;
const int brakeX = 9;
//Y-axis corresponds to pin B
const int controlY = 13;
const int solY = 11;
const int brakeY = 8;
enum {
UP = 0b110100,
RIGHT = 0b111000,
LEFT = 0b110010,
DOWN = 0b110001
};
// Input bytes from Controls
int incomingByte;
void setup() {
// Initialize serial
Serial.begin(BAUD_RATE);
Serial.println("---------------------");
Serial.println("-------- SAM --------");
Serial.println("---------------------");
Serial.println("I'm Alive!");
while (!Serial) {}
Serial.println("Connection Established!");
//Initialization of all digital and analog pinouts to control motor shield
pinMode(controlX, OUTPUT);
pinMode(solX, OUTPUT);
pinMode(brakeX, OUTPUT);
pinMode(controlY, OUTPUT);
pinMode(solY, OUTPUT);
pinMode(brakeY, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
digitalWrite(brakeX, HIGH);
digitalWrite(brakeY, HIGH);
analogWrite(solX, 0);
analogWrite(solY, 0);
digitalWrite(controlX, HIGH);
digitalWrite(controlY, HIGH);
Serial.print("SAM is ready");
}
void moveX(short dir) {
Serial.print("Moving ");
if (dir == RIGHT) {
digitalWrite(controlX, HIGH);
Serial.print("RIGHT");
} else if (dir == LEFT) {
digitalWrite(controlX, LOW);
Serial.print("LEFT");
} else {
return;
}
Serial.print(" -- ");
delay(5);
// Set strength of solenoid using PWM, can be any value [0, 255]
analogWrite(solX, 200);
analogWrite(solY, 0);
// Turn brake on or off to allow current to flow through pins
digitalWrite(brakeX, LOW);
digitalWrite(brakeY, HIGH);
int currentX = analogRead(A0);
Serial.println("currentX is:");
Serial.println(currentX);
// Movement time
delay(50);
// // Stop solenoids
// analogWrite(solX, 0);
// analogWrite(solY, 0);
//
// // Brake
// digitalWrite(brakeX, HIGH);
// digitalWrite(brakeY, HIGH);
Serial.println("done");
}
void moveY(short dir) {
Serial.print("Moving ");
if (dir == UP) {
digitalWrite(controlY, HIGH);
Serial.print("UP");
} else if (dir == DOWN) {
digitalWrite(controlY, LOW);
Serial.print("DOWN");
} else {
return;
}
Serial.print(" -- ");
delay(10);
analogWrite(solX, 0);
analogWrite(solY, 200);
digitalWrite(brakeX, HIGH);
digitalWrite(brakeY, LOW);
int currentY = analogRead(A1);
Serial.println("currentY is:");
Serial.println(currentY);
// Movement time
delay(50);
analogWrite(solX, 0);
analogWrite(solY, 0);
digitalWrite(brakeX, HIGH);
digitalWrite(brakeY, HIGH);
Serial.println("done");
}
void loop() {
// Voltage: 3.21 V
// Pulse Length: 30 ms
// Delay Time: 10 ms
// Set strength of the solenoid using PWM, can be any value [0,255]
//analogWrite(solX, 255);
//analogWrite(solY, 0);
if (Serial.available()) {
incomingByte = Serial.read();
Serial.println(incomingByte, BIN);
// TODO: take one byte and separate it properly to X and Y directions
if (incomingByte == UP || incomingByte == DOWN) {
moveY(incomingByte);
} else if (incomingByte == LEFT || incomingByte == RIGHT) {
moveX(incomingByte);
}
}
}