Arduino Timelapse 3.0 (Problem mit Stepper28BYJ-48)

Hi Ich bins nochmal :smiley:

Wiedereinmal sitze ich fragen vor meinem Computer und zwar hab ich folgendes Problem ich möchte 2 Stepper unabhängig von einander drehen lassen mit Nachträglich einstellbarer Geschwindigkeit z.B.
Stepper 1 macht 200 Schritte mit Geschwindigkeit x und stoppt dann.
Stepper 2 macht 300 Schritte mit Geschwindigkeit y und stoppt dann.

Zusätzlich sollen sie dann per Joystick gesteuert werden können aber das ist erstmal 2 Rangig.

Ich hab aus dem Netz schon ein Programm was so funktioniert allerdings laufen sie da nur hin und her ich war nicht in der Lage es umzuschreiben wie gewollt das Problem ist ich komme nicht so ganz hinter die Logik....
Ich hab schon ein wenig drin herumgepfuscht hoffe man kann es trotzdem lesen

void setOutput(byte index, byte state);       
struct toyStepper_t {
  byte bluePin; byte pinkPin; byte yellowPin; byte orangePin;
  unsigned long stepDelay; bool clockwise; byte curState;
  unsigned int steps2go; unsigned long lastStepMicros;
};
toyStepper_t stepper[2] = {                        //Array für 2 Schrittmotoren Pinbelegung

  {5, 6, 8, 9, true, 0, 0, 0 },                     //Motor 2 PAN (360° drehen)
  {13, 12, 11, 10, true, 0, 0, 0 },                  //Motor 1 Tilt 50-120° drehen
  
};

const int sens = A1;            //Potentiometer für die Einstellung der Geschwindigkeit (Wert:0-1023) an AnalogPin A0
int valsens = 0;                //Normalwert des Potis



const int NUMSTEPPERS = sizeof(stepper) / sizeof(toyStepper_t);
const byte lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; //Ansteuerung für Motoren
unsigned long altMillisPrint, now;     //Zahlenspeicher 0-4.294.967.295
unsigned long startzeit;                  
void updateStepper(byte index, long nowMicros)   //Steuercode für Stepper (Drehrichtung)
{
  if (stepper[index].steps2go == 0) return;
  if (nowMicros - stepper[index].lastStepMicros >= stepper[index].stepDelay)
  {
    stepper[index].lastStepMicros = nowMicros;
    stepper[index].steps2go--;
    if (stepper[index].clockwise)
    {
      if (stepper[index].curState > 0) stepper[index].curState--; else stepper[index].curState = 7;
    }
    else
    {
      if (stepper[index].curState < 7) stepper[index].curState++; else stepper[index].curState = 0;
    }
    setOutput(index, stepper[index].curState);
  }
}



void setup() {
  
  
  

  for (int i = 0; i < NUMSTEPPERS; i++)      //Zählt solange bis I < NUMSTEPPERS
  {
    pinMode(stepper[i].bluePin, OUTPUT);      //legt Pins als OUTPUT fest
    pinMode(stepper[i].pinkPin, OUTPUT);
    pinMode(stepper[i].yellowPin, OUTPUT);
    pinMode(stepper[i].orangePin, OUTPUT);
    setOutput(i, stepper[i].curState);
  }
  
}










const unsigned int stepsPerRevolution = 10; 


void loop() {
valsens=analogRead(sens);      //valsens ist gleich gemessener Wert an sens (Poti für Geschwindigkeit)


 //Stepper Geschwindigkeit
  stepper[0].stepDelay = 1000L * valsens/4;                //Motor 1 Tilt 50-120° drehen
  stepper[1].stepDelay = 4000L * valsens/5;                 //Motor 2 PAN (360° drehen)
  



 now = micros();                                          //now ist gleich Microsekunden 
 startzeit=millis();                                      //startzeit ist gleich Millisekunden 



  for (int i = 0; i < NUMSTEPPERS; i++)
    {
      updateStepper(i, now);
      if (stepper[i].steps2go == 0)
      {
        stepper[i].clockwise = !stepper[i].clockwise;               //ist Anzahl der von einer Umdrehung erreicht dreht Motor in die andere Richtung
        stepper[i].steps2go = stepsPerRevolution;
      }
    }


}







void setOutput(byte index, byte state)                                 //OUTPUT für Schrittmotor
{
  digitalWrite(stepper[index].bluePin, bitRead(lookup[state], 1));
  digitalWrite(stepper[index].pinkPin, bitRead(lookup[state], 0));
  digitalWrite(stepper[index].yellowPin, bitRead(lookup[state], 3));
  digitalWrite(stepper[index].orangePin, bitRead(lookup[state], 2));
}