Arduino-Code vereinfachen - Funktion/Variablenfrage

Hallo,

ich bastel gerade an einem Arduino Ethernet zur Schaltung von RC-Dosen. Nun bin ich dabei meinen Code zu konsolidieren und zu vereinfachen, stehe aber auf der Leitung.

Ich habe insgesamt 8 RC-Steckdosen; für jede habe ich im Code stehen:

if(readString.indexOf("rc8=trigger&pass=xxxx") > -1) {
            if(RC8 == false) {
              rcControl.switchOn('a', 1, 8);
            } 
            else {
              rcControl.switchOff('a', 1, 8);
            }

            RC8 = !RC8;
            client.print("OK:RC8:");
            client.print(RC8);
          }

Ich bräuchte also nur eine Funktion, der ich die Nr. der Dose übergebe (hier oben die 8), und müsste den Code nicht 8x reinschreiben.

Nun meine Frage: Kann ich mit Arduino Variablen "zusammenstückeln"? In PHP sähe das so aus:

$dosennr = 8;
$rcdose = "RC".$dosennr;
# Raus kommen sollte RC8

Um diese dann in einem Array zu verwenden:

echo $_POST[$rcdose];

Es ist möglich, ich habe die Datentypen nun einfach mal angenommen, da ich diese nur erraten kann.

void set_XYZ_NAME(char *str_1, char *str_2, boolean &rc, char number)
{
if(readString.indexOf(str) > -1) {
            if(rc == false) {
              rcControl.switchOn('a', 1, number);
            } 
            else {
              rcControl.switchOff('a', 1, number);
            }

            rc = !rc;
            client.print(str_2);
            client.print(rc);
          }
}

set_XYZ_NAME("rc7=trigger&pass=xxxx", "OK:RC7:", RC7, 7);

set_XYZ_NAME("rc8=trigger&pass=xxxx", "OK:RC8:", RC8, 8);

da ich deine Datentypen nur erraten kann, habe ich rc als boolean angenommen.
Wenn du deine Anwendung mal auf Sicherheit überprüfen lassen willst, kannst du gerne mir bescheid sagen, ich kann sehr gut PHP

Z.B. deine Zeile

$rcdose = "RC".$dosennr;

läuft ein wenig schneller ab wenn du das wie folgt schreibst:

$rcdose = 'RC'.$dosennr;

die ' ' werden vom php pharser schneller verarbeitet da nicht erst noch nach variablen gesucht werden muss. Alles was zwischen "" steht wird nach einer variable durchsucht, daher würde dein Syntax auch so funktionieren:

$rcdose = "RC$dosennr";

Gruß
Jomelo

Hallo,

erstmal Danke für deine Hilfe - aber damit ist meine Frage nicht "ganz" beantwortet.

Mein Problem ist nämlich folgendes: "rc" ist zwar ein boolscher Wert, allerdings heißen die Variablen durchgehend RC1 bis RC8. Damit speichere ich also, ob die Dose RC1 angeschaltet ist, oder nicht.

Ich müsste in der Funktion also nicht nur "rc" (mit Wert z.B. 7) verwenden, sondern einen Variablennamen bauen, der eher nach "rc$number" aussieht. Wie geht das unter cpp?

Ok das habe ich schlecht dokumentiert.

In der Funktion wird RC wie folgt deklariert:

boolean &rc

Das "&" nennt sich arbeiten mit Referenzen. Referenzen sind grob gesagt Platzhalter für die Variable.
Die Änderung die innerhalb der Funktion durchgeführt werden stehen später auch in der Variable die beim Funktionsaufruf verwendet wird.

Ein Beispiel

void test(boolean &number)
{
   number != number;
}

boolean RC1 = 1;

test(RC1);

//nun beinhaltet RC1 den Wert 0

Also es ist quasi eine Rückgabe ohne Return da der Wert in der Speicheradresse verändert wird.

php und c++ haben nicht allzuviel miteinander zu tun

einen Variablennamen bauen, der eher nach "rc$number" aussieht. Wie geht das unter cpp?

Zur Laufzeit einen Variablennamen ausrechnen geht in C++ gar nicht!

Was dir eventuell hilft, ist ein Array: boolean  rc[8]

rc[0] .. rc[7] sind dann 8 Variable, und den index kannst du nach Belieben ausrechnen oder ausgeben.

Und den Teil

            if(rc == false) {
              rcControl.switchOn('a', 1, number);
            } 
            else {
              rcControl.switchOff('a', 1, number);
            }

würde ich durch einführen einer Methode rcControl.SetSwitch(...) optimieren. Die Methode würde ein zusätzliches boolean Argument bekommen "SwitchState" und dann einfach so gerufen werden:

              rcControl.SetSwitchOn('a', 1, number, rc==false);