Controlling 4 nema 17's with a4988 driver

hello im looking for some advise on my project. im looking to make dosing pumps controlled by bylnk. the aim is to take the know amount of steps it take to dos 1ml and then times that number by the amount i wish to dose so i get the amount of steps needed.

Im also looking to add multiple timers for each nema 17 so the amount you want to dose can be dosed at varuios differant times thought the day.

below is my idea of the code, please bare in mind i havnt added anything for blynk yet or the board ill be using it on (arduino mega).

dos this look about right? or is there a way i can simplify the code as i want to add mabye 5 timers to each dosing pump/nema 17.

#define MOTOR_STEP_PIN1 7
#define MOTOR_DIR_PIN1 6
#define MOTOR_STEP_PIN2 8
#define MOTOR_DIR_PIN2 9
#define MOTOR_STEP_PIN3 10
#define MOTOR_DIR_PIN3 11
#define MOTOR_STEP_PIN4 12
#define MOTOR_DIR_PIN4 13
#define STEP_MODE 4 // (1: Full Step, 2: Half Step, 4: Quarter Step, ...)
#define STEPS_PER_FULL_ROT 200 // @ full steps
int pump1steps = 245;// sets ammount of steps to dose 1ml
int pump2steps = 245;// sets ammount of steps to dose 1ml
int pump3steps = 245;// sets ammount of steps to dose 1ml
int pump4steps = 245;// sets ammount of steps to dose 1ml

// Digital clock display of the time
void clockDisplay(){
  String currentTime = String(hour()) + ":" + minute() + ":" + second();
  String currentDate = String(day()) + " " + month() + " " + year();
  nowseconds = ((hour() * 3600) + (minute() * 60) + second());
  Serial.print("Time =");
  Serial.println(currentTime);
 // Serial.println(currentDate);
  Serial.print("Nowseconds =");
  Serial.println(nowseconds);
 // Serial.print("Start = ");
 // Serial.println(startseconds);
  //Serial.print("Stop = ");
 // Serial.println(stopseconds);
 // Serial.print("fade position0 =");
 // Serial.println(currentFadePosition0);
 // Serial.println();
  // Send time to the App
  Blynk.virtualWrite(V0, currentTime);
  // Send date to the App
  //Blynk.virtualWrite(V2, currentDate);
}
void activetoday() {       // check if schedule should run today
  if (year() != 1970) {
    Blynk.syncVirtual(V15); // sync timeinput widget
    Blynk.syncVirtual(V16);
    sprintf(Date, "%02d/%02d/%04d",  day(), month(), year());
    sprintf(Time, "%02d:%02d:%02d", hour(), minute(), second());
  }
}

BLYNK_WRITE(V21)// ml to dose pump 1 
{
  //reads the differential
  ml1 = param.asFloat();
}

