C++ Arduino RGB LED随机PWM电平

C++ Arduino RGB LED随机PWM电平,c++,arduino,embedded,rgb,led,C++,Arduino,Embedded,Rgb,Led,我正在尝试创建一个程序,该程序将从给定阵列中随机选择RGB LED的PWM值。它与第一种颜色蓝色配合很好。然后我嵌套在第二种颜色,绿色,我从显示中去掉蓝色,只显示绿色 void loop() { // put your main code here, to run repeatedly: int x[9] = {0, 32, 64, 96, 128, 160, 192, 224, 256}; //setup Array X for brightness options int b

我正在尝试创建一个程序,该程序将从给定阵列中随机选择RGB LED的PWM值。它与第一种颜色蓝色配合很好。然后我嵌套在第二种颜色,绿色,我从显示中去掉蓝色,只显示绿色

void loop() {
  // put your main code here, to run repeatedly:

  int x[9] = {0, 32, 64, 96, 128, 160, 192, 224, 256};  //setup Array X for brightness options
  int blueVariable = 0;                                 //Blue LED
  int greenVariable = 0;                                //Green LED
  for (int blueLed = 0; blueLed > -1; ) {               //for loop to choose PWM option
    analogWrite(11, x[blueVariable]);                   //Initilize the PWM function on pin 11 to brightness of blueVariable
  //  if (blueLed == 255) blueLed = 0;                    //
    blueVariable = random(0,8);                         //Random function to decide on blueVariable value
  delay(500);


     for (int greenLed = 0; greenLed > -1; ) {
       analogWrite(10, x[greenVariable]);
      //  if (g == 255) g = 0;             // switch direction at peak
        greenVariable = random(0,255);
     delay(500);
     }
  }

}
你有两个问题:

首先,将绿色的“for循环”挂接在蓝色的(!)for循环中。基于运行无限循环的事实,您只能循环第二个for循环

第二个问题(可能不是问题,但您没有看到蓝色的原因)是您将blueVariable初始化为0。 如果第一次运行,则将值0写入PWM引脚。之后,您更改变量,但不要写入PWM引脚,因为您会陷入“无限绿色循环”

顺便说一句,正如Michael在评论中所说,您应该将255更改为8,并且在数组中,您应该将最后一个值(256)更改为255,因为8位PWM表示0-255之间的256个值

例如:

int x[9] = {0, 32, 64, 96, 128, 160, 192, 224, 255};    // Changed Value

void loop() {
  int blueVariable = 0;                                 //Blue LED
  int greenVariable = 0;                                //Green LED

  while(1) {                                            // Because it was infinite already i changed it to while(1)
    blueVariable = random(0,8);                         //Put in front of analogWrite()
    analogWrite(11, x[blueVariable]);                   
    delay(500);

    // Deleted the scond loop
    greenVariable = random(0,8);                        // Value changed from 255 to 8; Also put in front of analogWrite
    analogWrite(10, x[greenVariable]);
    delay(500);
  }        
}

正确格式化代码对每个人(包括你自己)都有很大帮助。为什么
greenVariable=random(0255)
,你只有9个亮度值。此外,您的循环是无止境的,没有退出条件。此外,我在这里没有看到PWM,这可能是
analogWrite
函数的作用,但如果没有上下文,我们不知道它的作用。操作数是什么?您的LED如何连接到MCU?你有哪台MCU?您正在使用什么PWM(开关、定时器/计数器、PWMA模块)?Arduino不是一个神奇的词,它只是一个框架,所以你看不到/不明白你在做什么。。。这个代码放在哪里/被称为(主线程、ISR等)?Michael,你的右边是以前的代码,应该已经更改了。谢谢H.Puc。有些错误是由于从增加和减少双向性(因此是for循环)更改代码造成的,我应该从头开始每次尝试,而不是修改现有代码。在阅读您的编辑并应用它们之后,我看到了我的错误所在。事实上,我能够正确地将RGB的红色部分添加到正确的工作顺序中。