私はArduinoを持っていますが、実際の値に関しては、HIGHとLOWが正確に何を意味するのか疑問に思っています...それらはintに署名されていますか?署名されていないint?署名されていない文字??? それらの価値は何ですか?HIGHとLOWは、おそらくすべてのビットがそれぞれ1と0に設定された符号なし整数であると推測していますが、よくわかりません。HIGHとLOWを使用してビット単位の演算を実行したり、HIGHまたはLOW以外の値をdigitalWriteに渡したりできるようにしたいと思います。また、これを実行できるように、整数をHIGHまたはLOWにキャストするにはどうすればよいですか?
4 に答える
hardware/arduino/cores/arduino/Arduino.h
(少なくともArduino 1.0.1ソフトウェアでは)18行目と19行目を見てください:
#define HIGH 0x1
#define LOW 0x0
つまり、これらは16進整数値であると定義されており、ビット単位の演算を任意に実行できます。ただし、現時点では、どの程度の意味があるのかは明確ではありません。また、これらの値は後で変更される可能性があることにも注意してください。これにより、ビット単位の演算がさらに賢明になりません。
コーディングの答えに私の2セントを追加するには:
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
...
他の値をdigitalWrite()に渡したい場合は、関数プロトタイプを見ることができます
void digitalWrite(uint8_t, uint8_t);
したがって、任意の整数値(0から255まで)が機能します。HIGHとLOW以外の値を渡した場合、digitalWrite()の動作がどうなるかわかりません。
HIGHとLOWは単純に定義された定数であるため、それらに整数をキャストすることはできません(その操作も意味がありません)。HIGHとLOWが予想される場所であればどこでも整数を使用できるようです。
ただし、実際にこれを行うことは、多くの理由で悪い考えです。HIGHとLOWの定義は変更される可能性があり(可能性は低いですが可能です)、タイプの観点からは意味がありません。代わりに、プログラムでロジックを使用して、HIGHまたはLOWのどちらを関数呼び出しに渡すかを決定してから、実際に定数を渡す必要があります。
digitalWrite()の最初の引数はピン番号です。
digitalWrite()の2番目の引数は、次のいずれかになります。
- HIGH(3.3または5 V)またはLOW(0 V)をバイナリ出力に書き込むか、
- BINARY INPUTの内部プルアップを有効(HIGH)または無効(LOW)にします。
どちらの引数のビット演算も意味がありません。おそらく、analogWite()を使用する必要がありますか?
ドキュメントを参照してください:digitalWrite() 定数