There is a part that I can't do in my code: "y kaydedilen konuma gidiliyor" and "z kaydedilen konuma gidiliyor" in the "kaydetme" function. This part was working fine before I detailed it. However, there are some things that I can't integrate right now. I want to go to the positions that I saved in EEPROM when the key is closed, but the direction of the motors is not as I want and they go much more than necessary. I would be very happy if I could explain it. Thanks in advance for your contributions.
So my code works fine except for these parts:
if (buton == 0 && anahtar_ayar == LOW)
{
Serial.print("Y Kaydedilen pozisyona gidiliyor: ");
Serial.println(savedPos);
stepper.moveTo(savedPos);
stepper.runToPosition();
motor1Pos = savedPos;
delay(1000);
}
if (digitalRead(ButonKaydet2) == HIGH && anahtar_ayar == LOW)
{
Serial.print("Z Kaydedilen pozisyona gidiliyor: ");
Serial.println(savedPos2);
stepper2.moveTo(savedPos2);
stepper2.runToPosition();
motor2Pos = savedPos2;
delay(1000);
}
Full Code:
#include <AccelStepper.h>
#include <ezButton.h>
#include <EEPROM.h>
#define dirPin 2
#define stepPin 3
#define dirPin2 5
#define stepPin2 6
AccelStepper stepper = AccelStepper(1, stepPin, dirPin);
AccelStepper stepper2 = AccelStepper(1, stepPin2, dirPin2);
#define ButonKaydet2 16
#define deadZone 50
ezButton joyButton(9);
int x, y;
const int limit_1 = 7;
#define LIMIT_SWITCH_PIN 18
int limit1;
const int anahtar = 4;
int anahtar_ayar;
long motor1Pos = 0, savedPos = 0;
long motor2Pos = 0, savedPos2 = 0;
// EEPROM konumları
const int EEPROM_ADDR_Y = 0;
const int EEPROM_ADDR_Z = sizeof(long);
boolean birkez = false;
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(LIMIT_SWITCH_PIN, INPUT_PULLUP);
pinMode(ButonKaydet2, INPUT);
digitalWrite(16, LOW);
pinMode(limit_1, INPUT_PULLUP);
digitalWrite(18, HIGH);
stepper.setPinsInverted(false, false, false);
stepper2.setPinsInverted(false, false, false);
stepper.setMaxSpeed(1500);
stepper.setAcceleration(750);
stepper2.setMaxSpeed(3000);
stepper2.setAcceleration(3000);
// EEPROM'dan pozisyonları oku
EEPROM.get(EEPROM_ADDR_Y, savedPos);
motor1Pos = savedPos;
stepper.setCurrentPosition(motor1Pos);
Serial.print("Y Kaydedilen pozisyon: ");
Serial.println(savedPos);
EEPROM.get(EEPROM_ADDR_Z, savedPos2);
motor2Pos = savedPos2;
stepper2.setCurrentPosition(motor2Pos);
Serial.print("Z Kaydedilen pozisyon: ");
Serial.println(savedPos2);
}
void loop()
{
anahtar_ayar = digitalRead(anahtar);
int buton = joyButton.getState();
if (anahtar_ayar == HIGH && buton == 0)
{
savedPos = motor1Pos;
EEPROM.put(EEPROM_ADDR_Y, savedPos);
Serial.print("Y Pozisyon kaydedildi: ");
Serial.println(savedPos);
delay(1000);
}
if (anahtar_ayar == HIGH && digitalRead(ButonKaydet2) == HIGH)
{
savedPos2 = motor2Pos;
EEPROM.put(EEPROM_ADDR_Z, savedPos2);
Serial.print("Z Pozisyon kaydedildi: ");
Serial.println(savedPos2);
delay(1000);
}
if (buton == 0 && anahtar_ayar == LOW)
{
Serial.print("Y Kaydedilen pozisyona gidiliyor: ");
Serial.println(savedPos);
stepper.moveTo(savedPos);
stepper.runToPosition();
motor1Pos = savedPos;
delay(1000);
}
if (digitalRead(ButonKaydet2) == HIGH && anahtar_ayar == LOW)
{
Serial.print("Z Kaydedilen pozisyona gidiliyor: ");
Serial.println(savedPos2);
stepper2.moveTo(savedPos2);
stepper2.runToPosition();
motor2Pos = savedPos2;
delay(1000);
}
delay(100);
motorhareket();
}
void motorhareket()
{
joyButton.loop();
x = analogRead(A0);
y = analogRead(A1);
limit1 = digitalRead(limit_1);
if (digitalRead(LIMIT_SWITCH_PIN) == LOW)
{
stepper2.stop();
motor2Pos = 0;
EEPROM.put(EEPROM_ADDR_Z, motor2Pos); // 0 konumunu EEPROM'a kaydet
Serial.println("Z pozisyonu EEPROM'a kaydedildi: 0");
delay(1000);
}
if (limit1 == LOW)
{
stepper.stop();
stepper.setCurrentPosition(0);
motor1Pos = 0;
EEPROM.put(EEPROM_ADDR_Y, motor1Pos); // 0 konumunu EEPROM'a kaydet
Serial.println("Y pozisyonu EEPROM'a kaydedildi: 0");
delay(1000);
}
while((x > 512 + deadZone) && limit1 == HIGH)
{
stepper.setPinsInverted(true, false, false);
stepper.setSpeed(1000);
stepper.move(1000);
stepper.runSpeedToPosition();
motor1Pos--;
x = analogRead(A0);
limit1 = digitalRead(limit_1);
if (!(x > 512 + deadZone) || limit1 == LOW)
{
stepper.stop();
break;
}
}
while((y > 512 + deadZone) && digitalRead(LIMIT_SWITCH_PIN) == HIGH)
{
stepper2.setPinsInverted(true, false, false);
stepper2.setSpeed(2500);
stepper2.move(1000);
stepper2.runSpeedToPosition();
motor2Pos--;
y = analogRead(A1);
if (!(y > 512 + deadZone) || digitalRead(LIMIT_SWITCH_PIN) == LOW)
{
stepper2.stop();
break;
}
}
while (x < 512 - deadZone)
{
stepper.setPinsInverted(false, false, false);
stepper.setSpeed(1000);
stepper.move(1000);
stepper.runSpeedToPosition();
motor1Pos++;
x = analogRead(A0);
if (!(x < 512 - deadZone))
{
stepper.stop();
break;
}
}
while (y < 512 - deadZone)
{
stepper2.setPinsInverted(false, false, false);
stepper2.setSpeed(2500);
stepper2.move(1000);
stepper2.runSpeedToPosition();
motor2Pos++;
y = analogRead(A1);
if (!(y < 512 - deadZone))
{
stepper2.stop();
break;
}
}
}