2017-04-04 40 views
1

注意:代碼被設計爲運行在粒子光子。請在閱讀我的問題時記住這一點。C++(粒子光子)線程與變化的變量

我想根據名爲blink_type的變量進行指示燈閃爍,當我實現API調用以獲取其他內容的狀態時,此變量將在稍後階段動態更改。我目前在loop()函數中模擬這種行爲(也嘗試過一個線程,但也沒有工作)。

閃爍工作正常,直到變量從0變爲1,之後它不再閃爍,直到我重置。

下面你會發現我的代碼:

// This #include statement was automatically added by the Particle IDE. 
#include <httpsclient-particle.h> 

// Base variables. 
int led = D0; 
int buzzer = D1; 
// Defining blink types. 0 is normal, 1 is breathe. 
int blink_type = 0; 

// Set the threads 
Thread *normalBlinkThread; 
Thread *ledBreatherThread; 

void setup() { 
    // Setup the outputs.  
    pinMode(led, OUTPUT); 
    pinMode(buzzer, OUTPUT); 

    // Create the required threads. 
    normalBlinkThread = new Thread("rest_status_light", normalBlink); 
    ledBreatherThread = new Thread("rest_status_light", hearthBeatBlink); 

} 

os_thread_return_t normalBlink(void*) { 
    // Start never ending loop 
    for(;;) { 
     if(blink_type == 0) { 
      // Blink led 
      digitalWrite(led, HIGH); 
      delay(3000); 
      digitalWrite(led, LOW); 
      delay(3000); 
     } 
    } 
} 

os_thread_return_t hearthBeatBlink(void*) { 
    // Start never ending loop 
    for(;;) { 
     if(blink_type == 1) { 
      // Blink led 
      digitalWrite(buzzer, HIGH); 
      delay(500); 
      digitalWrite(buzzer, LOW); 
      delay(500); 
      digitalWrite(buzzer, HIGH); 
      delay(500); 
      digitalWrite(buzzer, LOW); 
      delay(3000); 
     } 
    } 
} 

void loop() { 
    delay(10000); 
    switch (blink_type) { 
     case 0: 
      blink_type = 1; 
      break; 

     case 1: 
      blink_type = 0; 
      break; 
    } 
} 

爲了不混淆,將「蜂鳴器」輸出(D1)目前還連接到一個LED。

如果有一種更好的方法來根據動態變量以兩種不同的方式使led閃爍,我很樂意採用這種溶劑!

+2

房間裏的大象:'loop'不循環。 – user4581301

+0

@ user4581301就像問題中所說的那樣,我還在一個單獨的'thread'中用一個無限'for'循環測試了它的結果。 – Bram

+1

無論如何,它不會循環。這使得很難判斷代碼的另一個改變是否確實解決了這個問題。當遇到一個神祕錯誤時,首選代碼應該在你認爲不可行的代碼上工作。 – user4581301

回答

1

normalBlink()和hearthBeatBlink()僅在(blink_type == 1)時纔會延遲。當blink_type變爲0時,for循環中不會有任何延遲,其中一個是評估變量變化的第一個,可以永恆地旋轉。嘗試在blink_type爲0的情況下添加一個小延遲。希望這有助於!