/*
Stepper Motor Test
stepper-test01.ino
Uses MA860H or similar Stepper Driver Unit
Has speed control & reverse switch
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Defin pins
int SW_L = 2; // Push button for reverse
int SW_R = 3;
int PUL = 5; // PUL- pin
int DIR = 4; // DIR- pin
int Relay = 11;
int spd = A0; // Potentiometer
// Variables
int pd = 500; // Pulse Delay period
int rt = 1000;
boolean setdir_R = LOW; // Set Direction
boolean setdir_L = HIGH;
// Interrupt
void revers()
{
setdir_R = !setdir_R;
}
void forward()
{
setdir_L = !setdir_L;
}
void setup() {
pinMode(PUL, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(Relay, OUTPUT);
attachInterrupt(digitalPinToInterrupt(SW_L), revers, HIGH);
attachInterrupt(digitalPinToInterrupt(SW_R), forward, HIGH);
digitalWrite(Relay, LOW);
}
void left()
{
if(digitalRead(SW_L) == 0)
{
pd = map((analogRead(spd)),0,1023,2000,50);
digitalWrite(Relay, HIGH);
delayMicroseconds(rt);
digitalWrite(DIR, setdir_L);
digitalWrite(PUL, HIGH);
delayMicroseconds(pd);
digitalWrite(PUL, LOW);
delayMicroseconds(pd);
}
if(digitalRead(SW_L) != 0)
{
delayMicroseconds(rt);
digitalWrite(Relay, LOW);
}
}
void right()
{
if(digitalRead(SW_R) == 0)
{
pd = map((analogRead(spd)),0,1023,2000,50);
digitalWrite(Relay, HIGH);
delayMicroseconds(rt);
digitalWrite(DIR, setdir_R);
digitalWrite(PUL, HIGH);
delayMicroseconds(pd);
digitalWrite(PUL, LOW);
delayMicroseconds(pd);
}
if(digitalRead(SW_R) != 0)
{
delayMicroseconds(rt);
digitalWrite(Relay, LOW);
}
}
void loop()
{
left();
right();
}