Optimization 如何在Arduino代码中优化这些循环?

Optimization 如何在Arduino代码中优化这些循环?,optimization,arduino,Optimization,Arduino,我很快写了这段代码,让RGB led在整个RGB光谱中消失(我想),并想知道是否有一种更有效的方法来编码主环路中的所有内容?这似乎太复杂了 (顺便说一句,我知道当我改变亮度时速度会改变。) int redPin=9; int格林平=10; int-bluePin=11; 整数亮度=255; int-fadeSpeed=25; 无效设置(){ 引脚模式(红色引脚,输出); 引脚模式(绿色引脚,输出); 引脚模式(蓝引脚,输出); 对于(int i=0;i对于你正在做的事情,一堆循环是可以的。你可以

我很快写了这段代码,让RGB led在整个RGB光谱中消失(我想),并想知道是否有一种更有效的方法来编码主环路中的所有内容?这似乎太复杂了

(顺便说一句,我知道当我改变亮度时速度会改变。)

int redPin=9;
int格林平=10;
int-bluePin=11;
整数亮度=255;
int-fadeSpeed=25;
无效设置(){
引脚模式(红色引脚,输出);
引脚模式(绿色引脚,输出);
引脚模式(蓝引脚,输出);

对于(int i=0;i对于你正在做的事情,一堆循环是可以的。你可以建立一个颜色表并在它们之间插值,或者将公共部分组合成一个你调用的例程…定义当前的r,g,b值,并制作一个例程
设置LED(r,g,b)
。每个循环只需调整一种颜色并调用通用例程。它可以很好地将特定于硬件的部分从特定于控制的决策中移开(更新管脚与计算rgb值)。但这可能并不重要

请注意,
loop()
不会经常运行,因为会有延迟,如果以后需要,这可能会影响串行读取

另一个问题是,您正在更改RGB,但要制作彩虹,我们需要HSV色调饱和度值。有很多人提供了示例。下面是一个:

我会以他的例子更进一步,在循环中消除循环。跟踪当前色调,并在每次调用
loop
时对其进行凹凸,并更新LED。在达到360度时进行环绕。此外,这将更容易反转方向,或随机扫掠颜色


HTH!祝您玩得开心!

如果只是为了尽量减少重复的类似代码行,您可以定义任意多的函数,并定义尽可能方便的参数:

void loop() {
   fadeUp(greenPin);
   fadeUp(redPin);
   fadeUp(bluePin);
   fadeDn(greenPin);
   fadeDn(redPin);
   fadeDn(bluePin);
}

void fadeUp(byte pin) {
   fade(pin, 0, brightness, +1);
}
void fadeDn(byte pin) {
   fade(pin, brightness, 0, -1);
}

void fade(byte pin, byte start, byte end, byte delta) {
   for (byte i=start; i!=end; i+=delta) {
       analogWrite(pin, i);
       delay(fadeSpeed);
   }
}

顺便说一句:你的解决方案没有涵盖“整个RGB光谱”

@ocrdu我的意思是我该怎么做(如果可能的话)用一种更简短的方式写它,它不包括6个单独的for循环。你也删除了不必要的空行,但添加了空格?当你添加空格时,它不是优化得更少吗?不,只是对人类来说更容易阅读。我主要是编辑以突出显示语法;编辑不是这里的答案。你说的“优化”是什么意思?无需优化处理速度,因为您的arduino速度太快(请参阅所有延迟)。也无需优化代码大小。如果您想优化以便于编码,则为时已晚,因为您已经这样做了。:)@datafiddler我不确定优化是否是描述我想知道的东西的好方法。我本质上是想知道是否有一种更简洁的方式来写它。谢谢,希望我能把它写下来,不要有足够的分数或者其他什么来做欢迎你!不用担心。总之@datafiddler的答案可能更好!@aMike:你的答案是我的这也许不是A_HotMashing想要的,但拓宽了潜在的问题,因此更好。HSV配色方案可能更合适,整个“程序”只有一个循环循环是没有用的,除了一个演示。谢谢,这是我一直在寻找的