[ArduinoIDE] Script-Optimierung

  • Hallo,

    ich habe da ein kleines Problem mit meiner Script -Optimierung.
    Ich hoffe sehr mir kann da ein Profi helfen:).

    Folgender Auszug aus meinem Script:

    Code
    const char* mqtt_client_id = "TempSensor01";  // ClientID Anpassen!!
    const char* mqtt_topics_ip = "TempSensor01/IP";
    const char* mqtt_topics_light = "TempSensor01/Licht";
    const char* mqtt_topics_humidity = "TempSensor01/Luftfeuchte";
    const char* mqtt_topics_temperature1 = "TempSensor01/Temperatur1";

    Ich möchte diesen gerne so anpassen, dass nur einmal die mqtt_client_id, in diesem Fall also "TempSensor01" eingegeben werden muss, und sich alle anderen Variablen entsprechend ableiten.
    Der Typ der Variablen muss dabei char* bleiben.
    Ich habe schon einiges probiert, komme aber irgendwie nicht weiter.

    Internette Grüße
    Andy

  • Zuerst einmal etwas grundsaetzliches: der Arduino spricht C. Das ist keine Skriptsprache, vor allem ist das aber wichtig zu wissen, wenn man auf der Such nach Loesungen ist - nach C-Beispielen zB auf Stackoverflow zu suchen ergibt ungleich mehr als das Arduino-Universum zu bieten hat.

    Fuer dein konkretes Problem bieten sich Makros an. Damit reduziert sich der Aufwand auf genau eine Definition die es zu aendern gilt - SENSOR_1 in meinem Beispiel:

    Code
    #define SENSOR_1 "TempSensor01"
    #define TOPICS_IP(name) (name "/IP")
    #define TOPICS_LIGHT(name) (name "/Licht")
    
    
    
    
      const char* mqtt_client_id = SENSOR_1;
      const char* mqtt_topics_ip = TOPICS_IP(SENSOR_1);
      const char* mqtt_topics_light = TOPICS_LIGHT(SENSOR_1);
  • Code
    #define BASE "TempSensor01"
    const char* mqtt_client_id = BASE ;  // ClientID Anpassen!!
    const char* mqtt_topics_ip = BASE "/IP";
    const char* mqtt_topics_light = BASE "/Licht";
    const char* mqtt_topics_humidity = BASE "/Luftfeuchte";
    const char* mqtt_topics_temperature1 = BASE "/Temperatur1";

    Einmal editiert, zuletzt von Tell (3. Dezember 2015 um 13:28)

  • Code
    #define BASE "TempSensor01"
    const char* mqtt_client_id = BASE ;  // ClientID Anpassen!!
    const char* mqtt_topics_ip = BASE "/IP";
    const char* mqtt_topics_light = BASE "/Licht";
    const char* mqtt_topics_humidity = BASE "/Luftfeuchte";
    const char* mqtt_topics_temperature1 = BASE "/Temperatur1";


    Herzlichen Dank an euch beide!!!
    Die Variante von Tell gefällt mir natürlich etwas besser, da ich da schon so ähnlich auf dem Weg war;).
    Außerdem ist es auch wesentlich übersichtlicher und kompakter.
    Ich habe eben "nur" versucht da noch ein "+" oder "." dazwischen zu zaubern, wie man es in anderen Programmiersprachen so macht.
    Ja C muss ich halt erst noch ein wenig erforschen;).
    Danke auch für den Tipp mit Stackoverflow.
    ...

  • Die von Tell ist kompakter, dafuer natuerlich auf einen beschraenkt - aber ja, gefaellt mir auch gut. Das C-String-Literal-Feature bei dem "a" "b" == "ab" ist, ist etwas zum angewoehnen...

  • Beide bisher gezeigten Varianten würden ca. 472 Bytes belegen (inkl. leerem void setup() {} und void loop() {}). Folgendes würde nur 450 Bytes belegen:

    Code
    #define BASE "TempSensor01"
    #define mqtt_client_id  BASE
    #define mqtt_topics_ip  BASE "/IP"
    #define mqtt_topics_light  BASE "/Licht"
    #define mqtt_topics_humidity  BASE "/Luftfeuchte"
    #define mqtt_topics_temperature1  BASE "/Temperatur1"

    ...aber ich geh mal lieber gleich in Deckung :daumendreh2: *duck*


  • Beide bisher gezeigten Varianten würden ca. 472 Bytes belegen (inkl. leerem void setup() {} und void loop() {}). Folgendes würde nur 450 Bytes belegen:

    Code
    #define BASE "TempSensor01"
    #define mqtt_client_id  BASE
    #define mqtt_topics_ip  BASE "/IP"
    #define mqtt_topics_light  BASE "/Licht"
    #define mqtt_topics_humidity  BASE "/Luftfeuchte"
    #define mqtt_topics_temperature1  BASE "/Temperatur1"

    ...aber ich geh mal lieber gleich in Deckung :daumendreh2: *duck*

    Ja also was soll ICH denn dazu nun sagen;)?....
    Ist das dann noch immer char* ???
    Ich probiere das mal eben....

    ...funzt perfekt....so weit ich das einschätzen kann;)

    Einmal editiert, zuletzt von AndyUM61 (3. Dezember 2015 um 14:18)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!