Hi! I will share working code for this step motor.
Class:
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace RadugaParnik
{
public class StepMotorService
{
private OutputPort _pin0;
private OutputPort _pin1;
private OutputPort _pin2;
private OutputPort _pin3;
public StepMotorService(Cpu.Pin pin0, Cpu.Pin pin1, Cpu.Pin pin2, Cpu.Pin pin3)
{
_pin0 = new OutputPort(pin0, false);
_pin1 = new OutputPort(pin1, false);
_pin2 = new OutputPort(pin2, false);
_pin3 = new OutputPort(pin3, false);
}
public void MoveForward(int stepsCount, bool fourSterp=false)
{
if (fourSterp)
{
Move4Step(true, stepsCount);
}
else
{
Move(true, stepsCount);
}
}
public void MoveBackward(int stepsCount,bool fourStep = false)
{
if (fourStep)
{
Move4Step(false, stepsCount);
}
else
{
Move(false, stepsCount);
}
}
private void Move(bool forward, int stepsCount)
{
int resCount = stepsCount*7;
int step = 0;
bool dir = !forward;
for (int i = 0; i < resCount; i++)
{
switch (step)
{
case 0:
_pin0.Write(false);
_pin1.Write(false);
_pin2.Write(false);
_pin3.Write(true);
break;
case 1:
_pin0.Write(false);
_pin1.Write(false);
_pin2.Write(true);
_pin3.Write(true);
break;
case 2:
_pin0.Write(false);
_pin1.Write(false);
_pin2.Write(true);
_pin3.Write(false);
break;
case 3:
_pin0.Write(false);
_pin1.Write(true);
_pin2.Write(true);
_pin3.Write(false);
break;
case 4:
_pin0.Write(false);
_pin1.Write(true);
_pin2.Write(false);
_pin3.Write(false);
break;
case 5:
_pin0.Write(true);
_pin1.Write(true);
_pin2.Write(false);
_pin3.Write(false);
break;
case 6:
_pin0.Write(true);
_pin1.Write(false);
_pin2.Write(false);
_pin3.Write(false);
break;
case 7:
_pin0.Write(true);
_pin1.Write(false);
_pin2.Write(false);
_pin3.Write(true);
break;
default:
_pin0.Write(false);
_pin1.Write(false);
_pin2.Write(false);
_pin3.Write(false);
break;
}
if (dir)
{
step++;
}
else
{
step--;
}
if (step > 7)
{
step = 0;
}
if (step < 0)
{
step = 7;
}
Thread.Sleep(1);
}
// ??????? ??? ? ?????
_pin0.Write(false);
_pin1.Write(false);
_pin2.Write(false);
_pin3.Write(false);
}
}
}
Usage:
StepMotorService motorServ = new StepMotorService(Pins.GPIO_PIN_D4,
Pins.GPIO_PIN_D5, Pins.GPIO_PIN_D6, Pins.GPIO_PIN_D7);
motorServ.MoveBackward(2000);
motorServ.MoveForward(5000)