作物の仕分け機【The Signal State編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
作物の仕分け機(Crops Sorter)
SRC1をOUT1に出力してください。
SRC3が0ではない値の場合、値で示された数のステップの間、代わりにSRC2をOUT1に出力してください。
その後すぐにOUT1に対してSRC1の出力を再開してください。
![](https://akademeia.info/wp-content/uploads/2024/07/作物の仕分け機1.jpg)
作物の仕分け機を解く
1:ゴールを明確化する
[1]SRC3=0のとき(基本的)
SRC1をOUT1から出力します。
[2]SRC3≠0のとき
「SRC3=ステップ数」として、そのステップ数分だけSRC2をOUT1から出力します。
2:回路の設計方針を検討する
SRC1とSRC2のどちらかの波形をOUT1に出力するので、リバーススイッチモジュール(チャンネル数2)が使えます。
リバーススイッチモジュールの仕様としては、CVに1~4が与えられると、それぞれのチャンネル数に対応するものとしています。
では4より大きい値を与えるとどうなるのかが明確になっていませんが、実験で確かめられます。
実は4より大きい値を与えるとチャンネル4が選ばれるのです。
ちなみに、これはチャンネル数が4のときです。
もしチャンネル数が2のときは、CV=3のときでもチャンネル2が選ばれます。
今回の回路はこの裏仕様を積極的に利用することにします。
SRC3の値はステップ数です。回路の内部に残ステップ数を保持する仕組みを考えます。
※残ステップ数が残っているときに、SRC3からそれ以上の数がきた場合は、その値で残ステップ数を上書きすることとします。
シグナルディレイモジュールにループバックさせることで一種の記憶装置を実現できます。
たとえば遅延1とすれば、1ステップ前の入力を出力するので、過去の信号を取り出せています。つまり、過去の値を現在に呼び出していることになるわけです。
残ステップ数をデクリメントさせつつ、うまくリバーススイッチモジュールを制御しなければなりません。
そのためにCVに与えます。
しかし、単純に残ステップ数を与えると問題を生じます。
ここでSRC3=5だったとします。
「CV=5」⇒「チャンネル2が選ばれて出力」
⇒(デクリメントされて)「CV=4」⇒「チャンネル2が選ばれて出力」
⇒(デクリメントされて)「CV=3」⇒「チャンネル2が選ばれて出力」
⇒(デクリメントされて)「CV=2」⇒「チャンネル2が選ばれて出力」
⇒(デクリメントされて)「CV=1」⇒「チャンネル1が選ばれて出力」
つまり、チャンネル2が4回選ばれています。本当はSRC3=5なので、5回選ばれるべきだったのです。
この調整をするために、CVの直前にインクリメントを用意しなければなりません。
![](https://akademeia.info/wp-content/uploads/2024/07/作物の仕分け機2.jpg)
![](https://akademeia.info/wp-content/uploads/2024/07/Crops-Sorter_2024年7月9日-4-49-42.gif)