#include <Servo.h>
// ===== Servo Objects =====
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
// ===== Potentiometer Pins =====
int pot1 = A0;
int pot2 = A1;
int pot3 = A2;
int pot4 = A3;
// ===== Button Pins =====
int recordBtn = 2;
int playBtn = 4;
// ===== Servo Pins =====
int s1 = 3;
int s2 = 5;
int s3 = 6;
int s4 = 9;
// ===== Memory Storage =====
int pos1[200];
int pos2[200];
int pos3[200];
int pos4[200];
int indexPos = 0;
// ===== States =====
bool recording = false;
bool playing = false;
void setup() {
Serial.begin(9600);
Serial.println("=== Robotic Arm Ready ===");
Serial.println("Press RECORD to start recording");
Serial.println("Press PLAY to loop playback");
servo1.attach(s1);
servo2.attach(s2);
servo3.attach(s3);
servo4.attach(s4);
pinMode(recordBtn, INPUT_PULLUP);
pinMode(playBtn, INPUT_PULLUP);
}
void loop() {
// ===== Manual Control (Only when NOT playing) =====
if (!playing) {
int angle1 = map(analogRead(pot1), 0, 1023, 0, 180);
int angle2 = map(analogRead(pot2), 0, 1023, 0, 180);
int angle3 = map(analogRead(pot3), 0, 1023, 0, 180);
int angle4 = map(analogRead(pot4), 0, 1023, 0, 180);
servo1.write(angle1);
servo2.write(angle2);
servo3.write(angle3);
servo4.write(angle4);
// ===== Recording =====
if (recording && indexPos < 200) {
pos1[indexPos] = angle1;
pos2[indexPos] = angle2;
pos3[indexPos] = angle3;
pos4[indexPos] = angle4;
indexPos++;
Serial.print("Recording Step: ");
Serial.println(indexPos);
delay(100);
}
}
// ===== RECORD BUTTON =====
if (digitalRead(recordBtn) == LOW) {
recording = true;
playing = false;
indexPos = 0;
Serial.println("=== RECORDING STARTED ===");
delay(300);
}
// ===== PLAY BUTTON =====
if (digitalRead(playBtn) == LOW) {
if (indexPos > 0) {
recording = false;
playing = true;
Serial.print("=== PLAYBACK STARTED | Steps: ");
Serial.print(indexPos);
Serial.println(" ===");
} else {
Serial.println("No data recorded!");
}
delay(300);
}
// ===== LOOP PLAYBACK =====
if (playing) {
playLoop();
}
}
// ===== Playback Function =====
void playLoop() {
for (int i = 0; i < indexPos; i++) {
// Stop playback if RECORD pressed
if (digitalRead(recordBtn) == LOW) {
playing = false;
recording = true;
indexPos = 0;
Serial.println("=== PLAYBACK STOPPED ===");
Serial.println("=== NEW RECORDING STARTED ===");
delay(300);
return;
}
servo1.write(pos1[i]);
servo2.write(pos2[i]);
servo3.write(pos3[i]);
servo4.write(pos4[i]);
Serial.print("Playing Step: ");
Serial.println(i + 1);
delay(100);
}
}