MCO018703 2018 2 AULA04
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
}
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.
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.