Pages: [1]   Go Down
Author Topic: duda swicht case+serial read  (Read 917 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: