Zum Hauptinhalt springen

Konfigurationsbeispiel

Dieses Beispiel zeigt, wie persistente Configuration-Werte über ArmorLink bereitgestellt werden können.

Configuration-Werte werden automatisch:

  • Auf dem Module gespeichert
  • Nach einem Neustart wiederhergestellt
  • In der ArmorLink App angezeigt
  • Ohne Neukompilierung der Firmware bearbeitbar

Für den konzeptionellen Überblick siehe Configuration.

Was dieses Beispiel macht

Dieses Module stellt mehrere Configuration-Werte bereit:

  • LED-Helligkeit
  • Animationsgeschwindigkeit
  • Audio aktiviert/deaktiviert
  • Firmware-Informationen

Die ArmorLink App erstellt automatisch die passende Benutzeroberfläche.

Vollständiges Beispiel

#include <ArmorLink.h>

ArmorLinkModule module(
"Arc Reactor",
ArmorLinkModuleType::Generic
);

int brightness = 120;
float animationSpeed = 1.0f;
bool audioEnabled = true;

void applyBrightness(int value)
{
ArmorLink.info("Brightness changed");
}

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

module.config()
.addInt("brightness", &brightness, 120)
.label("Brightness")
.description("LED brightness")
.section("Lighting")
.range(0, 255)
.step(1)
.onIntChange([](int value)
{
applyBrightness(value);
});

module.config()
.addFloat("animationSpeed", &animationSpeed, 1.0f)
.label("Animation Speed")
.description("Animation speed multiplier")
.section("Lighting")
.range(0.1f, 5.0f)
.step(0.1f);

module.config()
.addBool("audioEnabled", &audioEnabled, true)
.label("Audio Enabled")
.section("Audio");

module.config()
.addReadonly("firmwareVersion", "0.1.0")
.label("Firmware Version")
.section("System");

ArmorLinkOptions options;
options.enableEspNow = true;

ArmorLink.begin(module, options);
}

void loop()
{
ArmorLink.loop();
}

Integer-Configuration

Integer-Werte eignen sich für:

  • Helligkeit
  • Servo-Positionen
  • Schwellwerte
  • Lautstärke

Beispiel:

module.config()
.addInt("brightness", &brightness, 120)
.label("Brightness")
.range(0, 255)
.step(1);

Float-Configuration

Float-Werte eignen sich für:

  • Animationsgeschwindigkeiten
  • Kalibrierungswerte
  • Sensorfaktoren
  • Spannungs-Offsets

Beispiel:

module.config()
.addFloat("animationSpeed", &animationSpeed, 1.0f)
.label("Animation Speed")
.range(0.1f, 5.0f)
.step(0.1f);

Boolean-Configuration

Boolean-Werte erscheinen automatisch als Schalter in der ArmorLink App.

Beispiel:

module.config()
.addBool("audioEnabled", &audioEnabled, true)
.label("Audio Enabled");

Readonly-Werte

Readonly-Felder liefern Informationen, können aber nicht verändert werden.

Beispiel:

module.config()
.addReadonly("firmwareVersion", "0.1.0")
.label("Firmware Version");

Typische Anwendungsfälle:

  • Firmware-Version
  • Build-Datum
  • Hardware-Revision
  • Kalibrierungsstatus

Configuration organisieren

Configuration-Werte können in Sections gruppiert werden.

Beispiel:

.section("Lighting")
.section("Audio")
.section("System")

Die ArmorLink App gruppiert Felder automatisch anhand ihrer Section.

Validierung

Validierungs-Metadaten helfen der App dabei, sinnvolle Bedienelemente darzustellen.

Beispiel:

.range(0, 255)
.step(1)

Beispiel:

.range(0.1f, 5.0f)
.step(0.1f)

Dies ersetzt keine Validierung innerhalb der Firmware, verbessert jedoch die Benutzererfahrung.

Auf Änderungen reagieren

Configuration-Werte können Callbacks ausführen, wenn sie geändert werden.

Beispiel:

.onIntChange([](int value)
{
applyBrightness(value);
});

Ablauf:

User changes value
|
v
Module receives update
|
v
Value stored
|
v
Callback executes

Änderungen werden sofort wirksam.

Ein Neustart ist nicht erforderlich.

Persistenz

Configuration-Werte werden automatisch von ArmorLink gespeichert.

module.config()
.addInt("brightness", &brightness, 120);

Zusätzlicher Speicher-Code ist nicht erforderlich.

Werte überstehen automatisch:

  • Neustarts
  • Stromunterbrechungen
  • Firmware-Neustarts

Erweiterte Felder

Seltener benötigte Werte können als erweitert markiert werden.

.advanced(true)

Dadurch bleibt die Hauptoberfläche übersichtlich, während Experteneinstellungen weiterhin verfügbar bleiben.

Beispiel: Servo-Kalibrierung

int openPos = 90;
int closedPos = 10;

module.config()
.addInt("openPos", &openPos, 90)
.label("Open Position")
.section("Servo")
.range(0, 180);

module.config()
.addInt("closedPos", &closedPos, 10)
.label("Closed Position")
.section("Servo")
.range(0, 180);

Nächste Schritte

Weiter mit: