Funkcje związane z pomiarem czasu

 

    millis()

Funkcja millis() umożliwia odczytanie czasu, który upłynął od uruchomienia bieżącego programu. Funkcja zwraca wartość unsigned long i umozliwia odczytanie wartości do 50 dni od uruchomienia programu. Po tym czasie zliczanie rozpocznie się od nowa. Poniżej znajduje się przykład wykorzystania funkcji millis():

unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Czas od włączenia: ");
  time = millis();      // zapamiętanie wartości czasu
  Serial.println(time); // wysłanie informacji poprzez port szeregowy
  delay(1000);
}

W powyższym przykładzie co sekundę zostanie przesłana informacja o czasie, który upłynął od uruchomienia programu. Ponieważ czas jest mierzony w milisekundach, więc kolejne przesłane wartości będą się różniły o ok. 1000. Dokładność odczytu zależy od stabilności rezonatora kwarcowego układu ARDUINO.

 

    micros()

Funkcja micros() jest odpowiednikiem funkcji millis(), różnica polega głównie na dokładności dokonanego pomiaru. Za pomocą funkcji micros() otrzymamy czas od uruchomienia bieżącego programu podany w mikrosekundach. Licznik zliczanych mikrosekund zostanie wyzerowany po upływie 70 minut. Poniżej podano przykład wykorzystania funkcji micros():

unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Czas od uruchomienia: ");
  time = micros();
  Serial.print(time);
  Serial.println(" mikrosekund ");
  delay(1000);
}

Tak jak w przykładzie funkcji millis(), również w powyższym przykładzie co sekundę zostanie wysłana informacja o odmierzonym czasie, różnica polega tylko na tym, że w tym przypadku czas mierzony jest w mikrosekundach.

    delay()

Funkcja delay() umożliwia zatrzymanie aktualnie wykonywanego programu na określony w parametrze czas. Składnia polecenia jest następująca:

//polecenia
delay(500);      //zatrzymanie na 0,5s
//polecenia
delay(1000);   //zatrzymanie na 1s

Czas podajemy w milisekundach (1s = 1000ms). Podawany parametr może być typu unsigned long czyli wartość zawiera się w przedziale 0 do 4 294 967 295. Poniżej przykład wykorzystania polecenia delay():

#define ledPin 13
void setup()
   {
     pinMode(ledPin,OUTPUT);
   }

void loop()
   {
    digitalWrite(ledPin,HIGH);          //zapal LED
    delay(500);                         //poczekaj 500ms (0,5s)
    digitalWrite(ledPin,LOW);           //zgaś LED
    delay(1000);                        //poczekaj 1000ms (1s)
   }

W powyższym przykładzie dioda LED zapali się na 0,5 sekundy, następnie zgaśnie na sekundę i tak na przemian do czasu wyłączenia zasilania ARDUINO.

    delayMicroseconds()

Funkcja delayMicroseconds() jest odmianą funkcji delay(). Różnica polega na ilości i dokładności odmierzania czasu. Funkcja delay() umożliwia odmierzanie czasu z dokładnością do ok. jednej milisekundy, natomiast delayMicroseconds() z dokładnością do ok. 1 mikrosekundy. Wartość, jaką można podać w parametrze zawiera się w przedziale 0 do 16383. Dla dłuższych przedziałów czasowych należy skorzystać z funkcji delay() lub kilkukrotnie wykorzystać delayMicroseconds().

#define outPin  8                 

void setup()
{
  pinMode(outPin, OUTPUT);      // pin 8 jako wyjście
}

void loop()
{
  digitalWrite(outPin, HIGH);   // pin 8 stan wysoki
  delayMicroseconds(50);        // przerwa 50 mikrosekund      
  digitalWrite(outPin, LOW);    // pin 8 stan niski
  delayMicroseconds(50);        // przerwa 50 mikrosekund
}

Powyższy przykład generuje przebieg prostokątny o okresie 100 mikrosekund i wypełnieniu 50%.