I have written a function to control the direction and speed of a stepper motor (fwd_rev) and would like to be able to tell this function what motor to use, as I'm going to add a second and third.
I do not want to write a new function for each motor and don't think i have to but I can't figure out have to do it.
Here's my code:
/*
* XY_CNC.cpp
*
*/
#include <arduino.h>
#include <Stepper/Stepper.h>
/********************** Define Global Variables Here *************************/
#define btn1 6 // Button 1 Pin
#define btn2 7 // Button 2 Pin
#define adj1 3 // Adjustment 1 input Pin
#define en 8 // Enable pin for SN754410 IC's
#define clk_pin 10 // Pin for 595
#define latch_pin 11 // Pin for 595
#define data_pin 12 // Pin for 595
Stepper s1(96, 2,3); // Y Stepper
Stepper s2(48, 4,5); // X Stepper
word s1_RPM;
word s2_RPM;
word btn1v = 0; // Value for Button 1
word btn2v = 0; // Value for Button 2
/********************** Custom Functions Here ***********************/
void fwd_rev(int b1, int b2, int RPM, int numstep){
/* This function controls the forward and reverse of the stepper motor.
Allows you to define the forward and reverse buttons to use.
As well as the minimum # of steps per function call the motor will operate at,
"b1" and "b2" are the values of the buttons controlling the motor.
"RPM" is self explanatory.
"numstep " is the minimum number of steps the motor should make as required by the stepper library. */
s1.setSpeed(RPM);
if (b1 == 0 && b2 == 1){
digitalWrite(en, HIGH);
s1.step(numstep);
}
if (b1 == 1 && b2 == 0){
digitalWrite(en, HIGH);
s1.step(-numstep);
}
if(b1 == 1 && b2 == 1){
digitalWrite(en, LOW);
}
}
int adj_dial(int pin, int min, int max){
/* This function will read from an adjustment pin and return the value read.
the value is mapped between min and max values */
int rval; // Return Value
int adj_val = analogRead(pin);
rval = map(adj_val, 0, 1023, min, max);
return rval;
}
void display(int disp){
/* This function will take a 3 digit INT and display the number on the 7 segment display */
byte num[10] = {254,48,109,121,51,91,95,112,127,115}; // Display bits 0-9
word ones = disp % 10;
word tens = (disp - ones) % 100;
word hund = (disp - tens - ones) % 1000;
byte dc1 = ones;
byte dc2 = tens / 10;
byte dc3 = hund / 100;
digitalWrite(latch_pin, LOW);
shiftOut(data_pin, clk_pin, LSBFIRST, num[dc1]);
shiftOut(data_pin, clk_pin, LSBFIRST, num[dc2]);
shiftOut(data_pin, clk_pin, LSBFIRST, num[dc3]);
digitalWrite(latch_pin, HIGH);
}
/****************************** Setup *********************************/
void setup() {
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(en, OUTPUT);
pinMode(clk_pin, OUTPUT);
pinMode(latch_pin, OUTPUT);
pinMode(data_pin, OUTPUT);
// Serial.begin(9600);
}
/******************************** Main Loop ********************************/
void loop() {
btn1v = digitalRead(btn1);
btn2v = digitalRead(btn2);
s1_RPM = adj_dial(adj1, 50, 300);
display(s1_RPM);
fwd_rev(btn1v, btn2v, s1_RPM, 1); // --> I want to do this: fwd_rev(btn1, btn2, s1, RPM, 1);
}