Real2Virtual202111

Hardware

サイコロの中の一つとPCの間の接続

  • サイコロのそれぞれは、下の回路図で示すような回路を内部に持っています。
    • この中で、M5Stack Atom は1つだけ入っています。
    • このサイコロの中のMbed LPC1768(以後1768)とM5Stack ATOM (以後ATOM)の間がUARTで接続されています。
    • パソコンとATOMの間はWiFi?を使って、TCP/IPでつながります。
    • ATOM でWiFi?のサーバを動かすと同時に、TCP/IPストリーム(リモートのPC側)とUART(ローカルの 1768)の中継サーバを起動します。
    • これにより、パソコンと、この1768の間で、双方向に、コマンドとメッセージが流れます。
    • パソコンからAtomと繋がった1768に対してコマンドを送ると、その1768からパソコンにコマンドの実行結果がメッセージとして返ります。
  • サイコロの回路図 dice_circuit_01.png

作られた「物」の情報の獲得

  • それぞれのサイコロは、構文解析木上のノードに相当します。それぞれのサイコロは以下の変数を持ちます
    • myname ... 自分の名前
    • upname ... 構文解析木上の上位のノード(サイコロ)の名前
    • faceID[faceMax] ... i番目の面に、下位のノード(サイコロ)が接続されていたら、そのサイコロの接続された面の番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。
    • dirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロの接続された面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。
    • myDirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロと接続された自分の面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。dirID[i]とmyDirID[i]は、常に同じ値になるはずです。-1が初期値です。
    • upFaceID ... 構文解析上の上位ノード(サイコロ)が接続されていた場合、その接続面の番号が入ります。接続されていない場合は-1になり、この時は上位ノードとして、UARTと通信します。-1が初期値です。
    • FirstTime? ...このサイコロが初期状態かどうかを表します。初期値の状態の時が1、そうでない時が0です。
  • パソコンから、それが接続された1768に対して、サイコロ間の接続関係を再帰的に問うコマンド(srs.)が送信されます。srs は start recursive structure searchの略です。
  • 1768上でそのコマンドが解釈実行されます。 srsコマンドは以下を行います。
  1. そのコマンドを受け取った以外の(M5Stackからコマンドを受け取った場合は全ての)サイコロの面の、4つの発光ダイオードから、順番に、"cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。発光ダイオードの番号は、面と面が重なったていた時は、その向きを表します。
  • "cq face <送信元の面の番号> <送信元の発光ダイオードの番号>."を受け取ったサイコロがあれば、そのサイコロは、それを受け取った面から、それを送信したサイコロに対して、"ack1 face <受け取った面の番号> dir <受け取った発光ダイオードの番号> udir <送信元の発光ダイオードの番号>."を返信します。
  • その次に、もし、そのサイコロが既に、"cq"コマンドを受け取ったことがなければ、このサイコロの、受け取った面以外の面に対して、同様に、cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。

Mbed LPC1768がUARTから受け取るコマンドの一覧

       "set port <p> <n> <value>."
       "...<p>=PE|PME|PB|PMB <n>=0|1|...|F."
       "...<value> is 0 or 1."
       ".... if <p>=PME|PMB, 0 means output, "
       "....                 1 means input."
       "set mem <n> 1  or set mem <n> 0."
       "  ...          <n>=(0|1|...|F)+."
       "ask port <p> <n>."
       "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F."
       "get port <p> <n>."
       "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F."
       "ask mem <n>."
       "  ...          <n>=(0|1|...|F)+."
       "get mem <n>."
       "  ...          <n>=(0|1|...|F)+."
       "set outface <n>."
       "set face <n> allLED <value>."
       "set face <n> led|dir <value>."
       "send face current <strconst>."
       "send face <n> <strconst>."
       "send root <n> <strconst>."
       "bcast face <n> <strconst>."
       "cq face <n> dir <value>."
       "ack1 face <n> dir <value> uDir <value>."
       "ack2 face <n> dir <value> uDir <value>."
       "h. or help. or ?"
       "srs.  ... start recursive search."
       "srr.  ... start recursive reset."

Counter: 103, today: 1, yesterday: 0

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-07 (火) 13:17:34 (863d)