|

Funkcje czasowe z millis Arduino

Możemy opóźnić wykonanie niektórych funkcji, używając metody delay(). Istnieje jednak jedna istotna wada: metoda delay() wstrzymuje cały system na określony czas. W większości przypadków jest to nieakceptowalne.

Dlatego lepiej jest używać podstawowego timera, jak w poniższym przykładzie.

Przykład pokazuje, jak włączać i wyłączać LED_BUILTIN w interwale 1000 ms za pomocą metody millis().

Metoda millis() zwraca czas, jaki upłynął od uruchomienia programu.

int interval = 2000;
long lastTime = 0;
bool isLedOn = false;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void ToggleLed()
{
  isLedOn = !isLedOn;
  digitalWrite(LED_BUILTIN, isLedOn);
}

void loop()
{
  long timeElapsed = millis();
  if(timeElapsed - interval >= lastTime)
  {
    lastTime = timeElapsed;
    ToggleLed();
  }
}

Tworzenie własnej klasy do obsługi czasu z millis

Projekt w tinkercad

class Astratimer 
{
  private:
    int _countDelay; 
	unsigned long _previousMillis;
  	int _counter;
  bool _isRunning;
  
  public:
  Astratimer(int countDelay){
  	_countDelay = countDelay;
  	_previousMillis = 0;
    _counter = 0;
    _isRunning = true;
  }
  
  void start(){
  	_isRunning = true;
  }
  
  void stop(){
    _isRunning = false;
  }
  
  bool execute()
  {
    if(_isRunning && millis() - _previousMillis >= _countDelay)
    {
    	_previousMillis = millis();
    	return true;
    }else
    {
      return false;
    }
  };

};

Astratimer tim1(1000);
Astratimer tim2(3000);

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

void loop() {
  if(tim1.execute()){
    Serial.println(millis());
  }
    if(tim2.execute()){
    Serial.println("Hej");
  }
}

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *