Hi, I'm building a motorized camera slider with a stepper motor that is controlled by AccelStepper. I want to display a countdown time to target on a oled display how should I go about coding that?
At the moment I have everything working I can set the duration that the slider will take to run from end to end and display that on the OLED display, but when I press start and the AccelStepper started running (stepperX.runToNewPosition(15000); ) I have to wait until it finishes the run before I can make any change to the OLED display, so if there is any way I can make changes to the display while AccelStepper is running (stepperX.runToNewPosition(15000); )?
void loop()
{
//Slider Setup display 2
{
Serial.println("Set the Duration");
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Set the Duration");
display.display();
delay(1000);
}
while (digitalRead(button1)) // set duration in second
{
inputA = analogRead(A0); // Read Potentiomenter
if ((inputA > previous + 4) || (inputA < previous - 4)) // Signal filter
{
durationSec = map(inputA, 0, 1023, 0, 59); // set duration in second write to "durationSec"
previous = inputA;
{
Serial.println(inputA); // display duration of travel on display (set Seconds)
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 0);
display.println("0");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(68, 0);
display.println(durationSec);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 7);
display.println(" Min Sec");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 23);
display.println("Set Seconds"); // press set to confirm duration
display.display();
}
}
}
delay(500);
while (digitalRead(button1)) // set duration in minutes
{
inputA = analogRead(A0); // Read Potentiomenter
if ((inputA > previous + 4) || (inputA < previous - 4)) // Signal filter
{
durationMin = map(inputA, 0, 1023, 0, 120); // set duration in Minute write to "durationMin"
previous = inputA;
{
Serial.println(inputA); // display duration of travel on display (set Minutes)
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 0);
display.println(durationMin);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(68, 0);
display.println(durationSec);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 7);
display.println(" Min Sec");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 23);
display.println("Set to confirm"); // press set to confirm duration
display.display();
}
}
}
{
Speed = (15000 / ((durationMin * 60) + durationSec));
}
{
digitalWrite(enPin, LOW); // Enable mortor
stepperX.setAcceleration(6000); // Set Acceleration
delay(1000);
}
while (digitalRead(button1)) // press start to start the run
{
Serial.println("Press to start");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 14);
display.println("Press Start to Begin");
display.display();
delay(250);
if (!digitalRead(button2))
{
delay(250);
while (digitalRead(button2))
{
{
{
Serial.println("Running"); // display status and duration setting
{ // display setting
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 0);
display.println("Running");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 18);
display.println(durationMin);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(68, 18);
display.println(durationSec);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 23);
display.println(" Min Sec");
display.display();
}
}
stepperX.setMaxSpeed(Speed);
stepperX.runToNewPosition(15000); // Move stepper to end
}
{
{
Serial.println("Running"); // display status and duration setting
{ // display setting
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 0);
display.println("Running");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 18);
display.println(durationMin);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(68, 18);
display.println(durationSec);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 23);
display.println(" Min Sec");
display.display();
}
}
stepperX.setMaxSpeed(Speed);
stepperX.runToNewPosition(0); // Move stepper to end
}
}
Serial.println("Stopped"); // Display status (stopped)
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Stopped!");
display.display();
delay(3000);
}
}
}