2017-07-27 131 views
0

我在粒子光子上玩NeoPixels。已經得到了一個示例代碼,通過不同的顏色旋轉neopixels。然而,對於如何擴展這個問題有點困惑,特別是它定義了neopixel顏色的方式。#定義,NeoPIxel的RGB顏色

草圖的顏色定義爲這樣

#define BLUE 5,5,190 
#define WHITE 150,150,150 
#define GREEN 10,180,10 

,並呼籲以這種方式下面的函數自旋

spin (BLUE); 

void spin(int R, int G, int B) { 
    for(i=0; i < PIXEL_COUNT; i++) { 
     strip.setPixelColor(i, R,G,B); 
     strip.show(); 
     delay(waitTime); 
    } 
    for(i=0; i < PIXEL_COUNT; i++) { 
     strip.setPixelColor(i, 0,0,0); 
     strip.show(); 
     delay(waitTime); 
    } 
} 

我想發送的光子命令來改變顏色,所以需要設置一個變量等於所定義的顏色之一併傳遞給旋轉函數。 然而,變量設置爲INT失敗即

int lightcolor = BLUE;

我還試圖陣列

int lightcolor [] = BLUE;

失敗以及。

我設法得到 int lightcolor [1,1,1] = BLUE

通過編譯器,但它沒有在功能呼叫

自旋(lightcolor)

或 自旋(lightcolor [1,1,1] }

只是不確定我在這裏丟失了關於#define如何聲明const以及如何在整個草圖中使用它的問題

謝謝

+0

'5,5,190'不是一個有效的int。你是否應該使用逗號分隔的數字作爲參數傳遞給函數? – Carcigenicate

+0

這確實是一種奇怪的定義顏色的方式,如果您想要對數據做大量工作,這非常無益。我建議看看不同的示例代碼。 –

回答

1

您應該查看一下define語句實際是什麼。在編譯器看到它之前,預處理器將用源文件中的字符5,5,190代替BLUE。

因此,自旋(藍)工作,因爲自旋(5,5,190)的作品。如果你想將藍色分配給一個變量,你實際上必須將它分配給三個變量,因爲旋轉需要三個獨立變量,每個顏色通道一個。爲什麼即使分配給變量呢?爲什麼不使用定義?

閱讀c或C++的介紹(他們是不同的語言),並瞭解你在做什麼。像你一樣盲目地瞎忙,不太可能產生好的結果。