#include "MotorA4988.h"
#include <SD.h>
#define PIN_DIR 6
#define PIN_STEP 7
#define ZERO 48
#define NINE 57
const int stepsPerRevolution = 200;
MotorA4988 motor(stepsPerRevolution, PIN_DIR, PIN_STEP);
File programmFile;
long steps = 0;
byte direction = 0;
unsigned long delayTime = 0;
void executeNextLine()
{
static int line = 0;
static bool fileFinished = false;
if(programmFile.available())
{
++line;
Serial.print("Line = ");
Serial.print(line);
skipBadSymbols();
steps = readNumber();
skipBadSymbols();
direction = programmFile.read() - ZERO;
skipBadSymbols();
delayTime = readNumber();
Serial.print(", steps = ");
Serial.print(steps);
Serial.print(", direction = ");
Serial.print(direction);
Serial.print(", delay = ");
Serial.println(delayTime);
if(direction == 1)
{
motor.step(steps);
}
else
{
motor.step(-steps);
}
delay (delayTime);
}
else if(!fileFinished)
{
programmFile.close();
fileFinished = true;
Serial.println("Programm finished.");
}
};
void skipBadSymbols()
{
byte symbol;
do
{
symbol = programmFile.read();
}while(symbol < ZERO || symbol > NINE);
programmFile.seek(programmFile.position() - 1);
};
long readNumber()
{
byte symbol;
long value = 0;
do
{
symbol = programmFile.read();
if(symbol < ZERO || symbol > NINE) {break;}
value = value * 10 + (symbol - ZERO);
}while(1);
return value;
};
void setup() {
motor.setSpeed(60);
motor.step(2);//компенсация начального сдвига
Serial.begin(115200);
Serial.print("Initializing SD card... ");
if (!SD.begin())
{
Serial.println("card initialization failed!");
while (1);
}
Serial.println("initialization done.");
Serial.print("File motor.txt opening... ");
programmFile = SD.open("motor.txt");
if(!programmFile)
{
Serial.println("error opening motor.txt!");
while (1);
}
else
{
Serial.println("file motor.txt is open.");
}
};
void loop()
{
executeNextLine();
}