I have reduced the code size, also tried keeping ModeCount before reading mode but no help actually when i tried this code modes keep switching between them randomly if two mode switch is pressed.
#define F_CPU 1600000
bool Mode1 = 0;
bool Mode2 = 0;
bool Mode3 = 0;
//......Defining Step Pin and Direction Pin for Stepper.....//
const int stepPin1 = 0;
const int dirPin1 = 1;
const int stepPin2 = 2;
const int dirPin2 = 3;
const int stepPin3 = 22;
const int dirPin3 = 23;
int ModeCount = 0;
void setup() {
// put your setup code here, to run once:
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(14, INPUT);
pinMode(15, INPUT);
pinMode(16, INPUT);
pinMode(stepPin1, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(dirPin3, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
Mode1 = digitalRead(14);
Mode2 = digitalRead(15);
Mode3 = digitalRead(16);
if (ModeCount > 1)
{
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin2, LOW);
digitalWrite(dirPin3, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
//.......lOGIC FOR MODE-1........//
if (Mode1 == HIGH)
{
ModeCount++;
digitalWrite(8, HIGH);
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin2, HIGH);
for (int x = 0; x < 300; x++)
{
digitalWrite(stepPin1, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin1, LOW);
delayMicroseconds(2000);
digitalWrite(stepPin2, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin2, LOW);
delayMicroseconds(2000);
}
}
//.......lOGIC FOR MODE-2........//
if (Mode2 == HIGH)
{
ModeCount++;
digitalWrite(9, HIGH);
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin3, HIGH);
for (int x = 0; x < 200; x++)
{
digitalWrite(stepPin1, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin1, LOW);
delayMicroseconds(2000);
digitalWrite(stepPin3, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin3, LOW);
delayMicroseconds(2000);
}
}
//.......lOGIC FOR MODE-3........//
if (Mode3 == HIGH)
{
ModeCount++;
digitalWrite(10, HIGH);
digitalWrite(dirPin2, LOW);
digitalWrite(dirPin3, HIGH);
for (int x = 0; x < 200; x++)
{
digitalWrite(stepPin2, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin2, LOW);
delayMicroseconds(2000);
digitalWrite(stepPin3, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin3, LOW);
delayMicroseconds(2000);
}
}
}