Loop doing 2 times right and then no

Hi, i very don't know why my program is doing the right thing for 2 loop and then it add 65 seconds to "dt". It make no sense.

int bottone1 = 3;
int bottoneStart = 4;
int ledV = 7;
int ledR5 = 13;
int ledR4 = 12;
int ledR3 = 11;
int ledR2 = 10;
int ledR1 = 9;
unsigned int casuale;
int t1 = 0;
float dt = 0;
int i = 0;

void setup() {
  pinMode(bottone1, INPUT);
  pinMode(bottoneStart, INPUT);
  pinMode(ledV, OUTPUT);
  pinMode(ledR1, OUTPUT);
  pinMode(ledR2, OUTPUT);
  pinMode(ledR3, OUTPUT);
  pinMode(ledR4, OUTPUT);
  pinMode(ledR5, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  spegni();
  digitalWrite(ledV,LOW);
  bool START = true;
  bool RUN = true;
  i = 0;
  t1 = 0;
  dt = 0;
  delay(100);
  while(START){
    if(digitalRead(bottoneStart) == HIGH){
      START = false;
      Serial.println("Si comincia!");
      for (i = 0; i < 5; i++){
         digitalWrite(ledV, HIGH);
         delay(100);
         digitalWrite(ledV,LOW);
         delay(100);    
        }    
      delay(10);  
      accendi();
      casuale = random(500, 5000);
      delay(casuale);
      spegni();
      t1 = millis();
       while(RUN){
        if(digitalRead(bottone1) == HIGH){
          RUN = false;
          dt = (millis()-t1) * 0.001;
          }    
        }
      Serial.print("Tempo di reazione: "); 
      Serial.print(dt, 3);
      Serial.println(" Secondi");
      digitalWrite(ledV, HIGH);
      delay(500);
      digitalWrite(ledV, LOW);
    }
  }
}

void accendi(){
      delay(1000);
      digitalWrite(ledR1, HIGH);
      delay(1000);
      digitalWrite(ledR2, HIGH);
      delay(1000);
      digitalWrite(ledR3, HIGH);
      delay(1000);
      digitalWrite(ledR4, HIGH);
      delay(1000);
      digitalWrite(ledR5, HIGH);
}

void spegni(){
      digitalWrite(ledR1, LOW);      
      digitalWrite(ledR2, LOW);      
      digitalWrite(ledR3, LOW);      
      digitalWrite(ledR4, LOW);
      digitalWrite(ledR5, LOW);
}


use unsigned long for anything related to time (like t1)

an int can only represent up to 32767 and then will overflow and go negative

Thank you very much! Now it's all ok!

have fun!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.