duda swicht case+serial read

Hola! alguien me sabe explicar que hago mal aqui ??bueno seguro que muchos jeje a ver... si mando una "a" solo recibo 0 por el monitor pero en cambio si mando "s" si que voy recibiendo -10-20-30 y si en ese punto mando otra "a" vuelve a aparecer el valor anterior en este caso el -30 pero nunca llega a sumar 10 ...como tendria que escribirlo?

int contar;

void loop(){
if (Serial.available() > 0){
int valor = Serial.read();
switch (valor){
case 'a':
contar =contar +10;
case 's':
contar= contar - 10;
Serial.println (contar);

muchas graciass

En la referencia viene todo explicado:
http://arduino.cc/es/Reference/SwitchCase

chiva gracias,si lo dices por el break; despues de cada case, de echo en el link que me indicas es en el que me base para escribirlo ,asi es como empeze escribiendolo, con el brake; , pero no salia nada por el monitor, despues de quitarlo es cuando e empezado a ver los -10-20-30 con el brake puesto no veia nada , asi que supongo que es algun otro error.de todas formas ...poniendo el brake; despues de cada case tambien deberia funcionar no???

Cuando pones un switch se ejecuta el primer case que cumpla la condición y sigue ejecutándose hasta que encuentra un break o se acaba el bloque switch.

Para lo que tu quieres hacer necesitas poner un par de break

int contar;

void loop(){
if (Serial.available() > 0){
  int valor = Serial.read();
  switch (valor){ 
  case 'a':
    contar =contar +10;
    break;
  case 's':
    contar= contar - 10;
    break;
  } //fin del switch
} //fin del if
  Serial.println (contar);
}//fin del loop

Como no tienes los break puestos lo que hace tu código cuando llega una 'a' es

  • Primero le suma 10 (lo que hace al ser 'a')
  • Luego le resta 10 (porque es una instrucción que está debajo y no hay un [tt]break [/tt]que lo pare.
  • Resultado = 10 -10 = 0 --> la variable se queda como estaba.

ok! gracias xlopez, me queda mucho mas claro con tu explicacion