#include <Arduino.h>
#include <ShiftRegister74HC595.h>
// https://github.com/Simsso/ShiftRegister74HC595
const int dataPin = 5; /* DS */
const int clockPin = 19; /* SHCP */
const int latchPin = 18; /* STCP */
ShiftRegister74HC595<4> sr(dataPin, clockPin, latchPin);
// 电机反转
void backward(unsigned long STEPS_PER_REV)
{
unsigned int delayTime = 2000;
// 设置电机顺时针旋转
// digitalWrite(dirPin, LOW);
sr.set(3, HIGH);
sr.set(1, HIGH);
sr.set(11, HIGH);
sr.set(9, HIGH);
sr.set(17, HIGH);
sr.set(19, HIGH);
sr.set(25, HIGH);
sr.set(27, HIGH);
// 电机慢速旋转
for (int x = 0; x < STEPS_PER_REV; x++)
{
// digitalWrite(stepPin, HIGH);
sr.set(4, LOW);
sr.set(2, LOW);
sr.set(12, LOW);
sr.set(10, LOW);
sr.set(20, LOW);
sr.set(18, LOW);
sr.set(28, LOW);
sr.set(26, LOW);
delayMicroseconds(delayTime);
// digitalWrite(stepPin, LOW);
sr.set(4, HIGH);
sr.set(2, HIGH);
sr.set(12, HIGH);
sr.set(10, HIGH);
sr.set(20, HIGH);
sr.set(18, HIGH);
sr.set(28, HIGH);
sr.set(26, HIGH);
delayMicroseconds(delayTime);
}
}
// 电机正转1
void forward1(unsigned long STEPS_PER_REV)
{
unsigned int delayTime = 2000;
// 设置电机顺时针旋转
// digitalWrite(dirPin, LOW);
sr.set(3, LOW);
sr.set(1, LOW);
sr.set(11, LOW);
sr.set(9, LOW);
sr.set(17, LOW);
sr.set(19, LOW);
sr.set(25, LOW);
sr.set(27, LOW);
// 电机慢速旋转
for (int x = 0; x < STEPS_PER_REV; x++)
{
// digitalWrite(stepPin, HIGH);
sr.set(4, HIGH);
sr.set(2, HIGH);
sr.set(12, HIGH);
sr.set(10, HIGH);
sr.set(20, HIGH);
sr.set(18, HIGH);
sr.set(28, HIGH);
sr.set(26, HIGH);
delayMicroseconds(delayTime);
// digitalWrite(stepPin, LOW);
sr.set(4, LOW);
sr.set(2, LOW);
sr.set(12, LOW);
sr.set(10, LOW);
sr.set(20, LOW);
sr.set(18, LOW);
sr.set(28, LOW);
sr.set(26, LOW);
delayMicroseconds(delayTime);
}
}
// 电机正转
void forward(unsigned long STEPS_PER_REV)
{
unsigned int delayTime = 1;
// 设置电机顺时针旋转
for (int i = 32; i > 1; i--)
{
if (i % 2 == 1)
{
sr.set(i, LOW);
}
}
// // 电机慢速旋转
// for (int x = 0; x < STEPS_PER_REV; x++)
// {
// for (int i = 32; i > 1; i--)
// {
// if (i % 2 == 0)
// {
// sr.set(i, HIGH);
// delayMicroseconds(1);
// sr.set(i, LOW);
// }
// }
// delayMicroseconds(1);
// }
// 电机慢速旋转
for (int x = 0; x < STEPS_PER_REV; x++)
{
for (int i = 32; i > 1; i--)
{
if (i % 2 == 0)
{
sr.set(i, HIGH);
delayMicroseconds(delayTime);
sr.set(i, LOW);
}
}
delayMicroseconds(1);
}
}
void setup()
{
}
void loop()
{
forward(200);
// backward(200);
delay(1000);
}