Gestione stringhe dettaglio indexOf

Per semplicità vi posto l'intero codice.

//Librerie impiegate per il progetto
#include <SPI.h>
#include <Ethernet.h>

//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {192, 168, 1, 110}; //modificate questo valore in base alla vostra rete

char Data_RX;

String msg = "";
String app1 = "";
String app2 = "";
boolean LEDON[10] = { false };
//Stringa Form 
int cmd1[10] = { 0 };
int cmd2[10] = { 0 };

//indice per cicli
int i = 0;

//creao un oggetto server che rimane in ascolto sulla porta
//specificata
EthernetServer ArduinoServer(80);

void setup(){
  Serial.begin(14400);
  //inizializza lo shield con il mac e l'ip  
  Ethernet.begin(mac, ip);
  //inizializza l'oggetto server
  ArduinoServer.begin();
  
  //definisco i pin come uscite
  for(i=0; i<10; i++){
     pinMode(i, OUTPUT);
  }
}

void loop(){
    //IMPORTANTE pulisco la variabile msg  
    msg = "";
    
    EthernetClient pc_client = ArduinoServer.available();

    //controllo se pc_client è true
    if (pc_client != false){
        //controllo continuamente che il client sia connesso
        while (pc_client.connected()){
            //Controllo se ci sono byte disponibili per la lettura
            if (pc_client.available()){
                //leggo i byte disponibili
                //provenienti dal client
                Data_RX = pc_client.read();
                
                //ricostruisco la stringa ricevuta concatenando i singoli byte
                msg += Data_RX;
                
                //Attendo che tutti i byte siano letti
                //quando Data_RX contiene il carattere
                //di nuova line capisco tutti i byte sono
                //stati letti
                if (Data_RX == '\n'){
                    //cerco all'interno della stringa il parametro che mi interessa
                    for(i=1; i<10; i++){
                      cmd[i]=msg.indexOf("%d=ON",i);
                    }

                    
                    //Invio la risposta al client
                    //invio lo status code
                    pc_client.println("HTTP/1.1 200 OK");
                    //imposto il data type
                    pc_client.println("Content-Type: text/html");
                    pc_client.println();
                    //invio codice html

                    
                    //Piloto l'uscita e invio lo stato al browser
                    for(i = 1; i < 10; i++){
                       if(cmd[i] > 0){
                          digitalWrite(i, HIGH);
                          LEDON[i] = true;
                          //pc_client.print("<p>PIN %d ATTIVO </p>");
                       }else{
                          digitalWrite(i, LOW);
                          LEDON[i] = false;
                          //pc_client.print("<p>PIN %d ATTIVO </p>");
                       }
                    }
                    

                    pc_client.print("<html><head>");    
                    pc_client.print("<meta http-equiv=\"refresh\" content=\"0; url=http://localhost/domotic/riservata/loggato.php\"/>"); 
                    pc_client.print("</head></html>");               
                    //aspetto 1 ms affinche la risposta giunga al browser del client
                    delay(1);
                    //esco dal ciclo while una volta completato l'invio della risposta
                    break;
                }
            }
        }
        //chiudo la connessione
        pc_client.stop();
    }
}

Ora stavo pensando che una soluzione potesse essere anche questa di seguito, ma non mi funziona sapreste dirmi il perchè?

                    for(i = 1; i < 10; i ++){
                       app = i + "=ON";
                       cmd[i] = msg.indexOf(app1);
                    }

Dove app è una stringa d'appoggio che utilizzo per concatenare il numero del pin (int i) e la stringa "=ON", così da ottenere 1=ON, 2=ON etc etc...così con cmd*=indexOf(app1) ottengo un vettore cmd1 contenente un valore intero che mi dice se il led è acceso o meno (perchè se cmd > 0 è su ON, mentre se = 0 è OFF). Ovviamente all'inizio ho dichiarato app1 nel seguente modo String app1 = "";.*
Provando questo script mi rimane fisso il led 1, e non posso fare nient'altro.