MCO018703 2018 2 AULA04: mudanças entre as edições
(7 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 8: | Linha 8: | ||
==if( )== | ==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 { | É 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'''. | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 75: | Linha 75: | ||
=Operadores Relacionais e Lógicos= | =Operadores Relacionais e Lógicos= | ||
Vamos recordar os principais operadores relacionais e lógicos vistos nas aulas anteriores. | |||
;Relacionais | ;Relacionais | ||
Linha 119: | Linha 119: | ||
Ver [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Operadores Relacionais e Lógicos] | Ver [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Operadores Relacionais e Lógicos] | ||
=Exemplos= | |||
[1] Acender o LED se digitar 1 no monitor serial. | |||
<syntaxhighlight lang=c> | |||
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 | |||
</syntaxhighlight> | |||
[2] Acende o LED se digitar 1 no monitor serial senão for 1 apaga. | |||
<syntaxhighlight lang=c> | |||
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 | |||
</syntaxhighlight> | |||
[3] Acende o LED se digitar 1 no monitor serial senão se for 2 apaga. | |||
<syntaxhighlight lang=c> | |||
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 | |||
</syntaxhighlight> | |||
[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. | |||
----- | ----- |
Edição atual tal como às 19h37min de 27 de agosto de 2018
1 Objetivos
- Aprender sobre funções para controle de de fluxo;
- Utilizar o comando de decisão if else.
2 Funções para Controle de Fluxo - Decisão
2.1 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.
2.2 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
}
2.3 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;
}
2.4 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;
}
3 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
4 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.