Ok thanks for the quick replies guys, here's my code.
const int X_Axis_Pin = A0; //analog pin 0
const int Y_Axis_Pin = A1; //analog pin 1
const int soft_Pot_Pin = A2; //analog pin 2
const int DIR_PIN = 8; //stepper motor direction pin
const int STEP_PIN = 9; //stepper
const int magnet_Pin = 10; //magnet pin
const int button_1_Pin = 2; // the number of the pushbutton pin
const int button_2_Pin = 3; // the number of the pushbutton pin
const int button_3_Pin = 4; // the number of the pushbutton pin
const int button_4_Pin = 5; // the number of the pushbutton pin
const int button_5_Pin = 6; // the number of the pushbutton pin
const int button_6_Pin = 7; // the number of the pushbutton pin
const int valve_1_Pin = 11; // output to control valve
const int valve_2_Pin = 12; // output to control valve
const int valve_3_Pin = 13; // output to control valve
const int valve_4_Pin = A5; // output to control valve
const float speed_Change = .05; // increment/decrement of Speed
const int time = 1000;
const int scaling_factor = 540/time; //Maximum distance from center divided by time
int X_Axis_Reading;
int Y_Axis_Reading;
int soft_Pot_Reading;
int button_1_State = 0; // variable for reading the pushbutton status
int button_2_State = 0; // variable for reading the pushbutton status
int button_3_State = 0; // variable for reading the pushbutton status
int button_4_State = 0; // variable for reading the pushbutton status
int button_5_State = 0; // variable for reading the pushbutton status
int button_6_State = 0; // variable for reading the pushbutton status
int magnet_State; // magnet on or off
float Speed = .5; // stepper motor speed (.01 <= Speed <= 1)
void setup(){
digitalWrite(X_Axis_Pin, HIGH); //enable pullup resistors
digitalWrite(Y_Axis_Pin, HIGH);
digitalWrite(button_1_Pin, HIGH);
digitalWrite(button_2_Pin, HIGH);
digitalWrite(button_3_Pin, HIGH);
digitalWrite(button_4_Pin, HIGH);
digitalWrite(button_5_Pin, HIGH);
digitalWrite(button_6_Pin, HIGH);
pinMode(DIR_PIN, OUTPUT); //set outputs
pinMode(STEP_PIN, OUTPUT);
pinMode(valve_1_Pin, OUTPUT);
pinMode(valve_2_Pin, OUTPUT);
pinMode(valve_3_Pin, OUTPUT);
pinMode(valve_4_Pin, OUTPUT);
Serial.begin(9600);
}
void loop(){
X_Axis_Reading = analogRead(X_Axis_Pin);
Y_Axis_Reading = analogRead(Y_Axis_Pin);
soft_Pot_Reading = analogRead(soft_Pot_Pin);
button_1_State = digitalRead(button_1_Pin); // variable for reading the pushbutton status
button_2_State = digitalRead(button_2_Pin); // variable for reading the pushbutton status
button_3_State = digitalRead(button_3_Pin); // variable for reading the pushbutton status
button_4_State = digitalRead(button_4_Pin); // variable for reading the pushbutton status
button_5_State = digitalRead(button_5_Pin); // variable for reading the pushbutton status
button_6_State = digitalRead(button_6_Pin); // variable for reading the pushbutton status
Serial.print("X =");
Serial.println(X_Axis_Reading);
Serial.print("Y =");
Serial.println(Y_Axis_Reading);
Serial.print("1 =");
Serial.println(button_1_State);
Serial.print("2 =");
Serial.println(button_2_State);
Serial.print("3 =");
Serial.println(button_3_State);
Serial.print("4 =");
Serial.println(button_4_State);
Serial.print("5 =");
Serial.println(button_5_State);
Serial.print("6 =");
Serial.println(button_6_State);
Serial.print("Speed =");
Serial.println(Speed);
Serial.print("Magnet State = ");
Serial.println(magnet_State);
if ((!button_2_State) && Speed <= 1 - speed_Change){
Speed = Speed + speed_Change; //Speed increment
Serial.println("Speed Increment.");
}
if ((!button_5_State) && Speed >= .01 + speed_Change){
Speed = Speed - speed_Change; //Speed degrement
Serial.println("Speed Decrement");
}
if (!button_3_State){
rotateDeg(1,Speed); //rotate 1 degree at Speed
Serial.println("Forward Step");
}
if (!button_4_State){
rotateDeg(-1, Speed); //rotate -1 degree at Speed
Serial.println("Reverse Step");
}
if (!button_6_State){
//Nothing. insert automation loop here
Serial.println("Auto Program");
}
if (!button_1_State){
if (magnet_State == 1){
magnet_State = 0;
digitalWrite(magnet_Pin, LOW);
}
else{
magnet_State = 1;
digitalWrite(magnet_Pin, HIGH);
delay(400); //to prevent uncontrolable and apparently random toggling.
}
Serial.println("Magnet Toggle");
}
if (Y_Axis_Reading >= 568){
digitalWrite(valve_1_Pin, HIGH);
Serial.println("Before");
delay(time-((Y_Axis_Reading-559)/scaling_factor));
Serial.println("During");
digitalWrite(valve_1_Pin, LOW);
delay((Y_Axis_Reading-559)/scaling_factor);
Serial.println("After");
}
/*if (Y_Axis_Reading <= 550){
digitalWrite(valve_2_Pin, HIGH);
delay(-(Y_Axis_Reading-559)/scaling_factor);
digitalWrite(valve_2_Pin, LOW);
delay(time-(-(Y_Axis_Reading-559)/scaling_factor));
}
if (X_Axis_Reading >= 555){
digitalWrite(valve_3_Pin, HIGH);
delay(time-((X_Axis_Reading-547)/scaling_factor));
digitalWrite(valve_3_Pin, LOW);
delay((X_Axis_Reading-547)/scaling_factor);
}
if (X_Axis_Reading <= 535){
digitalWrite(valve_4_Pin, HIGH);
delay(-(X_Axis_Reading-547)/scaling_factor);
digitalWrite(valve_4_Pin, LOW);
delay(time-(-(X_Axis_Reading-547)/scaling_factor));
}*/
delay(1000); //just here to slow down the output for easier reading
}
/*void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);
digitalWrite(DIR_PIN,dir);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}*/
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
My apparent views of the delay() function must be flawed. The part of the code in consideration is everything including and below: (notice the if statements returning a negative value are commented out)
if (Y_Axis_Reading >= 568){
digitalWrite(valve_1_Pin, HIGH);
Serial.println("Before");
delay(time-((Y_Axis_Reading-559)/scaling_factor));
Serial.println("During");
digitalWrite(valve_1_Pin, LOW);
delay((Y_Axis_Reading-559)/scaling_factor);
Serial.println("After");
}