Skocz do zawartości
kowalkowskiadam

Błąd restartowania czasu

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;}
   }
}
}

 

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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...