arduino. VB 2012 y cadena de led

BUENAS me encuentro con una cosilla que seguramente sea una tonteria y me inclino a que es el codigo de arduino .despues de crear en Vb un formulario y lograr que funcione 5 led con sus respectivos botones(on-off) ,decidi ampliarlo y hay es donde me quede estancado ,resulta que despues de asignar a 5 pines pwm dichos botones ,esto fiuncionan perfectamente encendiendo y apagando los led ,ahora bien ,cuando llego a colocar el 6 led con sus botones me encuentro que los botones de led 6 me apaga y enciende el led 1 ,es decir como si para encendery apagar el led 1 tuviera 4 botones .me inclino es que arduino interpreta val==10 como val==0 ,de hay que encienda el led 1 ambos bloques .este es el codigo

void setup() { pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); Serial.begin(9600); }

void loop() { int val; if (Serial.available()) { delay(100); while (Serial.available ()>0) val=Serial.read(); if (val=='0'){digitalWrite(12,LOW); } else if (val=='1'){ digitalWrite(12, HIGH); } if (val=='2'){digitalWrite(11,LOW); } else if (val=='3'){ digitalWrite(11, HIGH); } if (val=='4'){digitalWrite(10,LOW); } else if (val=='5'){ digitalWrite(10, HIGH); } if (val=='6'){digitalWrite(9,LOW); } else if (val=='7'){ digitalWrite(9, HIGH); } if (val=='8'){digitalWrite(8,LOW); } else if (val=='9'){ digitalWrite(8, HIGH); } if (val=='10'){digitalWrite(7,LOW); } else if (val=='11'){ digitalWrite(7, HIGH);

}}}

podrian ayudarme para la ampliacion necesito controlar hasta 18 pines para el proyecto .gracias

Serial.read() Lee un byte. Desde la aplicación al mandar los caracteres 0,1, 2, 3 .. 9 estas enviando un byte correspondiente al carácter ASCII . Cuando escribís “10” desde la aplicación se entiende que son dos bytes del caracter ASCII 1 y 0 . Desde la aplicación deberías enviar otro carácter ASSII, como: a,b, c, d , A, B y compararlos.

Saludos

Saludos Tomando la sugerencia de PeterKantTropus, deberias colocar el Skecht asi:

void setup()
{
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int val;
  if (Serial.available())
  {
    delay(100);    
    while  (Serial.available ()>0) 
      val=Serial.read();
      if (val=='a'){digitalWrite(12,LOW); }
      else if (val=='A'){ digitalWrite(12, HIGH);
    } 
  if (val=='b'){digitalWrite(11,LOW); }
      else if (val=='B'){ digitalWrite(11, HIGH);
         } 
  if (val=='c'){digitalWrite(10,LOW); }
      else if (val=='C'){ digitalWrite(10, HIGH);
            } 
  if (val=='d'){digitalWrite(9,LOW); }
      else if (val=='D'){ digitalWrite(9, HIGH);
                } 
  if (val=='e'){digitalWrite(8,LOW); }
      else if (val=='E'){ digitalWrite(8, HIGH);
     } 
  if (val=='f'){digitalWrite(7,LOW); }
      else if (val=='F'){ digitalWrite(7, HIGH);
   
      }}}

Aunque en mi opinion:

void setup()
{
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int val;
  if (Serial.available()>0){
    switch(Serial.read()){
      case 'a':
        digitalWrite(12,LOW);
      break;
      case 'b':
        digitalWrite(11,LOW);
      break;
      case 'c':
        digitalWrite(10,LOW);
      break;
      case 'd':
        digitalWrite(9,LOW);
      break;      
      case 'e':
        digitalWrite(8,LOW);
      break;
      case 'f':
        digitalWrite(7,LOW);
      break;
      case 'A':
        digitalWrite(12,HIGH);
      break;
      case 'B':
        digitalWrite(11,HIGH);
      break;
      case 'C':
        digitalWrite(10,HIGH);
      break;
      case 'D':
        digitalWrite(9,HIGH);
      break;      
      case 'E':
        digitalWrite(8,HIGH);
      break;
      case 'F':
        digitalWrite(7,HIGH);
      break;
    }
  }

  }

Así el código tarda menos en ejecutarse