#include <Arduino.h>
const int stepPin = 3; // STEP
const int dirPin = 4; // DIR
int stepDelay = 1000; // µs, للتحكم بالسرعة
unsigned long lastStepTime = 0;
// نطاق التوقف (Dead Zone)
const int deadZoneLow = 450;
const int deadZoneHigh = 574;
int slider = 0;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
//Serial.begin(9600);
}
void loop() {
slider =slider + 1;
if (slider > 1023) slider = 0; // إعادة الدورة
Serial.println(slider); // لمراقبة القيم
// التوقف في المنطقة الوسطى
if (slider > deadZoneLow && slider < deadZoneHigh) {
delay(10); // توقف قصير
return;
}
// تحديد الاتجاه والسرعة
if (slider >= deadZoneHigh) {
digitalWrite(dirPin, HIGH); // أمامي
stepDelay = map(slider, deadZoneHigh, 1023, 2000, 300);
} else {
digitalWrite(dirPin, LOW); // عكسي
stepDelay = map(slider, 0, deadZoneLow, 300, 2000);
}
// توليد نبضة واحدة (خطوة واحدة)
unsigned long now = micros();
if (now - lastStepTime >= stepDelay) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay / 2);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay / 2);
lastStepTime = micros();
}
}