Custom Code

Dies ein Artikel der Animatronic WorkBench Dokumentation

In komplexeren animatronischen Projekten kann es attraktiv sein, benutzerdefinierten Code zu schreiben, statt das Verhalten direkt über die Animatronic WorkBench (AWB) zu konfigurieren. Dies kann beispielsweise das Timeline-unabhängige Steuern von Servos oder das Implementieren von übergreifender Logik sein.

Dieser Code wird in die Datei CustomCode\CustomCode.cpp geschrieben, die sich im Ordner src des Projekts befindet. Die zugehörige Header-Datei ist CustomCode.h. Diese Dateien können nach dem Export das PlattformID Projekts in Visual Studio Code bearbeitet werden.

Eigener Code sollte immer zwischen den Kommentaren cc-start und cc-end geschrieben werden, damit er bei kommenden Updated nicht überschrieben wird. Die AWB wird diese Dateien bei Bedarf aktualisieren, aber der benutzerdefinierte Code bleibt erhalten. Für den Fall, dass dabei etwas schiefgeht, wird im Projektordner im Unterordner custom_code_backup bei jedem Export automatisch eine Sicherungskopie der Dateien erstellt.

Custom Code Beispiel für das Projekt "Animatronic Nix"

Hier wird im Setup der Schwanz-Servo gesucht und in der Variable _tailServo gespeichert. Im Loop wird dann alle 4 Sekunden eine zufällige Position zwischen dem Minimum und Maximum des Servos gesetzt. Damit wird der Schwanz des Animatronic Nix unabhängig von Timelines animiert.


#include <Arduino.h>
#include "CustomCode.h"
#include "../AwbDataImport/ProjectData.h"
#include <Actuators/NeopixelManager.h>

/*
    Enter your custom code in this cpp file and the corresponding header file.
    Only write code beween the cc-start and cc-end comments, otherwise it will be overwritten and lost.
*/
/* cc-start-include - insert your include code here before the end-protected comment: */
/* cc-end-include - insert your include code here before the end-protected comment: */
void CustomCode::setup()
{
    /* cc-start-setup - insert your setup code here before the end-setup comment: */
// take the servo with Id 10 as tail servo
    for (int i = 0; i < this->_projectData->stsServos->size(); i++)
    {
        // get a pointer to the current servo
        StsScsServo *servo = &this->_projectData->stsServos->at(i);
        if (servo->title == "Tail")
        {
            _tailServo = servo;
            break;
        }
    }
    if (_tailServo == nullptr)
    {
        _errorOccured("No tail servo found with Id 10. Please check your project data.");
    }
    /* cc-end-setup  */
}
void CustomCode::loop(String actualTimelineName, int actualTimelineStateId)
{
    /* cc-start-loop - insert your loop code here before the end-loop comment: */
auto _msTillLastTailUpdate = millis() - _lastTailUpdate;
    if (_msTillLastTailUpdate > 4000)
    {
        auto max = _tailServo->maxValue;
        auto min = _tailServo->minValue;
        // get a random value between min and max
        auto randomValue = random(min, max);
        // set the target value of the tail servo to the random value
        _stSerialServoManager->writePosition(_tailServo->channel, randomValue);
        _lastTailUpdate = millis();
    }
    /* cc-end-loop  */
}
/* cc-start-functions - insert your functions here before the end-functions comment: */
/* cc-end-functions  */

Weitere Dateien / Klassen im Ordner CustomCode

Das Projekt "PIP Droid" ist ein komplexeres Beispiel für die Verwendung von benutzerdefiniertem Code in der Animatronic WorkBench. Dort werden die Touch-Buttons und die Neopixel-Steuerung des PIP Droid verwendet, um verschiedene Aktionen auszuführen. Der Code implementiert eine einfache Logik, um den PIP Droid zu steuern, einschließlich der Reaktion auf Tastenanschläge und das Abspielen von Soundeffekten.

Besonders an diesem Projekt "PIP Droid" ist, dass weitere Custom Code Dateien eingebunden werden, die sich im Ordner CustomCode befinden. Diese Dateien können angelegt werden, um weitere Funktionen zu implementieren. Dadurch kann der Code modular erweitert werden, ohne dass die Hauptdatei CustomCode.cpp zu unübersichtlich wird. In diesem Projekt sind zusätzlich die Dateien folgenden C++-Klassen als Dateien im Ordner CustomCode enthalten:

C++ Klassen im Ordner CustomCode

QR-Code dieses Beitrags


Verwandte Beiträge

Dieser Blog-Artikel beinhaltet keine bezahlten Produktplatzierungen.
Bei Affiliate-Links oder Rabatt-Codes entstehen für den Leser keine Kosten oder Nachteile. Bei einem Kauf über diesen Link/mit diesem Code erhält der Betreiber eine prozentuale Provision und/oder gewährt dem Käufer einen Rabatt in angegebener Höhe. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen