Encender 7 led - Monitor serial.

Hola buenas tardes gente. Estoy teniendo un problema con mi programa y no me puedo dar cuenta en que parte estoy fallando.

Resulta que yo necesito encender LED's(7) mediante el monitor serial. Por ejemplo si yo quisiera encender el led "Azul" necesitaria enviar mediante el monitor serial lo siguiente "0100000", si yo quisiera encender el led blanco enviaria "1000000", etc.

Mi problema esta en que si yo envio por ejemplo "1000000" y despues lo vuelvo a enviar nuevamente es como que me va sumando, es decir en vez de encender el led blanco enciende el led azul y asi sucesivamente. No se si alguien me podria ayudar.

Muchas Gracias.

Código:

void sale(String cSalida);
int luzB = 4;
int luzAz = 8;
int luzV = 10;
int luzA = 6;
int luzR = 12;
int burbuja = 2;
int luznegra = 3;
char caracter;
String cEntrada = "";
int iNsalida = 0;
String cSalida;
int nLargo;

void setup() {

Serial.begin(9600);
pinMode(luzB, OUTPUT);
pinMode(luzR, OUTPUT);
pinMode(luzAz, OUTPUT);
pinMode(luzV, OUTPUT);
pinMode(luzA, OUTPUT);
pinMode(burbuja, OUTPUT);
pinMode(luznegra, OUTPUT);

}

void loop() {

while(Serial.available()>0){

char caracter = Serial.read();
cEntrada += caracter;
//cEntrada.concat(caracter);
//Serial.print(cLuzB);

nLargo = cEntrada.length();

if (nLargo >= 7) {
Serial.println(cEntrada);
Serial.println(nLargo);

//envio a la función el dato recibido. (cEntrada)
sale(cEntrada);

cEntrada = "";
nLargo = 0;

}
}

}

//guarda en la variable cSalida lo que se recibió de vb

void sale(String cSalida) {
int nLuzB;
int nLuzAz;
int nLuzR;
int nLuzV;
int nLuzA;
int nBurbuja;
int nLuznegra;
String cLuzB;
String cLuzAz;
String cLuzA;
String cLuzR;
String cLuzV;
String cBurbuja;
String cLuznegra;

cLuzB=cSalida.substring(0,1); //toma el primer caracter de la
//de la cadena recibida
nLuzB=cLuzB.toInt(); //transforma el caracrter en un entero
//Serial.print(cLuzB);
digitalWrite(luzB,nLuzB);//apaga o enciende la luz blanca
//según nLuzB sea un 0 o un 1
Serial.println("luz blanca"+cLuzB);

cLuzAz=cSalida.substring(1,2); //toma el segundo caracter de la
//de la cadena recibida

// Serial.print(cLuzAz);
nLuzAz=cLuzAz.toInt(); //transforma el caracrter en un entero
digitalWrite(luzAz,nLuzAz);//apaga o enciende la luz azul
//según nLuzAz sea un 0 o un 1

Serial.println("luz Azul " + cLuzAz);

cLuzV=cSalida.substring(2,3); //
//
nLuzV=cLuzV.toInt(); //

digitalWrite(luzV,nLuzV); //

Serial.println("luz Verde " + cLuzV);

cLuzR=cSalida.substring(3,4); //
//
nLuzR=cLuzR.toInt(); //

digitalWrite(luzR,nLuzR);//
//
Serial.println("luz Roja " + cLuzR);

cLuzA=cSalida.substring(4,5); //
//
nLuzA=cLuzA.toInt(); //

digitalWrite(luzA,nLuzA);//
//

Serial.println("luz Amarilla " + cLuzA);

cBurbuja=cSalida.substring(5,6); //
//

nBurbuja=cBurbuja.toInt(); //

digitalWrite(burbuja,nBurbuja); //

Serial.println("burbujero" + cBurbuja);

cLuznegra=cSalida.substring(6,7); //
//

nLuznegra=cLuznegra.toInt(); //

digitalWrite(luznegra,nLuznegra); //

Serial.println("Luz negra" + cLuznegra);

}

Primero: código va entre lo que genere </>, no entre lo que genera el botón del “globo de pensamiento” (quote)

Segundo: no sé tu, pero yo preferiría hacerlo así:

const byte luzB = 4;
const byte luzAz = 8;
const byte luzV = 10;
const byte luzA = 6;
const byte luzR = 12;
const byte burbuja = 2;
const byte luznegra = 3;
char[8] cEntrada; // Aqui es donde se van a guardar los 7 dígitos
byte nLargo = 0;

void setup() {


  Serial.begin(9600);
  pinMode(luzB, OUTPUT);
  pinMode(luzR, OUTPUT);
  pinMode(luzAz, OUTPUT);
  pinMode(luzV, OUTPUT);
  pinMode(luzA, OUTPUT);
  pinMode(burbuja, OUTPUT);
  pinMode(luznegra, OUTPUT);
  cEntrada[7] = 0; // Esto se hace para que se pueda imprimir la cadena de caracteres

}

void loop() {


  while (Serial.available() > 0) {

    cEntrada[nLargo] = Serial.read();
    nLargo++;
    // Estas dos líneas harían lo mismo que cEntrada += Serial.read();

    if (nLargo == 7) { // Si ya tenemos los 7 digitos recibidos
      Serial.println(cEntrada);
      Serial.println(nLargo);

      //envio a la función el dato recibido. (cEntrada)
      sale();
      nLargo = 0;

    }
  }


}

void sale() {
  byte estado = cEntrada[0] - '0'; // La forma más rápida de convertir un caracter numerico a un valor de variable
  digitalWrite(luzB, estado); //apaga o enciende la luz blanca
  //según nLuzB sea un 0 o un 1
  Serial.println("luz blanca" + String(estado));

  estado = cEntrada[1] - '0';
  digitalWrite(luzAz, estado); //apaga o enciende la luz azul
  //según nLuzAz sea un 0 o un 1
  Serial.println("luz Azul " + String(estado));

  estado = cEntrada[2] - '0';
  digitalWrite(luzV, estado);
  Serial.println("luz Verde " + String(estado));

  estado = cEntrada[3] - '0';
  digitalWrite(luzR, estado);
  Serial.println("luz Roja " + String(estado));

  estado = cEntrada[4] - '0';
  digitalWrite(luzA, estado);
  Serial.println("luz Amarilla " + String(estado));

  estado = cEntrada[5] - '0';
  digitalWrite(burbuja, estado);
  Serial.println("burbujero" + String(estado));

  estado = cEntrada[6] - '0';
  digitalWrite(luznegra, estado);
  Serial.println("Luz negra" + String(estado));

}

Te ayuda?