Arduino mills() 函式

Ammar Ali 2023年10月12日
  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 毫秒增加一次。你可以通過更改以上程式碼中的可變週期來更改增量時間。

作者: 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