Go Down

Topic: duda swicht case+serial read (Read 1 time) previous topic - next topic

deltoya12

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

chiva

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

deltoya12

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???

xlopez

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
Code: [Select]
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 break que lo pare.
  • Resultado = 10 -10 = 0 --> la variable se queda como estaba.

deltoya12

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

Go Up