Introdução à programação C para Arduino
Operadores Lógicos
Os operadores lógicos são utilizados quando um teste lógico é composto de mais de um teste. Aqui apresento os operadores ‘&’ (e) e ‘||’ (ou).
Exemplo 1:
n1 = 12; //n1 vale 12
n1 > 10 & n1 < 20; //afirmar que n1 é maior que 10 e menor que 20 é verdadeiro
Exemplo 2:
n1 = 20; //n1 vale 20
n1 == 20 || n1 > 100; //afirmar que n1 é 20 ou é maior que 100 é verdadeiro
A tabela abaixo ilustra os resultados finais quando temos um teste composto pelos testes A e B combinado com ‘&’.
A B A & B
V V V
V F F
F V F
F F F
A tabela abaixo ilustra os resultados finais quando temos um teste composto pelos testes A e B combinado com ‘||’.
A B A || B
V V V
V F V
F V V
F F F
ESTRUTURAS DE DECISÃO
Uma estrutura de decisão é um trecho de código onde ocorre um teste lógico (um teste que pode dar verdadeiro ou falso apenas) e a partir do resultado a execução do código segue um de dois caminhos possíveis.
Aqui veremos dois tipos de estrutura de decisão: if/else e switch/case.
A estrutura do tipo if/else pode dividir o código em duas partes, uma roda se o resultado do teste lógico for verdadeiro e a outra roda se o resultado for falso. Resumo da sintaxe:
if (teste)
{
Código que executa se o resultado do teste for verdadeiro.
…
}
else
{
Código que executa se o resultado do teste for falso.
...
}
A estrutura do tipo if/else pode dividir o código em mais de duas partes, a primeira roda se o resultado do primeiro teste lógico for verdadeiro, a segunda roda se o resultado do segundo teste for verdadeiro (mas for falso do ponto de vista do primeiro teste) e a última parte roda quando todos os testes anteriores forem falsos. Resumo da sintaxe:
if (teste 1)
{
Código que executa se o resultado do teste 1 for verdadeiro.
…
}
eles if (teste 2)
{
Código que executa se o resultado do teste 2 for verdadeiro e o resultado do teste 1 for falso.
...
}
else
{
Código que executa se os resultados de todos os testes anteriores forem falsos.
...
}
A estrutura do tipo switch/case pode dividir o código em várias partes, cada uma roda se o resultado do teste lógico específico for verdadeiro e a última roda se todos os resultados anteriores forem falsos. Resumo da sintaxe:
switch (nome_da_variável)
{
case valor_1 :
Código para executar quando ocorrer o valor_1;
break; //termina a execução
case valor_2 :
Código para executar quando ocorrer o valor_2;
break; //termina a execução
case valor_3 :
Código para executar quando ocorrer o valor_3;
break; //termina a execução
default :
Código para executar quando todos os anteriores forem falsos;
}
Mas é muito importante notar que podem ser executadas qualquer quantia de testes, mas o último (default) ocorre quando todos os anteriores forem falsos, ou seja, a mesma coisa que o else no caso do if.
Se o leitor achar muito pesado ter que aprender as duas estruturas, poderá praticar apenas o if/else e resolver qualquer problema com ele.
HORA DA PRÁTICA:
ATIVIDADE_006 – Fazer três leds acenderem e apagarem na sequência indefinidamente, com intervalo de 0,5 s.
Figura 54 - Atividade 6 – Código utilizando if
Figura 55 - Atividade 6 – Execução no SIMULIDE
Figura 56 - Atividade 6 – Esquema da placa física
ATIVIDADE_006_1 – Utilizando três leds, escolher qual vai acender utilizando os números 2,3 ou 4 em uma variável e a estrutura de decisão if/else. Para esta atividade, os esquemas da placa física e do SIMULIDE são os mesmos da atividade 006.
CÓDIGO
//depois de rodar o código uma vez, mudar o valor abaixo de 2 para 3,
//depois para 4, depois para qualquer outro número
int porta=2;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
if(porta == 2)
{
digitalWrite(2, HIGH);
}
else if(porta == 3)
{
digitalWrite(3, HIGH);
}
else if(porta == 4)
{
digitalWrite(4, HIGH);
}
else
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
}
void loop() {
}
ATIVIDADE_006_2 – Utilizando três leds, escolher qual vai acender utilizando os números 2, 3 ou 4 em uma variável e a estrutura de decisão switch/case. Para esta atividade, os esquemas da placa física e do SIMULIDE são os mesmos da atividade 006.
CÓDIGO
//depois de rodar o código uma vez, mudar o valor abaixo de 2 para 3,
//depois para 4, depois para qualquer outro número
int porta=2;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
switch(porta)
{
case 2:
digitalWrite(2, HIGH);
break;
case 3:
digitalWrite(3, HIGH);
break;
case 4:
digitalWrite(4, HIGH);
break;
default: