#include <SD.h>
#include <Stepper.h>
//#include <String.h>
const int lineMumber = 10;
int steps[lineMumber]; // Массив для хранения количества шагов
int directions[lineMumber]; // Массив для хранения направления (0 — по часовой стрелке, 1 — против часовой стрелки)
int pauses[lineMumber]; // Массив для хранения паузы в мс после завершения вращения
bool done = false; // Признак окончания работы
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 4, 5, 6, 7);

const int CSPin = 10;
File root;
void setup()
{
  Serial.begin(115200);
  Serial.print("Initializing SD card... ");
  if (!SD.begin(CSPin)) //Если ошибка инициализации, то блокирование работы
  {
    Serial.println("Card initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  Serial.println("Files in the card:"); //считывание имен всех файлов на карте
  root = SD.open("/");
  Serial.println("");
  File dataFile = SD.open("dataFile.txt");
  if (dataFile)
  {
    int i = 0;

    while (dataFile.available() && i < lineMumber)
    {

      String inputString = dataFile.readStringUntil('\n'); // Чтение строки до символа новой строки

      //Serial.println(inputString);
      int firstNumber = inputString.substring(0, inputString.indexOf(' ')).toInt();
      inputString.remove(0, inputString.indexOf(' ') + 1);

      int secondNumber = inputString.substring(0, inputString.indexOf(' ')).toInt();
      inputString.remove(0, inputString.indexOf(' ') + 1);

      int thirdNumber = inputString.toInt();

      steps[i] = firstNumber;
      directions[i] = secondNumber;
      pauses[i] = thirdNumber;
      i++;
    }
    dataFile.close();
  }
  else {
    Serial.println("Error opening dataFile!");
  }
  /*
    for (int i = 0; i < 10; i++)
    {
    Serial.print(steps[i]); Serial.print(" ");
    }
  */
}
void loop()
{
  if (!done) {
    for (int count = 0; count < lineMumber; count++) {
      motoControl(steps[count], directions[count]);
      delay(pauses[count]);
    }
    done = true;
    Serial.print("Finish");
  }
}

void motoControl(int steps, int direction) {
  myStepper.setSpeed(100);
  if (direction) {
    myStepper.step(steps);
  } else {
    myStepper.step(-steps);
  }
}