2020-03-01から1ヶ月間の記事一覧

kairo-gokko (31) RSフリップフロップ

目次ページに戻る / 前 / 次 さて、基本的な部品が揃ったところで、 「部品を組み合わせて何か作る」ステージに進みましょう、 まずは組み合わせ回路から……とも考えましたが、もういきなりフリップフロップを作ってしまいます。 というのは、さっさと曳光弾…

kairo-gokko (30) OR / NOR / XOR

目次ページに戻る / 前 / 次 基本的なところでいうと OR がまだ残っています。 作りましょう。 OR スイッチを並列つなぎにすると OR になります。 これまでグリッド線を描画していましたが、 見にくいような気がしてきたため、 コメントアウトして描画を止め…

kairo-gokko (29) AND / NAND

目次ページに戻る / 前 / 次 さて! ようやく準備が整いました。ここからがお楽しみですよ! AND NOT はすでに作ったので次は AND を作ります。 スイッチを直列つなぎにして equal リレーで切り替え。 NAND NOT と AND ができたということは……NAND が作れま…

kairo-gokko (28) 回路の選択

目次ページに戻る / 前 / 次 早く先に進みたいのですが、今回も主にブログに貼る都合による修正です。 今までの作りだと実行時に 1つの回路だけしか動かすことができませんでしたが、 上の画像のようにドロップダウンで複数の回路から選択して切り替えられる…

kairo-gokko (27) equal リレー

目次ページに戻る / 前 / 次 equal リレーを追加します。 not リレーのときとほとんど同じです。 テスト用回路はこう。 動かした様子です。 以下の iframe で実際に動かせます。 音量小さめにしていますが音が出ます。 こちらも同じものです。 https://sonot…

kairo-gokko (26) 見た目の修正など

目次ページに戻る / 前 / 次 先に進む前に見た目に関する修正をここでやっておきます。 今やらなくてもいいものばかりなのですが (実際にプロトタイプの時はどれも後回しにしていました)、 ブログ記事を書く都合による修正と、 ついでなので見た目まわりを…

kairo-gokko (25) 状態変更の伝播の過程を見たい

目次ページに戻る / 前 / 次 前回は状態更新処理をループさせることで 2段、3段とリレーが連なった場合でも動くようにしました。 前回の回路はうまく動きましたが、そういえば無限ループになる場合はないのでしょうか? あります。 たとえば次の回路では無限…

kairo-gokko (24) リレー 3

目次ページに戻る / 前 / 次 いやー、なにはともあれ NOT ゲートが動きましたね。 とにかく動くということが分かったので、ハリボテ部分をまともな形に修正していきます。 現状ではどこがハリボテかというと、リレーによるスイッチへの作用が2段階以上になる…

kairo-gokko (23) リレー 2

目次ページに戻る / 前 / 次 前回は not リレーの表示まで実装しました。 今回は、リレーの通電状態が変わったときに隣のスイッチを切り替える部分を作りましょう。 汎用的なものを目指すのはいったん脇に置いといて、まずはこの回路を動かすことだけを考え…

kairo-gokko (22) リレー 1

目次ページに戻る / 前 / 次 リレーを追加します! リレーとは何か!? 説明しよう! リレーとは電磁石で(つまり電気による制御で)スイッチの ON/OFF を切り替える装置である。 以上。 あとはググッて調べてください。 ググりました? 分かりましたね? で…

kairo-gokko (21) ランプ

目次ページに戻る / 前 / 次 物理回路と違って導線自体が光って見えるため実用性という意味では必要性は薄めですが、 ランプを追加します。 通電していることがちょっとだけ分かりやすいとか、通電確認したい箇所を強調できるとか、光が灯るのは象徴的でよい…

kairo-gokko (20) タッチ操作対応など

目次ページに戻る / 前 / 次 スイッチ以外をクリックしたときにエラーになるのを修正 Circuit#find_switch_by_position を修正。 クリックした位置にスイッチがない場合に nil を返すように。 もっと早く直しておけばよかった……。 --- a/circuit.rb +++ b/ci…

kairo-gokko (19) Circuitクラスを改めて追加 / リファクタリングなど

目次ページに戻る / 前 / 次 test/helper を追加 テストのファイルが 2つに増えたので、共通部分を helper にまとめておきます。 # test/helper.rb require "minitest/autorun" $LOAD_PATH.unshift File.expand_path("..", __dir__) 各テストファイルの requ…

kairo-gokko (18) 回路の分割 2

目次ページに戻る / 前 / 次 子回路へ分割の実装編です。 修正前はこうなっていたのを、 # class ChildCircuit def self.create(lines, rects) all_plus_poles = ... all_minus_poles = ... all_switches = ... wf_set = to_wire_fragments(lines) all_edges…

kairo-gokko (17) 回路の分割 1

目次ページに戻る / 前 / 次 通電判定の説明で使った図を 2つ並べてみました。 たとえば 1枚の基板上(机の上とかでもいいですが)にこういうふうに並べて配置されている状況を想像してみます。 エッジについて通電判定するためにダイクストラ法を使って最短…

kairo-gokko (16) 通電 7

目次ページに戻る / 前 / 次 前回やや強引に通電判定エンジンができたということにしましたので、 アプリケーション本体に組み込みます。 ちゃんと動いてくれるでしょうか? エッジが 1本、 4本以外のときは未対応として例外を投げていましたが、 ここを upd…

kairo-gokko (15-2) 通電 6

目次ページに戻る / 前 / 次 さて、アイデアはアイデアとして、 問題はどうやって経路を辿るかです。 最初は データの整形 3 のときのように辿っていけばええんやろ? と素朴にやってみてたんですがうまくいかず……。 問題に向き合って正攻法でやらないとダメ…

kairo-gokko (15-1) 通電 5

目次ページに戻る / 前 / 次 前回はエッジ 4本の場合の中でも限定的な配線パターンを対象に、それだけをなんとかする通電判定処理を作ってみました。 しかし、あのやり方ではすぐに行き詰まるでしょう。 エッジが 5本でも 100本でも解決できる汎用的な方法は…

kairo-gokko (14) 通電 4

目次ページに戻る / 前 / 次 前回はエッジ1本と複数のスイッチのケースまで対応しました。 今回はもう少し複雑なパターンとして、途中で分岐してスイッチが並列になっている回路の通電判定を考えます。 「並列つなぎ」というやつですね。 小学校の理科でやる…