No title

 #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);

  }

}

Post a Comment

Previous Post Next Post

Contact Form