見出し画像

【ストワ】AND回路

こんにちは
誰得記事を書いているTFです。

AND回路について Storm Works版

ワークベンチ内のAND回路

Storm Works版としたのは、
実際の細かい部分をすっ飛ばしてストワで使うであろう部分のみを抜粋するからです。
専門知識は持ち合わせていませんので、ご了承ください。


検証環境

以下の記事の内容は、下記の環境下におけるものです。
アップデート等により仕様が変更になっている場合があります。

  • Application : Stormworks: Build and Rescue

  • OS : Windows11

  • Version : v1.7.11 64bit

  • Language : English

  • DLC : N/A


AND回路とは

AND回路は2つのon/off inputと1つのon/off outputを持つ回路です。

入力信号の双方がonであるときにのみon信号を出力します。

片方の入力のみが"on"、もしくは両方が"off"の場合には、信号を出力しません。

普段使用するAND回路


実例

今回はAND回路の他に、トグルボタンとインジケーターライトを用意します。

例に従って回路を繋いだ状態

トグルボタン2つの両方"on"の場合はインジケートライトが"on"となり、どちらかが"off"もしくは両方が"off"の場合にはインジケートライトは"on"になりません。


ANDの条件を増やす場合は以下のように接続することで、3つ以上の条件にも対応することができます。

条件四つのAND回路の例

必要に応じてAND回路を増やしてください。
それぞれが最終的に一つにまとまるように接続しましょう。
途切れていると、正常に動作しません。


LUA

※ここからはちょっとした応用です

LUAを使用してAND回路を作ってみましょう。
”実例”と同じようにトグルボタン2つとインジケーターライトを使用します。

マイコン内の接続

用意したon/off信号をコンポジット1,2につなぎます。
出力はコンポジット1につなぎます。


それでは書いていきましょう。

function onTick()
end

普段同様にここから始まります。
大文字小文字の判別があるので注意です。
"end"はプログラムの閉じなので、これからはこの二行の間に書いていきます。


in1 = input.getBool(1)
in2 = input.getBool(2)

今回はコンポジット入力1を"in1"、コンポジット入力2を”in2”と定義しました。
定義しなくても制作することは可能ですが、プログラムが長く見にくくなるので定義しました。


if  in1 and in2 then
out1 = true
end

直訳すると、「もし、"in1"と"in2"が両方onならば、"out1"を"on"にする」となります。
プログラム上では、"on=true","off=false" となっています。
if関数は結果の終わりに"end"をつける必要があります。
複数ifを使う場合には使った数だけ"end"が必要です。


上記の条件式では、条件に合わない場合の定義が行われていないため、
"out1"が"on"になった後はどのような操作をしても"off"にはなりません。

if  in1 and in2 then
out1 = true
else
out1 = false
end

"else"というのは、「条件に合わない場合に」という意味です。
他にも"elseif"など、更に条件を追加することも可能です。


 output.setBool(1,out1)

コンポジット出力1に"out1"の結果を出力します。


ここまで作成したプログラムをまとめてみます。

function onTick()
 in1 = input.getBool(1)
 in2 = input.getBool(2)
  if in1 and in2 then
  out1 = true
  else
  out1 = false
  end
 output.setBool(1,out1)
end

以上でLUAにてAND回路を作成するのに成功しました。


ANDの条件を2つではなく3つ以上使用することも可能です。

function onTick()
 in1 = input.getBool(1)
 in2 = input.getBool(2)
 in3 = input.getBool(3)
  if in1 and in2 and in3 then
  out1 = true
  else
  out1 = false
  end
 output.setBool(1,out1)
end

以上のように、条件を増やすだけで問題なく動作します。


"in1"や"in2"などを定義せずに作ってみます。

function onTick()
 if input.getBool(1) and input.getBool(2) then
 output.setBool(1,true)
 else
 output.setBool(1,false)
 end
end

となります。
入力信号を複数回使わない場合などには文字数を減らすのに使えます。
"if"の"end"とプログラム全体を括る"end"の二つが必要であるため、"end"が二つ並ぶ形になります。。


おわり

以上、AND回路の紹介でした。

この記事が気に入ったらサポートをしてみませんか?