なぜな使用してくださいArduino遅延機能を搭載

初めて使うと、Arduinoボードだったかもこのようになっ:

  • 接続LEDのごArduino
  • アップデフォルトの点滅のスケッチがon/off、LEDを毎秒

この”Hello World”プログラムのArduinoとを示していただ数行のコードを作成できるという現実の世界。

blink sketch

前の例では、delay()関数を使用してLEDのオンとオフの間隔を定義します。Delay()は便利で基本的な例では機能しますが、実際には現実の世界で使用すべきではありません…その理由を学ぶために読んでください。

delay()関数の動作方法

Arduino delay()関数の動作方法はかなり簡単です。

引数として単一の整数を受け入れます。 この数値は、プログラムが次のコード行に移動するまで待機する必要がある時間をミリ秒単位で表します。

遅延(1000)を実行すると、Arduinoはその行で1秒間停止します。

delay()はブロッキング関数です。 ブロック機能は、その特定のタスクが完了するまで、プログラムが他の何かをするのを防ぎます。 複数のタスクを同時に実行する必要がある場合は、単にdelay()を使用することはできません。

アプリケーションで入力データの読み取り/保存が常に必要な場合は、delay()関数の使用を避ける必要があります。 幸いにも解決策があります。

Millis()関数Rescue

millis()関数が呼び出されると、プログラムが最初に起動されてから経過したミリ秒数を返します。

なぜそれが便利なのですか?

いくつかの数学を使用することで、コードをブロックすることなく、どのくらいの時間が経過したかを簡単に確認できます。

以下のスケッチは、millis()関数を使用してblinkプロジェクトを作成する方法を示しています。 それは1000ミリ秒のためにLEDライトをつけ、次にそれを消します。 しかし、それはノンブロッキングの方法でそれを行います。

遅延機能なしで動作する点滅スケッチを詳しく見てみましょう:

/* Blink without Delay, example here: arduino.cc/en/Tutorial/BlinkWithoutDelay*/// constants won't change. Used here to set a pin number :const int ledPin = 13; // the number of the LED pin// Variables will change :int ledState = LOW; // ledState used to set the LED// Generally, you should use "unsigned long" for variables that hold time// The value will quickly become too large for an int to storeunsigned long previousMillis = 0; // will store last time LED was updated// constants won't change :const long interval = 1000; // interval at which to blink (milliseconds)void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT);}void loop() { // here is where you'd put code that needs to be running all the time. // check to see if it's time to blink the LED; that is, if the // difference between the current time and last time you blinked // the LED is bigger than the interval at which you want to // blink the LED. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } // set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); }}

生のコードを見る

上記のこのスケッチはここで見つけることができ、現在の時刻(currentMillis)から以前に記録された時刻(previousMillis)を減算することによって機能します。 残りが間隔(この場合は1000ミリ秒)より大きい場合、プログラムはpreviousMillis変数を現在の時刻に更新し、LEDをオンまたはオフにします。

そして、それはノンブロッキングなので、その最初のif文の外にあるコードは正常に動作するはずです。

loop()関数に他のタスクを追加することができ、コードが1秒ごとにLEDを点滅させることができることがわかりました。

どの機能を使用する必要がありますか?

Arduinoを使って時間を扱う二つの異なる方法を学びました。 Millis()関数を使用すると、delay()を使用するのと比較して、少し余分な作業が必要です。 しかし、あなたのプログラムはそれなしでArduinoでマルチタスクを行うことはできません。

コメントを残す

メールアドレスが公開されることはありません。

Previous post すべての周りの自然を発見
Next post フロリダ博物館