Could very well be the drive not pushing enough current, I will play with that again to double check if I cant get the current low enough to still function. Here is my code (without accel/decel), which is the code that was running in the video.
Basically it just pulls a number of steps from an array based on what number is entered on the keypad, the code is just set up for one motor at the moment until I can figure out the 'pulsing' issue
#include <Keypad.h>
#include <LiquidCrystal.h>
// defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
const int microStep1 = 22;
const int microStep2 = 23;
const int microStep3 = 24;
//array of steps for each game from gameStep[0] to gameStep[37]
const int gameStep[37] = {0, 86, 173, 259, 346, 432, 519, 605, 692, 778, 865, 951, 1038, 1124, 1211,
1297, 1384, 1470, 1557, 1643, 1730, 1816, 1903, 1989, 2076, 2162, 2249, 2335,
2422, 2508, 2595, 2681, 2768, 2854, 2941, 3027, 3114};
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the symbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {45, 43, 41, 39}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {37, 35, 33, 31}; //connect to the column pinouts of the keypad
int firstnumber=99;
int secondnumber=99;
int thirdnumber=99;
int keyfullnumber=0;
int motorValue1 = 1;
int motorValue2 = 38;
int motorValue3= 75;
int motorValue4 = 112;
Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
digitalWrite(microStep1,HIGH); //sixteenth step for all high
digitalWrite(microStep2,HIGH);
digitalWrite(microStep3,HIGH);
Serial.begin(9600);
}
void loop() {
int GetNumber();
{
int num = 0;
char key = keypad.getKey();
switch (key)
{
case NO_KEY:
break;
case '1':
checknumber(1);
break;
case '2':
checknumber(2);
break;
case '3':
checknumber(3);
break;
case '4':
checknumber(4);
break;
case '5':
checknumber(5);
break;
case '6':
checknumber(6);
break;
case '7':
checknumber(7);
break;
case '8':
checknumber(8);
break;
case '9':
checknumber(9);
break;
case '0':
checknumber(0);
break;
case '*':
deletenumber();
break;
case '#':
calculatesteps();
break;
}
}
}
void checknumber(int x){
if (firstnumber == 99){
lcd.clear();
firstnumber=x;
String displayvalue= String(firstnumber);
lcd.print("Enter Game #");
lcd.print(displayvalue);
//return(displayvalue);
}
else {
if (secondnumber == 99) {
lcd.clear();
secondnumber=x;
String displayvalue= (String(firstnumber)+String(secondnumber));
lcd.print("Enter Game #");
lcd.print(displayvalue);
//return(displayvalue);
}
else {
lcd.clear();
thirdnumber=x;
String displayvalue=(String(firstnumber)+String(secondnumber)+String(thirdnumber));
lcd.print("Enter Game #");
lcd.print(displayvalue);
//return(displayvalue);
}
}
}
void deletenumber() {
if (thirdnumber !=99) {
lcd.clear();
String displayvalue= (String(firstnumber)+String(secondnumber));
lcd.print("Enter Game #");
lcd.print(displayvalue);
thirdnumber=99;
}
else {
if (secondnumber !=99) {
lcd.clear();
String displayvalue=String(firstnumber);
lcd.print("Enter Game #");
lcd.print(displayvalue);
secondnumber=99;
}
else {
if (firstnumber !=99) {
lcd.clear();
String displayvalue ="";
lcd.print("Enter Game #");
lcd.print(displayvalue);
firstnumber=99;
}
}
}
}
void calculatesteps() {
lcd.clear();
lcd.print("Going to #");
if (thirdnumber == 99 && secondnumber == 99 && firstnumber != 99) {
keyfullnumber=firstnumber;
lcd.print(keyfullnumber);
calculatedGame(keyfullnumber);
}
if (secondnumber != 99 && thirdnumber == 99) {
keyfullnumber=(firstnumber*10)+secondnumber;
lcd.print(keyfullnumber);
calculatedGame(keyfullnumber);
}
if (thirdnumber != 99) {
keyfullnumber=(firstnumber*100)+(secondnumber*10)+thirdnumber;
lcd.print(keyfullnumber);
calculatedGame(keyfullnumber);
}
firstnumber=99;
secondnumber=99;
thirdnumber=99;
//resetnumbers();// Reset numbers to get ready for new entry
}
void calculatedGame(int z) {
if (z > 0 && z < 38) {
int calculatedMove = gameStep[keyfullnumber - 1] - gameStep[motorValue1 - 1];
moveMotor1(calculatedMove);
motorValue1 = keyfullnumber;
}
}
void moveMotor1(int calculatedMove) {
if (calculatedMove > 0) {
digitalWrite (dirPin, LOW); //clockwise
for (int i=0; i<calculatedMove; i++) {
digitalWrite (stepPin, HIGH);
delayMicroseconds(30);
delay(12);
digitalWrite (stepPin, LOW);
delayMicroseconds(30);
delay(12);
}
}
else if (calculatedMove < 0) {
digitalWrite (dirPin, HIGH); //counterclockwise
calculatedMove = abs(calculatedMove);
for (int i=0; i<calculatedMove; i++) {
digitalWrite (stepPin, LOW);
delayMicroseconds(30);
delay(12);
digitalWrite (stepPin, HIGH);
delayMicroseconds(30);
delay(12);
}
}
}