Arduino mills() 函式

Ammar Ali 2023年1月30日 2021年4月29日
  1. 在 Arduino 中使用 millis() 函式檢查經過的時間
  2. 在 Arduino 中使用 millis() 函式閃爍 LED
  3. 使用 millis() 函式更改 Arduino 中 LED 的亮度
Arduino mills() 函式

本教程將討論 millis() 函式在 Arduino 中不同應用程式中的使用。本教程還將討論一些例子來更好地理解 millis() 函式。

在 Arduino 中使用 millis() 函式檢查經過的時間

millis() 函式返回型別為 unsigned long 的無符號變數,該變數包含自 Arduino 開發板開始執行程式碼以來經過的毫秒數。由於返回的變數的型別為 unsigned long,該數字將在 49 天后溢位並重置為零。

unsigned long currentTime;

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

void loop() {
    Serial.print("Time Stamp: ");
    currentTime = millis();
    Serial.println(currentTime);
    delay(1000);
}

在上面的程式碼中,currentTime 是型別為 unsigned long 的變數,用於儲存時間。檢視此連結以獲取有關 millis() 函式的更多資訊。

在 Arduino 中使用 millis() 函式閃爍 LED

在此示例中,我們將使用 millis() 函式閃爍一個 LED。考慮到你必須使 LED 閃爍特定的時間,例如 1 秒鐘。在這種情況下,你可以使用 millis() 函式使 LED 閃爍特定時間。如果你使用 delay() 函式使 LED 閃爍,它還將暫停你的程式碼,直到延遲時間結束。因此,可以使用 millis() 函式來代替使用 delay() 函式,並且該函式不會暫停你的程式碼。

unsigned long startTime;  
unsigned long currentTime;
const unsigned long period = 1000;
const byte ledPin = 13;

void setup()
{
    pinMode(ledPin, OUTPUT);
    startTime = millis();  //initial start time
}

void loop()
{
    currentTime = millis();
    if (currentTime - startTime >= period)//test whether the period has elapsed
    {
        digitalWrite(ledPin, !digitalRead(ledPin));//if so, change the state of the LED.
        startTime = currentTime;
    }
}

在此示例中,LED 將精確地開啟和關閉一秒鐘。你可以通過更改上面程式碼中可變週期的值來更改閃爍週期。

使用 millis() 函式更改 Arduino 中 LED 的亮度

在此示例中,我們將使用 millis() 函式更改 LED 的亮度。我們將設定一個期間,在此期間 LED 的亮度將增加。為此,我們需要將 LED 與 Arduino 的 PWM 引腳連線。我們可以使用 analogWrite() 函式將亮度寫入 LED。我們可以使用 analogWrite 功能在 0 到 255 之間改變 LED 的亮度。

unsigned long startTime;
unsigned long currentTime;
const unsigned long period = 10;
const byte ledPin = 10;    //using an LED on a PWM pin.
byte ledBrightness = 0;       //initial brightness
byte LedIncrement = 1;        //amount to change the brightness

void setup()
{
    pinMode(ledPin, OUTPUT);
    startTime = millis();  //initial start time
}

void loop()
{
    currentTime = millis();
    if (currentTime - startTime >= period)
    {
        analogWrite(ledPin, LedBrightness);    //set the brightness
        LedBrightness += LedIncrement;
        startTime = currentTime;
    }
}

在此示例中,LED 亮度將每 10 毫秒增加一次。你可以通過更改以上程式碼中的可變週期來更改增量時間。

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相關文章 - Arduino Function