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

En la referencia viene todo explicado:
http://arduino.cc/es/Reference/SwitchCase
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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy