2017-07-27 224 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++的介绍(他们是不同的语言),并了解你在做什么。像你一样盲目地瞎忙,不太可能产生好的结果。