ゲームパッドNode-RED編

Node-RED フローを準備する

[USBゲームパッド]→[PCブラウザ]→ ネットワーク →[Node-RED]

新しいフローを開き、[websocket]と[debug]の2つのノードを配置します。

[websocket]のパラメータ

PCからの通信を待ち受けするURL(APIのパス)を定義します。[追加] → [完了]ボタンを押して設定完了。コードは不要です。http://razpi**.local:8765/gamepad でデータを受信したらデバッグノードに表示します。

フローを反映させるにはデプロイを忘れずに。

PCとラズパイの[websocket]が接続できた場合、Connectedと表示されます。

ゲームパッドのボタンを押すとデバッグ画面に、ゲームパッドの状態が表示されます。

Node-REDでプログラミング

ノードを2個追加する[json][function]

[json]ノードはデフォルト設定のまま、[function]ノードにコードを記述する

[function]ノードのコード。ゲームパッドのaxes配列は
[0: X軸(左スティック)]
[1: Y軸(左スティック)]
[2: X軸(右スティック)]
[3: Y軸(右スティック)]

let x = msg.payload.axes[0];
let y = msg.payload.axes[1];

let direction = "";

if (y < -0.5) direction = "UP";
else if (y > 0.5) direction = "DOWN";
else if (x < -0.5) direction = "LEFT";
else if (x > 0.5) direction = "RIGHT";
else direction = "その他";

msg.payload = direction;
return msg;

成功したら次の改造に進む

functionノードの出力を 4 個にする

let x = msg.payload.axes[0];
let y = msg.payload.axes[1];

let direction = "";

if (y < -0.5) direction = "UP";
else if (y > 0.5) direction = "DOWN";
else if (x < -0.5) direction = "LEFT";
else if (x > 0.5) direction = "RIGHT";
else direction = "その他";
msg.payload = direction;

if (direction=="UP") {
    return [
        { payload: 1, topic: "GPIO27" },
        { payload: 1, topic: "GPIO21" },
        { payload: 0, topic: "GPIO17" },
        { payload: 0, topic: "GPIO20" }
    ];
}

return msg;

結果

ここにモータードライバへの入力を追加していく。たぶん。

続きはまた今度。

コメントを残す