Ok, here is the complete code I have been working on. Changing those "if" statements to "else if" stopped every if statement from running like below.
if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 0) {
If I trigger the vibration sensor it runs through each statement fine and makes it to the final "if" if I don't exceed the timeDiff "else if" statement. The final "if" statement executes properly and return back to the if statement where SensorCounter == 0 and will continue. The issue I have now is the "else if" that checks time. like here:
else if (totalTimediff2 > 12000) {
SensorCounter = 0;
}
My intensions was for the if statement to continue if each is true down to the last if statement as long as each one before it was true, otherwise return SensorCounter to 0 and start over. But if any "else if" statements like above are triggered, it does go back to the top but will no longer advance. Sensor counter stays at 0 at that point. Perhaps my lack of knowledge is to play here. I might not be using the right statement or maybe I have {} wrong? Any ideas how to fix this problem? Thanks
#define greenLED 0
#define speaker 1
#define vibSensor 2
#define redLED 3
#define speakerSwitch 4
int VibSenseInput = 0;
int SensorCounter = 0;
int SpeakerSwitch = 0;
int counter;
int counter2;
int counter3;
int counter4;
int counter5;
int counter6;
int counter7;
int counter8;
unsigned long prevTime = millis();
unsigned long counterTimestamp = millis();
unsigned long counterTimestamp0 = millis();
unsigned long counterTimestamp1 = millis();
unsigned long counterTimestamp2 = millis();
unsigned long counterTimestamp3 = millis();
unsigned long counterTimestamp4 = millis();
unsigned long counterTimestamp5 = millis();
unsigned long counterTimestamp6 = millis();
unsigned long timeDiff1;
unsigned long totalTimediff1;
unsigned long timeDiff2;
unsigned long totalTimediff2;
unsigned long timeDiff3;
unsigned long totalTimediff3;
unsigned long timeDiff4;
unsigned long totalTimediff4;
unsigned long timeDiff5;
unsigned long totalTimediff5;
void setup()
{
pinMode(vibSensor, INPUT);
pinMode(speakerSwitch, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(speaker, OUTPUT);
}
void loop()
{
unsigned long currentTime = millis();
VibSenseInput = digitalRead(2);
SpeakerSwitch = digitalRead(4);
///This statement is fine
if (VibSenseInput == LOW && SpeakerSwitch == LOW) {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
}
///This statement is fine
if (VibSenseInput == HIGH && SpeakerSwitch == LOW) {
digitalWrite(greenLED, LOW);
digitalWrite(speaker, LOW);
for (counter = 0; counter < 40; ++counter) {
digitalWrite(redLED, HIGH);
delay(50);
digitalWrite(redLED, LOW);
delay(50);
}
}
///This statement is fine
if (VibSenseInput == LOW && SpeakerSwitch == HIGH) {
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
}
///Works fine if else if timeDiff statement is not triggered. If those statements bring it back
///to this point, SensorCounter will never increase.
if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 0) {
SensorCounter++;
counterTimestamp1 = currentTime;
digitalWrite(greenLED, LOW);
for (counter2 = 0; counter2 < 20; ++counter2) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
else if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 1) {
SensorCounter++;
counterTimestamp2 = currentTime;
timeDiff1 = counterTimestamp2 - counterTimestamp1;
totalTimediff1 = timeDiff1;
digitalWrite(greenLED, LOW);
for (counter3 = 0; counter3 < 20; ++counter3) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
///These are the statements that appear to be causing the issue, every one just like this below
else if (timeDiff1 > 6000) {
SensorCounter = 0;
}
else if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 2) {
SensorCounter++;
counterTimestamp3 = currentTime;
timeDiff2 = counterTimestamp3 - counterTimestamp2;
totalTimediff2 = timeDiff1 + timeDiff2;
digitalWrite(greenLED, LOW);
for (counter4 = 0; counter4 < 20; ++counter4) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
else if (totalTimediff2 > 12000) {
SensorCounter = 0;
}
else if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 3) {
SensorCounter++;
counterTimestamp4 = currentTime;
timeDiff3 = counterTimestamp4 - counterTimestamp3;
totalTimediff3 = timeDiff1 + timeDiff2 + timeDiff3;
digitalWrite(greenLED, LOW);
for (counter5 = 0; counter5 < 20; ++counter5) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
else if (totalTimediff3 > 18000) {
SensorCounter = 0;
}
else if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 4) {
SensorCounter++;
counterTimestamp5 = currentTime;
timeDiff4 = counterTimestamp5 - counterTimestamp4;
totalTimediff4 = timeDiff1 + timeDiff2 + timeDiff3 + timeDiff4;
digitalWrite(greenLED, LOW);
for (counter6 = 0; counter6 < 20; ++counter6) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
else if (totalTimediff4 > 24000) {
SensorCounter = 0;
}
else if (VibSenseInput == HIGH && SpeakerSwitch == HIGH && SensorCounter == 5) {
SensorCounter++;
counterTimestamp6 = currentTime;
timeDiff5 = counterTimestamp6 - counterTimestamp5;
totalTimediff5 = timeDiff1 + timeDiff2 + timeDiff3 + timeDiff4 + timeDiff5;
digitalWrite(greenLED, LOW);
for (counter7 = 0; counter7 < 20; ++counter7) {
digitalWrite(redLED, HIGH);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, HIGH);
delay(50);
digitalWrite(redLED, HIGH);
digitalWrite(speaker, LOW);
delay(50);
digitalWrite(redLED, LOW);
digitalWrite(speaker, LOW);
delay(50);
}
}
else if (totalTimediff5 > 30000) {
SensorCounter = 0;
}
///This statement works correctly and return to the top and advances normally
if (SensorCounter >= 6 && totalTimediff5 < 30000) {
digitalWrite(speaker, LOW);
for (counter8 = 0; counter8 < 20; ++counter8) {
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
delay(200);
digitalWrite(greenLED, HIGH);
digitalWrite(redLED, LOW);
delay(200);
}
SensorCounter = 0;
}
}