No title

 #include <Servo.h>


// ===== Servo Objects =====

Servo servo1;

Servo servo2;

Servo servo3;

Servo servo4;


// ===== Potentiometer Pins =====

const byte pot1 = A0;

const byte pot2 = A1;

const byte pot3 = A2;

const byte pot4 = A3;


// ===== Button Pins =====

const byte recordBtn = 2;

const byte playBtn   = 4;


// ===== Servo Pins =====

const byte s1 = 3;

const byte s2 = 5;

const byte s3 = 6;

const byte s4 = 9;


// ===== Memory Storage =====

#define MAX_STEPS 80

byte pos1[MAX_STEPS];

byte pos2[MAX_STEPS];

byte pos3[MAX_STEPS];

byte pos4[MAX_STEPS];


byte indexPos = 0;


// ===== States =====

bool recording = false;

bool playing   = false;


void setup() {

  Serial.begin(9600);


  servo1.attach(s1);

  servo2.attach(s2);

  servo3.attach(s3);

  servo4.attach(s4);


  pinMode(recordBtn, INPUT_PULLUP);

  pinMode(playBtn, INPUT_PULLUP);


  Serial.println(F("=== Robotic Arm Ready ==="));

  Serial.println(F("Press RECORD to start recording"));

  Serial.println(F("Press PLAY to playback"));

}


void loop() {


  // ===== Manual Control =====

  if (!playing) {

    byte angle1 = map(analogRead(pot1), 0, 1023, 0, 180);

    byte angle2 = map(analogRead(pot2), 0, 1023, 0, 180);

    byte angle3 = map(analogRead(pot3), 0, 1023, 0, 180);

    byte angle4 = map(analogRead(pot4), 0, 1023, 0, 180);


    servo1.write(angle1);

    servo2.write(angle2);

    servo3.write(angle3);

    servo4.write(angle4);


    // ===== Recording =====

    if (recording && indexPos < MAX_STEPS) {

      pos1[indexPos] = angle1;

      pos2[indexPos] = angle2;

      pos3[indexPos] = angle3;

      pos4[indexPos] = angle4;


      indexPos++;


      Serial.print(F("Recording Step: "));

      Serial.println(indexPos);


      delay(100);

    }

  }


  // ===== RECORD BUTTON =====

  if (digitalRead(recordBtn) == LOW) {

    recording = true;

    playing = false;

    indexPos = 0;


    Serial.println(F("=== RECORDING STARTED ==="));

    delay(300);

  }


  // ===== PLAY BUTTON =====

  if (digitalRead(playBtn) == LOW) {

    if (indexPos > 0) {

      recording = false;

      playing = true;


      Serial.print(F("=== PLAYBACK STARTED | Steps: "));

      Serial.print(indexPos);

      Serial.println(F(" ==="));

    } else {

      Serial.println(F("No data recorded!"));

    }

    delay(300);

  }


  // ===== Playback =====

  if (playing) {

    playLoop();

  }

}


// ===== Playback Function =====

void playLoop() {

  for (byte i = 0; i < indexPos; i++) {


    // Stop playback if RECORD pressed

    if (digitalRead(recordBtn) == LOW) {

      playing = false;

      recording = true;

      indexPos = 0;


      Serial.println(F("=== PLAYBACK STOPPED ==="));

      Serial.println(F("=== NEW RECORDING STARTED ==="));


      delay(300);

      return;

    }


    servo1.write(pos1[i]);

    servo2.write(pos2[i]);

    servo3.write(pos3[i]);

    servo4.write(pos4[i]);


    Serial.print(F("Playing Step: "));

    Serial.println(i + 1);


    delay(100);

  }


  Serial.println(F("=== PLAYBACK FINISHED ==="));

  playing = false;

}

Post a Comment

Previous Post Next Post

Contact Form