Skocz do zawartości

Wyświetlanie komunikatów w odstępach czasowych


Pomocna odpowiedź

Napisano

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 :( 

@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).

(edytowany)

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

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...