#include <Stepper.h>;
#include <SPI.h>;
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// Are the pins 9 and 10 only needed for indexer logic ?
Stepper myStepper(stepsPerRevolution, 9, 10);
const int slaveSelectPin = 11; // the pin which is connected to boosterpacks SCS
const int nSleep = 6; // pin which wakes up the board
const int nSTALL = 19;
const int nFAULT = 18;
void setup()
{
pinMode(nSleep, OUTPUT); // pin for the nSleep which wakes up the board
pinMode(nSTALL, OUTPUT); //
pinMode(nFAULT, OUTPUT);
pinMode(slaveSelectPin, OUTPUT); // SCS
digitalWrite(nSleep, HIGH); // HIGH wakes up board
SPI.setBitOrder(LSBFIRST);
SPI.begin();
// CTRL Register
digitalWrite(slaveSelectPin, HIGH); // slave select / SCS pin has to be in order to write register
SPI.transfer(0x0F); // ive tried multiple different ways for this.. basically i would be trying to write 16 bit word 0x0f01 for full step. 0xf19 would be 1/8 microstep.
SPI.transfer(0x01); //
delay(15);
delay(150);
// TORQUE Register
SPI.transfer(0x10);
SPI.transfer(0x64); // torque limit to 100 in decimal
delay(15);
delay(150);
// OFF Register
SPI.transfer(0x20);
SPI.transfer(0x30);
delay(150);
// BLANK Register
SPI.transfer(0x31);
SPI.transfer(0x08);
delay(150);
// DECAY Register
SPI.transfer(0x43);
SPI.transfer(0x10);
delay(150);
// STALL Register
SPI.transfer(0x5f);
SPI.transfer(0x40);
delay(150);
// Drive Register
SPI.transfer(0x60);
SPI.transfer(0x55);
delay(150);
// STATUS Register
SPI.transfer(0x70);
SPI.transfer(0x00);
delay(150);
// Sets fault and stall to high == no problem
digitalWrite(nSTALL, HIGH);
digitalWrite(nFAULT, HIGH);
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop()
{
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(100);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(100);
}