OK so I'm down to 18% now and I've rid myself of String.
Never new about modulo operator, gonna have to get used to that one I like it.
You make me think AWOL i like that.
Optimized code:
/*
* XY_CNC.cpp
*
* Created: 3/2/2013 10:12:18 PM
* Author: Adam Bennett
* Description: Main Source
*/
#include <arduino.h>
#include <Stepper.h>
/********************** Define Global Variables Here *************************/
Stepper s1(48, 2,3,4,5);
word s1_RPM;
#define btn1 6 // Button 1 Pin
#define btn2 7 // Button 2 Pin
#define adj1 3 // Adjustment 1 input Pin
word btn1v = 0; // Value for Button 1
word btn2v = 0; // Value for Button 2
#define en 8 // Enable pin for SN754410 IC
#define clk_pin 10 // Pin for 595
#define latch_pin 11 // Pin for 595
#define data_pin 12 // Pin for 595
/********************** 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 == 1 && b2 == 0){
digitalWrite(en, HIGH);
s1.step(numstep);
}
if (b1 == 0 && b2 == 1){
digitalWrite(en, HIGH);
s1.step(-numstep);
}
if(b1 == 0 && b2 == 0){
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[dc3]);
shiftOut(data_pin, clk_pin, LSBFIRST, num[dc2]);
shiftOut(data_pin, clk_pin, LSBFIRST, num[dc1]);
digitalWrite(latch_pin, HIGH);
}
/****************************** Setup *********************************/
void setup() {
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
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, 100, 600);
display(s1_RPM);
fwd_rev(btn1v, btn2v, s1_RPM, 1);
}