sorry , i appreicate tour help
i really tried to be as simple as i can
this is my complete code
my problem is in the while loops it doest enter it after some time from starting the program
i followed the problem and i found that difference (mills() - startTimer) is equal 65536 and not few milliseconds as expected
int minute = 1000*60;
#define P1 2
#define P2 3
#define P3 4
#define S1 5
#define S2 6
#define S3 7
#define S4 8
#define S5 9
#define S6 10
#define M1 11
#define M2 12
#define btn1 A4
#define btn2 A0
#define btn3 A1
unsigned long startTimer ;
unsigned long startTimer2;
int mode = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(P1 , OUTPUT);
pinMode(P2 , OUTPUT);
pinMode(P3 , OUTPUT);
pinMode(S1 , OUTPUT);
pinMode(S2 , OUTPUT);
pinMode(S3 , OUTPUT);
pinMode(S4 , OUTPUT);
pinMode(S5 , OUTPUT);
pinMode(S6 , OUTPUT);
pinMode(M1 , OUTPUT);
pinMode(M2 , OUTPUT);
pinMode(btn1 , INPUT);
pinMode(btn2 , INPUT);
pinMode(btn3 , INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
startingPoint:
resetMode();
while(mode == 0){
mode = check(0);
Serial.println("Waiting for button");
}
if(mode == 1)
{
Serial.println("Starting button 1 sequence");
startTimer = millis();
Serial.println(millis()-startTimer);
while((millis() - startTimer < 2000*2) && mode == 1)
{
Serial.println(mode);
Serial.println("Inside the while loop");
digitalWrite(P1, HIGH);
digitalWrite(S1, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P1, LOW);
digitalWrite(S1, LOW);
//***********************************************
startTimer = millis();
startTimer2 = millis();
while((millis() - startTimer < 3000*2) && mode ==1){
if(millis() - startTimer2 < 2000*2)
{
digitalWrite(P1, HIGH);
digitalWrite(S3, HIGH);
}
else{
digitalWrite(P1, LOW);
digitalWrite(S3, LOW);
}
digitalWrite(P2, HIGH);
digitalWrite(S2, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P2, LOW);
digitalWrite(S2, LOW);
//***************************************
startTimer = millis();
startTimer2 = millis();
while((millis() - startTimer < 4000*2 )&& mode ==1){
if(millis() - startTimer2 < 3000*2)
{
digitalWrite(P2, HIGH);
digitalWrite(S4, HIGH);
}
else{
digitalWrite(P2, LOW);
digitalWrite(S4, LOW);
}
digitalWrite(M1, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(M1, LOW);
startTimer = millis();
while((millis() - startTimer < 4000*2) && mode == 1)
{
digitalWrite(M2, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(M2, LOW);
//**************************
startTimer = millis();
while((millis() - startTimer < 4000*2) && mode == 1)
{
digitalWrite(M2, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(M2, LOW);
//**********************************
startTimer = millis();
while((millis() - startTimer < 1000*2) && mode==1)
{
digitalWrite(P3, HIGH);
digitalWrite(S5, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P3, LOW);
digitalWrite(S5, LOW);
//**************************************
startTimer = millis();
while((millis() - startTimer < 1000*2) && mode ==1)
{
digitalWrite(P3, HIGH);
digitalWrite(S6, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P3, LOW);
digitalWrite(S6, LOW);
//*****************************
resetMode();
}
if(mode == 2)
{
startTimer = millis();
while((millis() - startTimer < 1000*2)&& mode ==2)
{
digitalWrite(P3, HIGH);
digitalWrite(S5, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P3, LOW);
digitalWrite(S5, LOW);
startTimer = millis();
while((millis() - startTimer < 1000*2) && mode ==2)
{
digitalWrite(P3, HIGH);
digitalWrite(S6, HIGH);
mode = check(mode);
if(mode ==0)
goto startingPoint;
}
digitalWrite(P3, LOW);
digitalWrite(S6, LOW);
resetMode();
}
}
int check(int current){
int btn1state = LOW;
int btn2state = LOW;
int btn3state = LOW;
btn1state = analogRead(btn1);
btn2state = analogRead(btn2);
btn3state = analogRead(btn3);
if (btn1state > 1000)
mode = 1;
else if(btn2state > 1000 )
mode = 2;
else if(btn3state > 1000)
mode = 3;
else
mode = current;
return mode ;
}
void resetMode(){
mode = 0;
digitalWrite(S1, LOW);
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
digitalWrite(S4, LOW);
digitalWrite(S5, LOW);
digitalWrite(S6, LOW);
digitalWrite(P1, LOW);
digitalWrite(P2, LOW);
digitalWrite(P3, LOW);
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
} ```