C++ 如果参数是由另一个函数生成的,如何调用该函数?
我使用Arduino和FastLED库控制一条LED,我设置了一些功能,可以改变LED的颜色等等 我有一个函数,其中传递红色、绿色和蓝色的值,并将整个条带设置为该颜色:C++ 如果参数是由另一个函数生成的,如何调用该函数?,c++,function,arduino,fastled,C++,Function,Arduino,Fastled,我使用Arduino和FastLED库控制一条LED,我设置了一些功能,可以改变LED的颜色等等 我有一个函数,其中传递红色、绿色和蓝色的值,并将整个条带设置为该颜色: void changeColour(int valR、int valG、int valB){ 对于(int i=0;i > > p>不能从C++函数中返回多个值(那么容易)。实际上,randomColor函数只返回一个值,valB,因为它是表达式(valR,valG,valB)中的最后一个值 一种简单的方法是让randomCo
void changeColour(int valR、int valG、int valB){
对于(int i=0;i
然后,我设置了一个预设颜色的二维数组及其相应的RGB值:
int colors[20][3]={
{255,105,180},//HotPink
{255,20147},//DeepPink
{139,0,0},//DarkRed
{255,0,0},//红色
{255,69,0},//橙色
{255,255,0},//黄色
{128,0,0},//栗色
{50205,50},//LimeGreen
{0,255,0},//石灰
{34,139,32},//ForestGreen
{0,128,0},//绿色
{0,100,0},//暗绿色
{102205170},//MediumAquaMarine
{0,255,255},//Aqua
{0,139,139},//DarkCyan
{0191255},//深蓝
{0,0,255},//蓝色
{128,0,128}//紫色
};
我想做的是调用changeColour()代码>函数并从数组中传入随机颜色的RGB值,因此我编写了该函数:
int randomColor();{
int x=rand()%18;
int valR=颜色[x][0];
int valG=颜色[x][1];
int valB=颜色[x][2];
返回(valR、valG、valB);
}
如何获取它,以便调用changeColour()
函数,而不是changeColour(valR,valG,valB)
它调用randomColor()
函数,该函数反过来返回valR,valG
和valB
值,从而将它们传递到changeColour()中< /p> > > p>不能从C++函数中返回多个值(那么容易)。实际上,randomColor
函数只返回一个值,valB
,因为它是表达式(valR,valG,valB)
中的最后一个值
一种简单的方法是让randomColor
将指针返回到colors
数组中,然后重载或更改changeColour
以接受int
数组。因此,不要在该函数内部使用valR
,valG
,valB
,而是使用colorReference[0]
,colorReference[1]
,等等。您的第一个问题是randomColor
返回一个int
,而不是一个
(valR,valG,valB)
使用逗号运算符,按顺序计算所有操作数(在本例中为nop),整个表达式计算为最后一个操作数,即返回的valbB
最简单也是最合适的方法是为RGB颜色创建一个结构:
struct Rgb
{
int r;
int g;
int b;
};
void changeColour(Rgb color) {
for (int i = 0; i < NUM_LEDS; i++) {
led[i] = CRGB(color.r, color.g, color.b);
}
FastLED.setBrightness(255);
FastLED.show();
}
Rgb colours [20] = { /* ... */ };
Rgb randomColour() {
int x = rand() % 18;
return colours[x];
}
<>我也必须指出ARDUIO-LIB有它自己的随机函数:我建议你考虑它。 < P> C++ 11和更多的元组可以使用,但是你还有其他的选择。
1:您可以返回包含RGB值的结构,然后从randomColor()返回它
2:更改randomColor()以接受输出参数。。参考资料
void randomColor(int &r, int &g, int &b) {
int x = rand() % 18;
r = colours[x][0];
g = colours[x][1];
b = colours[x][2];
}
void changeColor() {
int r, g, b;
randomColor(r, g, b);
std::cout << r << " " << g << " " << b << std::endl;
}
void随机颜色(int&r、int&g、int&b){
int x=rand()%18;
r=颜色[x][0];
g=颜色[x][1];
b=颜色[x][2];
}
void changeColor(){
int r,g,b;
随机颜色(r、g、b);
std::cout首先:randomColor
不会返回您认为返回的内容教授,我需要进一步澄清一下。如果没有特殊的结构和语法,您无法从函数返回多个值,对吗?例如元组对象之类?啊,我明白了。谢谢!谢谢,我想我可以看到这里发生了什么。我将其设置为y你有,但当我运行程序时,它会给出错误“变量或字段'ChangeColor'声明无效”?还值得注意的是,changeColour
函数的思想是,当调用该函数时,输入要么是实际的RGB值,要么有一个随机选择它们的函数-不确定这是否真的可能变量或字段“changeColour”声明无效-请仔细检查键入错误。如果您在该函数的Rgb
参数中输入错误。
void randomColor(int &r, int &g, int &b) {
int x = rand() % 18;
r = colours[x][0];
g = colours[x][1];
b = colours[x][2];
}
void changeColor() {
int r, g, b;
randomColor(r, g, b);
std::cout << r << " " << g << " " << b << std::endl;
}
unsigned int randomColor() {
unsigned int r = 11;
unsigned int g = 22;
unsigned int b = 33;
return r << 16 | g << 8 | b;
}
void change_color() {
unsigned int rgb = randomColor();
unsigned int b = rgb & 0xFF;
unsigned int g = (rgb >> 8) & 0xFF;
unsigned int r = (rgb >> 16) & 0xFF;
}