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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.