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閃爍,我很樂意採用這種溶劑!
房間裏的大象:'loop'不循環。 – user4581301
@ user4581301就像問題中所說的那樣,我還在一個單獨的'thread'中用一個無限'for'循環測試了它的結果。 – Bram
無論如何,它不會循環。這使得很難判斷代碼的另一個改變是否確實解決了這個問題。當遇到一個神祕錯誤時,首選代碼應該在你認爲不可行的代碼上工作。 – user4581301