elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No consigo salir de un bucle While
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No consigo salir de un bucle While  (Leído 4,647 veces)
mario290386

Desconectado Desconectado

Mensajes: 23


Ver Perfil
No consigo salir de un bucle While
« en: 1 Agosto 2018, 15:02 pm »

Hola a todos!! Necesito que alguien me eche una mano con un sencillo programa de Arduino que me está volviendo loco.
He creado un sencillo programa con el que usando el monitor serie voy mandando un 1 o un 2 para imprimir una serie de estados.

Este es el codigo que he realizado de prueba:
Código:
int va;
void setup() {
  Serial.begin(9600);
}


void loop() {

  while (Serial.available()== 0){
    Serial.println("OFF");
    delay (400);
    }
 

 
  if(Serial.available()>0){
     va=Serial.read();
 


     while(va=='1') {
   
   Serial.println("Modo 1");
   delay (400);
      }
  }

 
  while (va=='2') {
     Serial.println("Modo 2");
     delay (400);
   
    }   
  }




Os resumo lo que hace mi programa:

  Si no se detecta comunicación por el puerto serie se imprime "OFF"
  Si se detecta un "1" por el puerto serie se imprime "Modo 1"
  Si se detecta un "2" por el puerto serie se imprime "Modo 2"


En principio el programa me funciona, el problema lo tengo en el tratamiento de los bucles.
Resulta que si le envío "1" me imprime "Modo 1" pero al enviar un "2" no consigo que me entre al "Modo 2" realmente no sé de qué manera puedo hacerlo, lo he intentado con bucles while o if else e incluso he usado un GOTO para intentar redirigir el programa al otro bucle pero nunca consigo que me cambie al modo 2 una vez que entra en el primer bucle.

No sé de qué manera proceder, y no sé si debería probar con un switch case o interrumpir el programa de alguna manera,
Por favor necesito una mano, solo me falta esta parte para completar la comunicación de forma correcta.

Gracias!!



En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: No consigo salir de un bucle While
« Respuesta #1 en: 1 Agosto 2018, 15:20 pm »

Sigue el programa:
Cuándo hay un dato entras en el if.
Si has pulsado 1 va valdrá 1.
Entonces entras en el primer while donde la condición es que se repita si va vale 1. Cómo no hay cambio al terminar el bucle va seguirá valiendo 1 y repetirá el bucle de nuevo. Y esto será infinito.
Cambia el valor de va antes de salir del bucle a 0, por ejemplo.


En línea

mario290386

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: No consigo salir de un bucle While
« Respuesta #2 en: 1 Agosto 2018, 15:43 pm »

Hola MAFUS, gracias por la idea, en efecto al probar lo que me comentas si funciona, el problema que no me sirve ya que necesito que este imprimiendo continuamente "Modo 1" en bucle infinito y al pulsar 2 necesito que este imprimiendo "Modo 2" en bucle infinito y si pulso de nuevo 1 que me imprima "Modo 1" infinitamente, de la manera que me comentas solo me lo imprime una vez.
Asi es como  he colocado la asignacion de "va=0" en el programa:
Código:
     while(va=='1') {
   
   Serial.println("Modo 1");
   delay (400);
   va = 0;
      }
  }

  while (va=='2') {
     Serial.println("Modo 2");
     delay (400);
    va = 0;
    }   
  }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: No consigo salir de un bucle While
« Respuesta #3 en: 1 Agosto 2018, 18:10 pm »

Aprovecha el bucle loop. Cambia los whiles por if.
Si hay un dato en puerto serie lo lees en va.
Si va vale 0 imprime "OFF"
Si va vale 1 imprime "Modo 1"
Si va vale 2 imprime "Modo 2"
Esperar 400ms

Prueba esto.
En línea

mario290386

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: No consigo salir de un bucle While
« Respuesta #4 en: 5 Agosto 2018, 20:35 pm »

Muchas gracias MAFUS, me funciona correctamente ya el programa, lo he solucionado siguiendo tus pasos pero he cambiado los if por la estructura case.
Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Salir de bucle cuando el caracter es un espacio [Resuelta]
Programación C/C++
diegoCmC 8 8,215 Último mensaje 7 Junio 2011, 16:27 pm
por diegoCmC
[QT C++] Como salir del bucle??
Programación C/C++
x7uk 3 4,277 Último mensaje 28 Noviembre 2012, 17:21 pm
por febef
Salir de un bucle while sin pulsar Ctrl + d [getchar -Lenguaje C]
Programación C/C++
NOB2014 2 2,763 Último mensaje 30 Noviembre 2015, 03:09 am
por NOB2014
Como salir del bucle (preferiblemente con algun system())
Programación C/C++
alpachino98 2 2,357 Último mensaje 23 Octubre 2017, 19:45 pm
por alpachino98
salir de un bucle presionando la tecla ESC
Programación C/C++
kakshi 2 4,571 Último mensaje 4 Agosto 2019, 21:49 pm
por kakshi
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines