Arduino code

Arduino motor code
#include <AccelStepper.h>
//declare motors
  AccelStepper guitar(1,8,9);
  AccelStepper drums(1,10,11);
//motor parameters
  volatile long drumSpeed = 0;
  const long guitarSpeed = 1000; //pulses/second*0.15=150rpm
  const long minDrumSpeed = 100;
  const long maxDrumSpeed = 350; //(300pulse/sec)*(1/400rev/pulse)*(60sec/min)=45rpm
  int enableGuitarPin = 3; //turns motor on/off
  int enableDrumPin = 4;  //turns motor on/off
  
//pot and switch setup
  int potPin = 2;
  int potVal = 0;
  int drumSwitchPin = 7;
  int drumSwitchState = 0;
  int guitarSwitchPin = 5;
  int guitarSwitchState = 0;
  
  float rest = 15.6445; //15.6445
  float correctionFactor = 1.0156;  //1.0156
  float myDiv = 0;//milliseconds per 1/8th note
  
  float processTime = 0; //for calculating lag time in "moveX" function 
  float endTime = 0;
  float startTime = 0;
  
  float start = 0;// for "hold" function
  float endtime = 0;
  
//note distances on cams
  const int EF = 38; const int FE = -EF;    //34 initial   38 final
  const int FG = 36; const int GF = -FG;    //32           36
  const int GA = 38; const int AG = -GA;    //34           38
  const int AB = 38; const int BA = -AB;    //34           38
  const int BC = 38; const int CB = -BC;    //32           38
  const int CD = 44; const int DC = -CD;    //34           44
  const int EB = EF + FG + GA + AB; const int BE = -EB;   
  const int EG = EF + FG; const int GE = -EG;    
  const int GB = GA + AB;   
  
  void setup() {
    attachInterrupt(0,interrupt,RISING); //enters speed control/guitar solo at button push
    guitar.setMaxSpeed(1000);
    guitar.setSpeed(guitarSpeed); 
    drums.setMaxSpeed(maxDrumSpeed);
    drums.setSpeed(drumSpeed); 
    pinMode(enableGuitarPin, OUTPUT);
    pinMode(enableDrumPin, OUTPUT);
    pinMode(drumSwitchPin, INPUT);
    pinMode(guitarSwitchPin, INPUT);  }
    
// button interrupt function
  void interrupt(){
    SpeedControl();
    guitarSolo();   }
    
//move guitar # of steps while drums run continuous
  void moveX(long target){ 
      startTime =  millis();
      guitar.move(-target);
      guitar.setSpeed(guitarSpeed);
      while (guitar.distanceToGo() != 0)
      { guitar.runSpeedToPosition();
        drums.runSpeed();  }
        endTime = millis();
        processTime = endTime - startTime;   }
  
//hold guitar and run drums (msecs)
  void hold(float holdtime) {
    start = millis();
    endtime = start + holdtime - processTime;
    while(millis() < endtime)
    drums.runSpeed();  }
  
//potentiometer drum speed. Calls at beginning of loop, or at button press.
  void SpeedControl() {
    potVal = analogRead(potPin);
    drumSpeed = -map(potVal,0,1023,minDrumSpeed,maxDrumSpeed);
    drums.setSpeed(drumSpeed);
    myDiv = -50000/drumSpeed*correctionFactor;  }
  
//loops one measure of drums only, as long as switch is on. After switched off, takes one measure to return to main loop.
  void DrumSolo() {
     while(drumSwitchState){
     hold(8*myDiv); 
     SpeedControl();
     drumSwitchState = digitalRead(drumSwitchPin);  }
     digitalWrite(enableGuitarPin, LOW); //turns guitar motor back on
     hold(8*myDiv);   }
    
//Loops through song with drums off. Uselful for tuning cam distances.
  void guitarSolo(){
    guitarSwitchState = digitalRead(guitarSwitchPin);
    if(guitarSwitchState){
    digitalWrite(enableDrumPin, HIGH); //turns off drum motor
    } else {
    digitalWrite(enableDrumPin, LOW);  }   }
    
//main function    
  void loop() {
    guitarSolo();
    SpeedControl();
    
//drum solo?
   drumSwitchState = digitalRead(drumSwitchPin);
   if (drumSwitchState){
      digitalWrite(enableGuitarPin, HIGH);//turns off (releases) guitar motor coils.
    DrumSolo();  }
    
    guitarSolo();
    
  for (int i = 0; i<=1; i++){
//measure 1
    hold(3*myDiv);
    moveX(EF);
    hold(myDiv);
    moveX(FG);
    hold(2*myDiv);
    moveX(GA);
    hold(2*myDiv);
    
//measure 2
    moveX(AB);
    hold(3*myDiv);
    moveX(BC);
    hold(myDiv);
    moveX(CD);
    hold(2*myDiv);
    moveX(DC);
    hold(2*myDiv);
    
//measure 3 & 4
    moveX(CB);
    
    if(i==0){
      hold(rest*myDiv);
      moveX(BE);
    } else {
      hold(rest*myDiv);   }  }
  
//measure 9
    moveX(BC);
    hold(myDiv);
    moveX(CB);
    hold(2*myDiv);
    moveX(BC);
    hold(myDiv);
    moveX(CB);
    hold(2*myDiv);
    moveX(BA);
    hold(2*myDiv);
    
//measure 10
    moveX(AB);
    hold(myDiv);
    moveX(BA);
    hold(2*myDiv);
    moveX(AB);
    hold(myDiv);
    moveX(BA);
    hold(2*myDiv);
    moveX(AG);
    hold(myDiv);
    moveX(GE);
    hold(myDiv);
    
//measure 11 & 12
    moveX(EG);
    hold(rest*myDiv);
    
//measure 13
    moveX(GB);
    hold(myDiv);
    moveX(BA);
    hold(2*myDiv);
    moveX(AB);
    hold(myDiv);
    moveX(BA);
    hold(2*myDiv);
    moveX(AG);
    hold(2*myDiv);
    
//measure 14
    moveX(GA);
    hold(myDiv);
    moveX(AG);
    hold(2*myDiv);
    moveX(GA);
    hold(myDiv);
    moveX(AG);
    hold(2*myDiv);
    moveX(GF);
    hold(2*myDiv);
    
//measures 15 & 16
    moveX(FE);
    hold(rest*myDiv);
    }