2017-02-22 7 views
-3

ランダムに指定された配列からRGB LEDのPWM値を選択するプログラムを作成しようとしています。それは最初の色、青でうまく動作します。それから私は2番目の色、緑色に巣を掛け、青色は表示しないようにし、緑色の表示のみを消す。ブルーカラーのループのためのあなたが緑の色のために、あなたの "forループ" を夢中Arduino 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); 
    } 
    } 

} 
+1

適切にあなたのコードをフォーマットすると、すべての人に大きな助けになります(自分を含みます)。 –

+4

'greenVariable = random(0,255)'の理由は、9つの輝度値だけです。さらに、あなたのループは無限で、終了条件はありません。 – Michael

+0

また、私は** PWM **を見ています。これは、おそらく 'analogWrite'関数がコンテキストのないものであるかどうかわかりません。オペランドとは何ですか?あなたのLEDはどのようにMCUに接続されていますか?あなたはどのMCUを持っていますか?どのようなPWMを使用していますか(SW、タイマ/カウンタ、PWMAモジュール)? Arduinoはそれが単なるフレームワークなので、あなたは何をしているのか理解できません。このコードはどこに置かれますか(メインスレッド、ISR、...)ですか? – Spektre

答えて

1

次の2つの問題を抱えています(!)。ループが無限に実行されているという事実に基づいて、2番目のforループだけをループします。

2番目の問題(おそらく問題はありませんが、ブルーが表示されない理由)は、blueVariableを0に初期化したことです。 初めて実行する場合は、値0をPWMピンに書き込みます。その後、変数を変更しますが、PWMピンには書き込まないでください。なぜなら、あなたは「無限の緑のループ」に詰め込まれるからです。

Btwはマイケルのコメントと同様に、255から8に変更してください。また、8ビットPWMは0-255の256値を意味するため、最後の値(255)を255に変更する必要があります。

例:

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); 
    }   
} 
+0

ありがとう、H. Puc。いくつかのエラーは、コードを変更することからのものです(したがって、forループ)、私は最初から各試行を開始して、既存のコードを変更してはいけませんでした。あなたの編集内容を読んで、それを適用した後、私は自分のミスがどこにあるかを見ます。実際、RGBの赤い部分を適切な作業順序に適切に追加することができました。 –

関連する問題