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: