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);
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.