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"
);
| Wert | Bedeutung |
|---|---|
| Helmet | Ziel-Module |
| Facemask | Entity |
| toggle | Command |
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: