Работа по расписанию

byte pn1[]= {8,10,9,11}; // против часовой
byte pn2[]= {8,11,9,10}; // по часовой
byte aa[] = {1,0,0,1,1,0,0};
int flag2;
int i;
unsigned long timing = 0;
int k; // для числа щагов
boolean statusMotor = 0; // разрешение на вращение
int rev;
int sec;

void setup() {
  Serial.begin(115200);
  for (byte i = 0; i < 4; i++) {
    pinMode(pn1[i], OUTPUT);
  }
}

void loop() {
 sec = millis() / 1000;
 sec = sec % 60;
  if (sec == 0) {
    sec++;
    statusMotor = 1;
    rev = -1; 
  }
  if (sec == 30) {
    sec++;
    statusMotor = 1;
    rev = 1; 
  }
  runMotor(rev, 30, 48);
}

void runMotor(int rewers, int dl, int runTime) {
  runTime--;
  if (millis() - timing > dl) { // время между импульсами
    timing = millis();
    if (statusMotor == 1) flag2 = 1; // разрещение на вращение
  }
  if (flag2 == 1) {              
    for (byte ii = 0; ii < 4; ii++) {
      if (rewers == -1) digitalWrite(pn1[ii], aa[ii + i]); 
      else digitalWrite(pn2[ii], aa[ii + i]);
    }
    k++;
    if (k > runTime) { // подсчет шагов
      statusMotor = 0;
      k = 0;
    }
    i++;
    if (i > 3) i = 0;
    flag2 = 0;  
  }
}