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