I am using a NEMA 17 stepper with a A4988 driver, and the standard rotary encoder. I'm trying to get a base layout for my project, and would appreciate any tips to map the rotary encoder to control the speed of the motor. What I currently have is not working for the speed adjustment.
int startPinState;
int lastStartPinState;
int EMOstate;
const int CLK = 11;
const int DT = 10;
const int SWpin = 9;
const int dirPin = 2;
const int stepPin = 3;
const int startPin = 4;
const int GLED = 5;
const int EMOButton = 13;
const int RLED = 12;
int lastCLKState;
int currentCLKState;
int speedControl;
const int maxSpeed = 500;
const int minSpeed = 0;
void setup() {
pinMode(startPin, INPUT);
pinMode(EMOButton, INPUT);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SWpin, INPUT_PULLUP);
pinMode(RLED, OUTPUT);
pinMode(GLED, OUTPUT);
Serial.begin(9600);
lastCLKState = digitalRead(CLK);
}
void loop() {
currentCLKState = digitalRead(CLK);
if (currentCLKState != lastCLKState) {
if (digitalRead(DT) != currentCLKState) {
speedControl++;
} else {
speedControl--;
}
speedControl = constrain(speedControl, minSpeed, maxSpeed);
}
lastCLKState = currentCLKState;
Serial.println(speedControl);
startPinState = digitalRead(startPin);
if (startPinState == HIGH) {
digitalWrite(dirPin, LOW);
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
int speedTime = map(speedControl, minSpeed, maxSpeed, 1000, 500);
for (int i = 0; i < 100000; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(speedTime);
digitalWrite(stepPin, LOW);
delayMicroseconds(speedTime);
if (digitalRead(EMOButton) == HIGH) {
digitalWrite(GLED, LOW);
digitalWrite(RLED, HIGH);
break;
}
}
}
}```