#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();
}
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-
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
vcc1:VCC
gnd1:GND
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS