2017-10-30 6 views
-4

私のコードがelseブロックで終了する問題があります。明らかな理由がなければ、リレーに電源を供給するための最初のブロックを実行してから、別のブロックにジャンプします。Arduinoプログラミングelse if error

int relayValue = 0; 
#define delays 10 

void loop() { 
    if(relayValue = 1) { 
    analogWrite(relay, 255); 
    delay(delays); 
    relayValue = 0; 
    } 
    if (relayValue = 0) { 
    analogWrite(relay, 0); 
    delay(delays); 
    relayValue = 1; 
    } else { 
    analogWrite(fan, 255); 
    relayValue = 0; 
    } 
} 

アドバイスは素晴らしいと思います。

+7

'='は代入、 '=='は比較です。 –

+0

ahhh大丈夫ですので、簡単に修正できて、私はそれをしませんでした:) –

+0

警告レベルを十分に高く設定すると、コンパイラがそれを捕まえることがあります。 g ++では、 '-Wall'はそれを行うべきです。 –

答えて

1

if文の2つの値を比較するには、2つの等しい符号を使用します。

間違っ

if(relayValue = 1) 

正しい

if(relayValue == 1) 

http://www.cplusplus.com/doc/tutorial/control/

一 '=' 記号は、変数に値を割り当てることです。

int x = 5 //Variable x with type 'Integer' has value 5 
x == 6 //Comparison: Does x equals to 6?? Will return false because x is 5 
-3

これは構文が間違っているためです。 あなたはIf then then Ifを使用しました。If ..else if..else

さらに、 "="は "=="で置き換える必要があります。 BU "==" 試験は、それが等しい 変更がある場合、 "=" はvaribale値を割り当てサイン:

if (relayValue = 0) 

に:

else if (relayValue = 0) 

構文(https://www.tutorialspoint.com/cplusplus/cpp_if_else_statement.htm) 場合の構文を.. .else if ... else文はC++で -

if(boolean_expression 1) { 
    // Executes when the boolean expression 1 is true 
} else if(boolean_expression 2) { 
    // Executes when the boolean expression 2 is true 
} else if(boolean_expression 3) { 
    // Executes when the boolean expression 3 is true 
} else { 
    // executes when the none of the above condition is true. 
} 
+1

非常によく説明されていません。例えば、 'ブール式2が真のときに実行する'は非常に重要なディテールを欠いています。ブール式1が真であれば実行されません。 – user4581301

+0

これはtutorailspointの例です。 それは私が作ったものではありません –

+0

彼のif文はこの状況でelse-ifを使う必要はないという意味で「正しい」ものです。 relayValue = 0の場合、if-statment-blockだけが実行され、それ以外のものは実行されません。 –