2016-07-19 6 views
1

У меня есть следующий фрагмент кода, который я смог проверить и убедиться, что он работает правильно.set Таймер не работает в замкнутом контуре() 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'; 
} 

я написал небольшое изменение этого кода, который толкает , которые называют в петли() кода, который показан ниже.

Однако, по некоторым причинам, которые мне неизвестны, с этим кодом привел огней прямо с самого начала, а не ждать 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); 
} 

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'; 
} 

Вопрос. Может ли кто-нибудь помочь мне понять, почему поведение отличается от двух источников?

ответ

0

В вашем модифицированном коде в цикле условие if не выполняется вначале, поэтому setInterval не вызывается и запускается немедленно.