Skocz do zawartości

Błąd restartowania czasu


kowalkowskiadam

Pomocna odpowiedź

stoper start/stop/reset

gdy resetuje pokazuje się 00:00:000 ale zapętliło mi się chyba timeNprint() bo czas leci cały czas od początku 1 kliknięcia ..

pomoccyy

tak wygląda kod

 #include<LiquidCrystal.h>
 LiquidCrystal lcd(12,11,7,6,5,4);

unsigned long start, finished, elapsed;
int ss1 = 0, ss2 = 0;
int pss1 = 0;
int h =0, m =0, s =0, ms=0;
int h2 =0, m2 =0, s2 =0, ms2=0;
long interval = 100;
unsigned long last=0,dur,pre=0,last2=0,dur2,over;
int num_rise=0;
bool reset=0,row=0;
unsigned long curr;

void timeNprint(){
    

    curr = millis();

elapsed = curr - start;
h =(elapsed / 3600000);
over = elapsed % 3600000;
m =(over / 60000);
over = over % 60000;
s =(over / 1000);
ms = over % 1000;
  
// rezultat
  
lcd.setCursor(0,0);
    if (m<10) lcd.print("0");
    lcd.print(m);
    lcd.print(":");
    if (s<10) lcd.print("0");
    lcd.print(s);
    lcd.print(":");
    lcd.print(ms);

}

void printTime(){
  lcd.setCursor(0,2);
  row=!row;
    if (m<10) lcd.print("0");
    lcd.print(m);
    lcd.print(":");
    if (s<10) lcd.print("0");
    lcd.print(s);
    lcd.print(":");
    lcd.print(ms);
  }

void resetNwelcome(){
  m=0;s=0;ms=0;
  lcd.setCursor(0,1);
  lcd.print("Kliknij START!");
  lcd.setCursor(0,0);
  lcd.print("00:00:000");
}

void setup() {
lcd.begin(16,2);
pinMode(2,INPUT);
pinMode(3,INPUT);
}

void loop() {
  num_rise=0;
  resetNwelcome();
  ss1=digitalRead(2);
if (ss1 == HIGH) //start
{
  num_rise++;
  last=millis();
  lcd.clear();
  while(1) 
  {
    switch(num_rise%2)  
    {
      case 0:   //pause
      ss2=digitalRead(3);
      ss1=digitalRead(2);
      dur=millis()-last;
      if (ss2==HIGH) {reset=1;break;} 
      else if(ss1==HIGH && dur>300) {
        num_rise++;
        last=millis();}
      break;
      case 1:  
      timeNprint();
      ss1=digitalRead(2);dur=millis()-last; 
      if (ss1==HIGH &&dur>300) {
        num_rise++;
        last=millis();
        } 
      break;
      
     }
      ss2=digitalRead(3);
      dur2=millis()-last2;
    if(ss2==1 && dur2>300) 
    {
      last2=millis();
      printTime();
      }
    if(reset==1) 
    {resetNwelcome(); reset=0;lcd.clear();row=0;break;}
   }
}
}

 

Link do komentarza
Share on other sites

@kowalkowskiadam witam na forum 🙂 Bardzo ciężko analizować taki kod, bo formatowanie trochę kuleje, komentarze również ubogie, ale zacznijmy od początku. Czym jest zmienna start? Nie mogę zrozumieć jaki jest jej cel. Korzystasz z niej tylko w funkcji timeNprint, a jaka jest wartość tej zmiennej?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...