BLYNK_WRITE(V22)// ml to dose pump 1 
{
  //reads the differential
  ml2 = param.asFloat();
}
BLYNK_WRITE(V23)// ml to dose pump 1 
{
  //reads the differential
  ml3 = param.asFloat();
}
BLYNK_WRITE(V24)// ml to dose pump 1 
{
  //reads the differential
  ml4 = param.asFloat();
}
void setup() {
  // put your setup code here, to run once:
 pinMode(MOTOR_STEP_PIN,OUTPUT); 
 pinMode(MOTOR_DIR_PIN,OUTPUT);
 digitalWrite(MOTOR_DIR_PIN,LOW);
digitalWrite(MOTOR_STEP_PIN,LOW);

void pump1{
          digitalWrite(dirPin1,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation. need to change to steps per ml x's ml required to dose
  for(int x = 0; x < pump1steps * ml1; x++) {// takes steps to make 1lm and x's it by the amount to dose to get steps to take.
        digitalWrite(MOTOR_STEP_PIN1,HIGH); 
        delayMicroseconds(500); 
        digitalWrite(MOTOR_STEP_PIN1,LOW); 
        delayMicroseconds(500);
}
void pump2{
          digitalWrite(dirPin2,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation. need to change to steps per ml x's ml required to dose
  for(int x = 0; x < pump2steps * ml2; x++) {// takes steps to make 1lm and x's it by the amount to dose to get steps to take.
        digitalWrite(MOTOR_STEP_PIN2,HIGH); 
        delayMicroseconds(500); 
        digitalWrite(MOTOR_STEP_PIN2,LOW); 
        delayMicroseconds(500);
}
void pump3{
          digitalWrite(dirPin3,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation. need to change to steps per ml x's ml required to dose
  for(int x = 0; x < pump3steps * ml3; x++) {// takes steps to make 1lm and x's it by the amount to dose to get steps to take.
        digitalWrite(MOTOR_STEP_PIN3,HIGH); 
        delayMicroseconds(500); 
        digitalWrite(MOTOR_STEP_PIN3,LOW); 
        delayMicroseconds(500);
}
void pump4{
          digitalWrite(dirPin4,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation. need to change to steps per ml x's ml required to dose
  for(int x = 0; x < pump4steps * ml4; x++) {// takes steps to make 1lm and x's it by the amount to dose to get steps to take.
        digitalWrite(MOTOR_STEP_PIN4,HIGH); 
        delayMicroseconds(500); 
        digitalWrite(MOTOR_STEP_PIN4,LOW); 
        delayMicroseconds(500);
}
BLYNK_WRITE(V16) {   // pump1 timer 1
  TimeInputParam t(param);
int startsecond = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);  
int stopsecond = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
  Serial.print("Start = ");
  Serial.println(startsecond);
  Serial.print("Stop = ");
  Serial.println(stopsecond);
  Serial.println();
  int dayadjustment = -1;  
  if(weekday() == 1){
    dayadjustment = 6; // needed for Sunday Time library is day 1 and Blynk is day 7
  }
  if(t.isWeekdaySelected((weekday() + dayadjustment))){ //Time library starts week on Sunday, Blynk on Monday  
    //Schedule is ACTIVE today 
    if(nowseconds >= startsecond - 31 && nowseconds <= startsecond + 31 ){    // 62s on 60s timer ensures 1 trigger command is sent
      //Blynk.virtualWrite(V0, 255);  // turn on virtual LED
      Serial.println("Schedule 1 started");
    pump1;
    }                  
    if(nowseconds >= stopsecond - 31 && nowseconds <= stopsecond + 31 ){   // 62s on 60s timer ensures 1 trigger command is sent
      //Blynk.virtualWrite(V0, 0);   // turn OFF virtual LED
      Serial.println("Schedule 1 finished");
     // digitalWrite(15, 0);
    }               
  }
}
BLYNK_WRITE(V17) {   // pump1 timer 2
  TimeInputParam t(param);
int startsecond = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);  
int stopsecond = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
  Serial.print("Start = ");
  Serial.println(startsecond);
  Serial.print("Stop = ");
  Serial.println(stopsecond);
  Serial.println();
  int dayadjustment = -1;  
  if(weekday() == 1){
    dayadjustment = 6; // needed for Sunday Time library is day 1 and Blynk is day 7
  }
  if(t.isWeekdaySelected((weekday() + dayadjustment))){ //Time library starts week on Sunday, Blynk on Monday  
    //Schedule is ACTIVE today 
    if(nowseconds >= startsecond - 31 && nowseconds <= startsecond + 31 ){    // 62s on 60s timer ensures 1 trigger command is sent
      //Blynk.virtualWrite(V0, 255);  // turn on virtual LED
      Serial.println("Schedule 1 started");
    pump1;
    }                  
    if(nowseconds >= stopsecond - 31 && nowseconds <= stopsecond + 31 ){   // 62s on 60s timer ensures 1 trigger command is sent
      //Blynk.virtualWrite(V0, 0);   // turn OFF virtual LED
      Serial.println("Schedule 1 finished");
     // digitalWrite(15, 0);
    }               
  }
}
  timer.setInterval(1000L, clockDisplay);     // digital time displayed every second
  timer.setInterval(60000L, activetoday);     // check every minute if schedule should run today
}

void loop() {
  // put your main code here, to run repeatedly:

}