#define inch 32000
#define teeth 5
#define xStp 2
#define yStp 3
#define xDir 5
#define yDir 6
#define Start 13

unsigned long prevTimeX = 0;
unsigned long currTimeX;
unsigned long prevTimeY = 0;
unsigned long currTimeY;
long Dx,Dy;
int Rx,Ry;

int Xrate[] = {30,30,30,30,36,56,98,300};
int Yrate[] = {300,98,56,36,30,30,30,30};
int disA[] = {2330,2254,2072,1818,1515,1110,690,233};
int disB[] = {233,690,1110,1515,1818,2072,2254,2330};

 
void setup() {
  Serial.begin(9600);
  pinMode(xStp, OUTPUT);
  pinMode(xDir, OUTPUT);
  pinMode(yStp, OUTPUT);
  pinMode(yDir, OUTPUT);
  pinMode(Start, INPUT_PULLUP);

  for(int i=0; i<8; i++){
    Serial.print(Xrate[i]);
    Serial.print("/");
    Serial.print(disA[i]);
    Serial.print(" ");
    Serial.print(Yrate[i]);
    Serial.print("/");
    Serial.print(disB[i]);
    Serial.print(" ");
    Serial.println(Xrate[i]*disA[i]-Yrate[i]*disB[i]);
  }
  
}


void loop() {
  if(digitalRead(Start) == LOW){ dovetail();}
}


void dovetail(){

  for(int i=0;i<teeth;i++){  

    digitalWrite(yDir, LOW);
    for(int i=0; i<8; i++){
      Rx = Yrate[i];
      Dx = disB[i];
      Ry = Xrate[i];
      Dy = disA[i];

      while(Dx > 0 && Dy > 0){
        currTimeX = micros(); 
        if((currTimeX - prevTimeX) >= Rx ){
          prevTimeX = currTimeX;
          digitalWrite(xStp, HIGH);
          digitalWrite(xStp, LOW);
          Dx--;
        }
        currTimeY = micros();
        if((currTimeY - prevTimeY) >= Ry ){
          prevTimeY = currTimeY;
          digitalWrite(yStp, HIGH);
          digitalWrite(yStp, LOW);
          Dy--;
        }       
      }
    }
    digitalWrite(yDir, HIGH);
    for(int i=0; i<8; i++){
      Rx = Xrate[i];
      Dx = disA[i];
      Ry = Yrate[i];
      Dy = disB[i];

      while(Dx > 0 && Dy > 0){
        currTimeX = micros(); 
        if((currTimeX - prevTimeX) >= Rx ){
          prevTimeX = currTimeX;
          digitalWrite(xStp, HIGH);
          digitalWrite(xStp, LOW);
          Dx--;
        }
        currTimeY = micros();
        if((currTimeY - prevTimeY) >= Ry ){
          prevTimeY = currTimeY;
          digitalWrite(yStp, HIGH);
          digitalWrite(yStp, LOW);
          Dy--;
        }       
      }
    }
  }
}


uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
stepper1:A-
stepper1:A+
stepper1:B+
stepper1:B-
stepper2:A-
stepper2:A+
stepper2:B+
stepper2:B-
A4988
drv1:ENABLE
drv1:MS1
drv1:MS2
drv1:MS3
drv1:RESET
drv1:SLEEP
drv1:STEP
drv1:DIR
drv1:GND.1
drv1:VDD
drv1:1B
drv1:1A
drv1:2A
drv1:2B
drv1:GND.2
drv1:VMOT
A4988
drv2:ENABLE
drv2:MS1
drv2:MS2
drv2:MS3
drv2:RESET
drv2:SLEEP
drv2:STEP
drv2:DIR
drv2:GND.1
drv2:VDD
drv2:1B
drv2:1A
drv2:2A
drv2:2B
drv2:GND.2
drv2:VMOT
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r