C-Style の elseif 活用
状態がON/OFFの2通りを取得できるセンサを複数使う場合、
- 1個だと ON/OFF の2通りの状態
- 2個だと、(ON,ON)(ON,OFF)(OFF,ON)(OFF,OFF)の4通りの状態
- 3個・4個は下の表参照(1=ON, 0=OFF)
とセンサが1つ増えるたびに全センサのON,OFFの状態の組み合わせは2倍づつ増えていく。
これを単純にifのセンサーチェックで判断すると、
▼1個の場合
▼4個の場合(下の画像2つ分)
とだんだん手に負えなくなる。
そこで、変数を導入し、それぞれのセンサのON/OFF値を0/1に置き換えて2進数で状態を表現する。
普段目にする金額などの10進数は0〜9までの10個の数字で1桁を表すが、 2進数は0と1の2つの数字で1桁を表す。
世の中には他にも、分と秒は60進数(60秒=1分、60分=1時間)、時間は24進数(24時間=1日)などの「進数」がある。
2進数と10進数をならべるとこのようになる。
ここで注目したいのは、2進数のうち桁中に「1」が1つだけ含まれる数値で、10進数では1,2,4,8,...と倍々に増えている。
2進数の1桁目をセンサ1、2桁目をセンサ2、3桁目をセンサ3、4桁目をセンサ4の状態として考えれば、状態を示す変数「A」を
- センサ1がONなら1を足す(2進数の1)
- センサ2がONなら2を足す(2進数の10)
- センサ3がONなら4を足す(2進数の100)
- センサ4がONなら8を足す(2進数の1000)
と変化させれば、全状態を一つの変数で網羅できる。
(続く)