Skocz do zawartości

Wyświetlanie komunikatów w odstępach czasowych


antypepc

Pomocna odpowiedź

Cześć, 

Chciałbym sterować serwami w specyficzny sposób za pomocą zewnętrznych bibliotek sterownika, ale nie będę komplikował, więc posłużę się uproszczonym przykładem: 

Chciałbym, aby przez sekundę wyświetlał się napis Dzień Dobry! A po sekundzie zamienił na Dobry wieczór! Czas liczony oczywiście za pomocą milis():

const unsigned long eventInterval = 1000;
unsigned long previousTime = 0;
unsigned long previousTime2 = 0;

void setup(){
  Serial.begin(9600);
}
 
void loop(){

  unsigned long currentTime = millis();
  unsigned long currentTime2 = millis();
  

  if (currentTime - previousTime >= eventInterval){
    previousTime = currentTime;
    Serial.print("Dzień dobry ");
    Serial.println(currentTime);
    
    }
     else if (currentTime2 - previousTime2 >= eventInterval){  
      previousTime2 = currentTime2;
      Serial.print("Dobry Wieczór ");
      Serial.println(currentTime2);  
    }  
}

Teraz co sekundę wyświetla mi się Dzień Dobry a zaraz niżej Dobry wieczór :( 

Link do komentarza
Share on other sites

@antypepc witam na forum 🙂

W uproszczeniu aktualnie masz teraz 2 identyczne mechanizmy, które po sekundzie wyświetlają komunikat i startują one praktycznie jednocześnie. Ten drugi komunikat "nie wie", że ma wystartować sekundę później niż pierwszy. Rozwiązań może być wiele. Pierwsze: drugi komunikat musi wystartować dopiero sekundę po pierwszym. Druga opcja: zrezygnuj z dwóch osobnych warunków. Niech będzie jeden, a w jego wnętrzu wyświetlaj na zmianę "Dzień dobry" lub "Dobry wieczór" - możesz dodać zmienną licznikową i wyświetlać komunikat zależnie od tego czy warto tej zmiennej jest parzysta lub nieparzysta.

Przeanalizuj na spokojnie swój program, bo aktualnie napisałeś go w taki sposób, że oba komunikaty wyświetlają się co sekundę, a w praktyce potrzebujesz mechanizmu, który wyświetla każdy mechanizm co 2 sekundy, a do tego startują one w różnych momentach (z sekundowym opóźnieniem).

Link do komentarza
Share on other sites

Utworzyłbym dwie flagi: Flagę komunikatu i flagę ważności. Pierwsza zmienia swój stan co sekundę a druga blokuje wysyłanie komunikatów jednego za drugim.

        
// Co sekundę:

if(lastSek != currSek){
if(currSek % 2) // co drugą inny komunikat
        {
             printf("false\n");
        }else
        {
            printf("true\n");
        }
lastSek = currSek; // zabezpieczenie przed wielokrotnym wywołaniem printf
}

 

Edytowano przez _LM_
  • Lubię! 1
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.