2016-07-19 2 views
1

私は以下のコードをテストし、正しく動作することを確認しました。本質的にはset void loop()arduinoでタイマが機能していない

は、コールmyThread.setInterval(5000);5秒後に点滅主導開始します。

#include <Thread.h> 

Thread myThread = Thread(); 
char powerValue; 
int ledPin1 = 2; 
boolean flag = false; 

void myThreadCallback() { 
    digitalWrite(ledPin1, HIGH); 
} 

void setup() { 
    pinMode(ledPin1, OUTPUT); 
    digitalWrite(ledPin1, LOW); 
    Serial.begin(9600); 

    myThread.onRun(myThreadCallback); 
    flag = true; 
    myThread.setInterval(5000); 
} 

void loop() { 
    if (Serial.available()) { 
     powerValue = Serial.read(); 
     Serial.println(powerValue); 
    } 

    if (powerValue == 'A') { 

    } else if (powerValue == 'a') { 
     digitalWrite(ledPin1, LOW); 
    } 

    if (myThread.shouldRun() && flag == true) 
     myThread.run(); 

    powerValue = 'Z'; 
} 

Iは以下に示されループ()コードにを呼び出すを押すこのコードのわずかな変化を書きました。

ただし、このコードで、私にはわかっていないいくつかの理由のためは最初から代わりに5秒を待っているの LEDが点灯します。

#include <Thread.h> 

Thread myThread = Thread(); 
char powerValue; 
int ledPin1 = 2; 
boolean flag = false; 

void myThreadCallback() { 
    digitalWrite(ledPin1, HIGH); 
} 

void setup() { 
    pinMode(ledPin1, OUTPUT); 
    digitalWrite(ledPin1, LOW); 
    Serial.begin(9600); 

    myThread.onRun(myThreadCallback); 
} 

void loop() { 
    if (Serial.available()) { 
     powerValue = Serial.read(); 
     Serial.println(powerValue); 
    } 

    if (powerValue == 'A') { 
     flag = true; 
     myThread.setInterval(5000); 
     // checks if thread should run 
    } else if (powerValue == 'a') { 
     digitalWrite(ledPin1, LOW); 
    } 

    if (myThread.shouldRun() && flag == true) 
     myThread.run(); 

    powerValue = 'Z'; 
} 

質問。 2人のソースの間で動作が異なる理由は誰でも理解できますか?

答えて

0

変更されたコードでは、ループ内で最初にif条件が満たされないため、setIntervalは呼び出されず、すぐに実行されます。

関連する問題