2017-05-15 9 views
-2

Arduinoに接続されたLEDの明るさをキーストロークで変更するプログラムを作成しようとしています。 c - シリアルポートの通信部分は完了しましたが、Arduinoの部分にいくつかの問題があります。ArduinoのLEDの明るさをcで文字を入力して変更しようとしています

int LedPin = 3; 
int brightness = 90; 
char deger; 
void setup() { 
    Serial.begin(9600); 
    pinMode(LedPin, OUTPUT); 
} 

void loop() { 
    if(Serial.available()>0) 
     deger = Serial.read(); 

    if(deger== 'C') { 
     brightness = 0; 
     analogWrite (LedPin, brightness); 
    } //to set the brightness to 0 after an error 

    if(deger== 'A') { 
     if(brightness>=255) 
      brightness = 0; 
     brightness=brightness+15; // to increase led brightness by 15 with every entry 
     analogWrite (LedPin, brightness); 
    } 

    if(deger== 'B') { 
     if(brightness<=0) 
      brightness = 254; 
     brightness=brightness-15; //to decrease led brightness by 15 with every entry 
     analogWrite (LedPin, brightness); 
    } 
} 

は、私たちは「B」を入力したときに、我々は「A」および減少を入力すると、明るさが増加したいが、Bが入力されたときにAを入力し、15ずつ増加されたときに何が起こるの明るさの変化にランダムです。あなたはBが私たちの意図と全く反対に作用し、Aはランダムであることが分かります。私たちは何を間違っていますか?

+1

は、明るさを調整コード*後に境界テスト*を移動し、明るさに代わりにint型 – OldProgrammer

+2

ファーストの文字を作ってみます。そうしないと、analogWriteに0〜255以外の値が送信されてしまいます。私は、より具体的なアドバイスをするためにArduinosにはあまりよく慣れていませんが、これはどのシステムでも一般的な問題です。 – Torp

+0

合意。輝度が250の場合、輝度> 255の場合は輝度が15ずつ増加し、この値がAnalogOutputに書き込まれます。 –

答えて

1

グローバル変数としてdegerを使用していて、loopが繰り返し呼び出されているため、明るさの増減は、ループが実行されるたびに1回ではなく1回だけ適用されますkeypressが受信されます。

これはいくつかの方法の1つで解決できます。 loopの最後にdegerをクリアすることができます。最後の3つのifステートメントは、最初のif条件に基づいて角かっこで囲むこともできるため、文字が読み込まれた場合にのみ実行されます。

しかし、ほとんどの論理だけでdegerローカル変数、それは呼び出し間で存続する必要がないことから、loop`」の開始時に宣言することです:すべての

void loop() { 
    char deger = 0; 
0

まず、私はその場合は3の代わりにスイッチを使用します。

第二に、にあれば内部を変更します。

switch(deger) 
{ 
case 'A': 
     if(brightness+15>=255) 
      { 
      brightness = 0; 
      } 
     brightness=brightness+15; 
     analogWrite (LedPin, brightness); 
break; 
} 
関連する問題