Como interromper um laço através de um comando pela serial [RESOLVIDO]

Boa tarde pessoal, gostaria de saber se é possível interromper um laço for ou while através de um comando pela serial... Por exemplo:

Char comando = Serial.read ();

While (comando ==a)

{

// instruções 1

}

While (comando == b)

{

// instruções 2

}

Quando eu aperto "a" no teclado, as instruções 1 são executadas infinitamente e eu gostaria de interromper essas instruções com um comando "b" e consequentemente executar as instruções 2.

Exibições: 554

Responder esta

Respostas a este tópico

E se tu ler o comando dentro do laço? Um valor que não satisfaça mais a condição da repetição;

Não consigo ler nenhum comando dentro do laço =/

Quando aperto o comando "a", o primeiro laço é executado e depois disso não consigo ler mais nenhum comando

mostre o seu código para nos?

char comando;


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

while (comando == 'a') {

   //instruções   

   if (Serial.available() > 0) {
      comando = Serial.read();      //lê dentro do while;
   }

   if(comando != 'a') {

       break;

   }

}

Obs: Desta forma só tem o porém de não executar mais nada enquanto estiver nesse while.

Kra já passei por isso... O fato é que quando vc usa o while ele executa enquanto a condição for verdadeira e ele não sai de lá nunca mais... sempre que usar o while termine com o (break;), ele faz com que a condição teste novamente, funcionando quase como um (if).

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if (Serial.available())                       //se byte pronto para leitura
  {
    switch (Serial.read())                 //verifica qual caracter recebido
    {
    case 'a':                                   // caso for o caracter a


   // faça isso


      break;                                    // saia da condição para testar novamente

    case 'u':                                    // caso for o caracter u


   // faça aquilo

     break;                                     // saia da condição para testar novamente
// pode colocar quantos caracteres quiser, desde que todos terminem com o "break;" para retornar.
}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Ei pessoal, funcionou com o break!!!
Eu já tinha usado o break antes mas de forma errada, não tinha dado certo... mas agora fiz do jeito que vos disseram e funcionou!!
Muito obrigado pela ajuda!!

Desculpa, eu estava sonolenta ontem, na realidade não é necessário o break. Tu precisa somente realizar a leitura dentro do while e atribuir a "comando". Quando o valor não for mais "a", ele não entra mais no while.

Até onde eu sei, "sempre que usar o while termine com o (break)" dito pelo colega não é uma verdade absoluta. Outra coisa, "ele faz com que a condição teste novamente" também não é.

O que acontece é que o break encerra a execução da instrução delimitadora, nesse caso o while, mais próxima. O controle passa para a instrução que segue a instrução encerrada, nesse caso ele segue as próximas instruções e volta a checar a condição do while.

Entendi... muito obrigado pela ajuda Amanda!! ;)

É verdade Amanda, pesquisei sobre o while e descobri muita utilidade para ele, obrigado pela resposta. Não se pode colocar o break no final do while pelo fato que ele vai sair da condiçao para testar novamente, funcionando como um IF. Mais uma vez obrigado...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço