// Run a A4998 Stepstick from an Arduino UNO.
// Paul Hurley Aug 2015 - http://www.instructables.com/id/Drive-a-Stepper-Motor-with-an-Arduino-and-a-A4988-/
#define StepX 5
#define StepY 8
#define DirX 4
#define DirY 7
#define EnX 6
#define EnY 9
int nY;
void setup()
{
pinMode(6, OUTPUT); // Enable pin - chân khởi động - nối vào GND sẽ giúp ta bật động cơ bước, nối vô VCC động cơ bước được thả ra. Nôm na: GND = servo.attach, VCC = servo.detach
pinMode(5, OUTPUT); // Step pin
pinMode(4, OUTPUT); // Dir - pin
digitalWrite(6, LOW); // Set Enable low
pinMode(9, OUTPUT); // Enable pin - chân khởi động - nối vào GND sẽ giúp ta bật động cơ bước, nối vô VCC động cơ bước được thả ra. Nôm na: GND = servo.attach, VCC = servo.detach
pinMode(8, OUTPUT); // Step pin
pinMode(7, OUTPUT); // Dir - pin
digitalWrite(9, LOW); // Set Enable low
}
void loop()
{
digitalWrite(EnX, LOW); // Đặt Enable ở trạng thái LOW
digitalWrite(EnY, LOW);
digitalWrite(DirX, HIGH); // Đặt Dir ở trạng thái HIGH
digitalWrite(DirY, HIGH);
uint32_t T = millis();
int StepPerRound = 200;
int nX = 0;
// X always rotates, Y rotates 1 round after 2 seconds
while (nX < StepPerRound || nY < StepPerRound)
{
if (nX < StepPerRound)
{
nX ++;
digitalWrite(StepX, HIGH);
if ((nY < StepPerRound) && (uint32_t)(millis()-T) >= 4000)
{
nY++;
digitalWrite(StepY, HIGH);
}else nY = 0;
if (nY == StepPerRound) T = millis();
delay(1);
digitalWrite(StepX, LOW);
digitalWrite(StepY, LOW);
delay(1);
}
else nX = 0;
}
}