web-dev-qa-db-ja.com

Arduino HIGH LOW

私はArduinoを持っていますが、実際の値に関する限り、HIGHとLOWの意味を正確に疑問に思っています...彼らはintに署名していますか?符号なし整数?符号なし文字?​​??それらの価値は何ですか? HIGHとLOWはおそらくすべてのビットがそれぞれ1と0に設定された符号なし整数であると推測していますが、よくわかりません。 HIGHとLOWを使用してビット単位の演算を実行できるようにするか、HIGHまたはLOW以外の値をdigitalWriteに渡すことができます。また、これを行うために整数をHIGHまたはLOWにキャストするにはどうすればよいですか?

18
Void Star

DigitalWrite()に他の値を渡したい場合、関数プロトタイプを見ることができます。

void digitalWrite(uint8_t, uint8_t);

したがって、任意の整数値(0〜255)が機能します。 HIGHとLOW以外の値を渡した場合、digitalWrite()の動作がどうなるかはわかりません。

HIGHとLOWは単純に定義された定数であるため、整数をキャストすることはできません(また、この操作は意味がありません)。 HIGHおよびLOWが予想される任意の場所で整数を使用できるようです。

しかし、実際にはこれを行うことは多くの理由で悪い考えです-HIGHとLOWの定義は変更される可能性がありますが(可能性は低いですが)、タイプの観点からは意味がありません。代わりに、プログラムでロジックを使用して、関数呼び出しにHIGHまたはLOWを渡す必要があるかどうかを判断し、実際に定数を渡す必要があります。

13
Ivan

見て hardware/arduino/cores/arduino/Arduino.h(少なくともArduino 1.0.1ソフトウェアでは)、18行目と19行目:

 #define HIGH 0x1
 #define LOW  0x0

つまり、これらは16進整数値であると定義されているので、ビット単位の操作を何でも行うことができます。しかし、その意味はどれほどわかりやすいかは現時点では明確ではありません。また、これらの値は後で変更される可能性があることに注意してください。ビット値の操作はさらに賢明ではありません。

37
codeling

2cを codeling's answer に追加するには。 Arduino.h(1.0)の18〜25行目は次のとおりです。

#define HIGH 0x1
#define LOW  0x0

#define INPUT 0x0
#define OUTPUT 0x1

#define true 0x1
#define false 0x0

したがって、HIGH<==>OUTPUT<==>true<==>0x1およびLOW<==>INPUT<==>false<==>0x0です。次に、HIGH<==>!LOWおよびLOW<==>!HIGH...

16
Alvaro

DigitalWrite()の最初の引数はピン番号です。

digitalWrite()の2番目の引数は次のいずれかです。

1)バイナリ出力にHIGH(3.3または5v)またはLOW(0v)を書き込む、または
2)バイナリ入力の内部プルアップを有効(HIGH)または無効(LOW)にします。

どちらの引数のビット演算も意味がありません。おそらくanalogWite()を使用する必要がありますか?

ドキュメントを参照してください: digitalWrite()Constants

1
Derek Johnson