Zum Hauptinhalt springen

Button Command Sender

Dieses Beispiel demonstriert eines der häufigsten ArmorLink-Muster:

Ein lokaler Button sendet Commands in das ArmorLink-Netzwerk.

Button Press
|
v
sendCommand(...)
|
v
Gateway
|
v
Target Module

Der Button selbst bleibt normale Firmware-Logik.

ArmorLink ist ausschließlich für den Transport des Commands verantwortlich.

Vollständiges Beispiel

#include <ArmorLink.h>

#define BUTTON_PIN 4

ArmorLinkModule module(
"Left Hand",
ArmorLinkModuleType::Hand
);

bool lastButtonState = HIGH;

void setup()
{
Serial.begin(115200);
delay(500);

pinMode(BUTTON_PIN, INPUT_PULLUP);

ArmorLinkOptions options;
options.enableEspNow = true;

ArmorLink.begin(module, options);
}

void loop()
{
ArmorLink.loop();

bool currentState = digitalRead(BUTTON_PIN);

if(lastButtonState == HIGH && currentState == LOW)
{
onButtonPressed();
}

lastButtonState = currentState;
}

void onButtonPressed()
{
ArmorLink.sendCommand(
"Helmet",
"Facemask",
"toggle"
);
}

Command senden

Ein Command besteht aus drei Teilen:

ArmorLink.sendCommand(
"Helmet",
"Facemask",
"toggle"
);
WertBedeutung
HelmetZiel-Module
FacemaskEntity
toggleCommand

Das Ziel-Module empfängt den Command über das Gateway.

Passende Action

Das empfangende Module stellt eine passende Action bereit:

module.actions()
.add("toggleFaceplate")
.label("Toggle Faceplate")
.command("Facemask", "toggle")
.onExecute([]{
toggleFaceplate();
});

Sobald der Command eintrifft, führt ArmorLink die Action aus.

Commands an das Gateway senden

Commands können auch direkt an das Gateway gesendet werden.

ArmorLink.sendCommand(
"Chest",
"BTN_L1",
"SINGLE_CLICK"
);

Das ist nützlich, wenn das Gateway als zentraler Controller fungiert.

Beispiele:

  • Sound-Steuerung
  • Effekt-Koordination
  • Globale Statusänderungen
  • Command-Routing

Broadcast Commands senden

Statt ein einzelnes Module anzusprechen, kann ein Command auch als Broadcast gesendet werden.

ArmorLink.broadcastCommand(
"Flaps",
"toggle"
);

Jedes Module empfängt den Command.

Nur Modules mit einer passenden Action reagieren darauf.

Beispiel:

module.actions()
.add("toggleFlaps")
.label("Toggle Flaps")
.command("Flaps", "toggle")
.onExecute([]{
toggleFlaps();
});

Mehrere Buttons

Verschiedene Buttons können unterschiedliche Commands senden.

void handleBtn1()
{
ArmorLink.sendCommand(
"Helmet",
"Facemask",
"toggle"
);
}

void handleBtn2()
{
ArmorLink.sendCommand(
"Back",
"Missile",
"open"
);
}

Dadurch kann ein kleines Controller-Module viele entfernte Modules steuern.

Lokales und Remote-Verhalten

Ein Button kann gleichzeitig lokales und Remote-Verhalten auslösen.

void onButtonPressed()
{
flashLed();

ArmorLink.sendCommand(
"Helmet",
"Facemask",
"toggle"
);
}

ArmorLink ersetzt keine Anwendungslogik.

Es transportiert lediglich Commands.

Typische Anwendungsfälle

Dieses Muster wird häufig verwendet für:

  • Hand-Controller
  • Versteckte Buttons im Anzug
  • Reed-Schalter
  • Sprachsteuerungsmodule
  • Gestensteuerungen
  • Sensorbasierte Auslöser

Nächste Schritte

Weiter mit: