MCO018703 2018 2 AULA04

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Objetivos

  • Aprender sobre funções para controle de de fluxo;
  • Utilizar o comando de decisão if else.

Funções para Controle de Fluxo - Decisão

if( )

É um controle de fluxo usado para selecionar uma ou mais instruções baseado no resultado de um teste de comparação. Todas as instruções entre as chaves { } são executadas somente se o resultado desse teste for verdadeiro; se não, essas instruções não são executadas. Verdadeiro é qualquer resultado, mesmo negativo, diferente de zero. Falso é um resultado zero. A Figura 1 mostra o controle de fluxo utilizando os comandos if e if...else.

if (expressão){
   bloco de instruções; // se "expressão" for verdadeira, "bloco de instruções" é executado
}
Fig037 MCO018703.jpg

Figura 1 - Controle de Fluxo com os comandos if e if...else.

if( )...else

Ao se acrescentar mais um bloco de instruções no loop do comando if pode-se criar o comando if...else (Figura 1), para fazer um novo teste quando o resultado da expressão for falsa.

if (expressão) {
   bloco de instruções1; // se "expressão" for verdadeira, "bloco de instruções1" é executado
}
else {
   bloco de instruções2; // se "expressão" for falsa, "bloco de instruções2" é executado 
}

if( )...else if( )

E de novo ao se acrescentar agora o comando if...else no loop do comando if pode-se criar mais um outro comando, o if...else if. No exemplo abaixo se "expressão1" for verdadeira o "bloco de instruções1" é executado; se "expressão1" for falsa mas "expressão2" for verdadeira "bloco de instruções2" é executado; e se "expressão1" e "expressão2" forem falsas o "bloco de instruções3" é executado. A Figura 2 mostra os comandos if( )...else if( ) e switch...case.

Fig038 MCO018703.jpg

Figura 2 - Controle de Fluxo usando os comandos if( )...else if( ) e switch...case.


if (expressão1) {
   bloco de comandos1; 
}
else if (expressão2) {
   bloco de instruções2; 
}
else {
   bloco de comandos3; 
}

switch...case

É possível ir inserindo comandos if...else na posição do segundo bloco de instruções de outro comando if...else e assim criar uma cadeia de comandos para testar dezenas de expressões até encontrar uma que retorne um resultado verdadeiro e executar um dos blocos de instruções; mas existe um comando próprio que simplifica bastante essa seleção, é o comando switch...case (Figura 2). Esse comando permite comparar uma mesma variável inteira, ou uma expressão que retorne um inteiro, com vários valores possíveis.

switch..,case
switch (expressão) {
  case 1:  bloco de instruções1; 
           break;
  case 2:  bloco de instruções2; 
           break;
  case 3:  bloco de instruções3; 
           break;
  default: bloco de instruções4; 
}

Operadores Relacionais e Lógicos

Vamos recordar os principais operadores relacionais e lógicos vistos nas aulas anteriores.

Relacionais
Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a
!= diferente de


Lógicos
Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)

Ver Operadores Relacionais e Lógicos

Exemplos

[1] Acender o LED se digitar 1 no monitor serial.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        }
      }//end if
   }//end while
}//end loop

[2] Acende o LED se digitar 1 no monitor serial senão for 1 apaga.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED e qualquer outro para apagar: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        } 
        else
        {
          digitalWrite(10, LOW);
          Serial.println(" LED APAGADO!");
        }
      }//end if
   }//end while
}//end loop

[3] Acende o LED se digitar 1 no monitor serial senão se for 2 apaga.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED e digite 2 para apagar o LED: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        } 
        else if(estebyte == '2') // Digitou 2 no Monitor Serial
        {
          digitalWrite(10, LOW);
          Serial.println(" LED APAGADO!");
        }
      }//end if
   }//end while
}//end loop

[4] Desafio: Acrescente mais um LED no seu experimento e, utilizando o comando switch..case, crie todas as possibilidades de acender e apagar os dois LEDs.


Icone voltar.png Icone menu.png Icone prox.png