Buscar

Aula 3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

AULA 3 
LÓGICA E 
MICROCONTROLADORES 
Prof. Charles Way Hun Fung 
 
 
2 
TEMA 1 – VARIÁVEIS NO PROGRAMA 
O programa desenvolvido deve seguir uma sequência lógica, determinada 
pela semântica da linguagem de programação. Isto significa que há uma ordem e 
forma de escrever o programa. No caso, utilizamos a linguagem Wiring, baseada 
na linguagem C/C++, e logo conheceremos as suas regras para criar nossos 
programas. A Figura 1 apresenta uma estrutura padrão: 
Figura 1 – Estrutura do código em Wiring 
 
 Como se pode ver na Figura 1, a declaração de variáveis deve ser antes 
da função setup(). Assim, as variáveis utilizadas serão consideradas globais, ou 
seja, serão reconhecidas em qualquer parte do código. A Figura 2 ilustra o uso de 
uma variável nesta estrutura de código: 
Figura 2 – Uso de uma variável 
 
 A Figura 2 apresenta um exemplo do uso de uma variável chamada 
estadoBotao. Esta foi declarada antes das funções, e por isso pode ser usada em 
setup() e loop(). Essa é uma característica herdada da linguagem C/C++, que diz 
que variáveis globais podem ser usadas em quaisquer funções. Assim, podemos 
afirmar que as variáveis globais existem durante toda a execução do programa. 
 
 
3 
Existe outro tipo de variável chamada variável local. Ela existe apenas 
dentro de um bloco de código, comandos que se encontram entre duas chaves { 
}. Neste caso, estas variáveis só existem dentro do bloco de código em que foram 
declaradas. A Figura 3 ilustra este tipo de variável: 
Figura 3 – Variáveis locais 
 
 Na Figura 3 há dois blocos de código (funções); no primeiro, há uma 
variável inteira chamada x, que recebe valor inicial igual a 2; no outro, há duas 
variáveis: teste do tipo String e x do tipo inteiro. A variável na função setup() só 
existirá enquanto esta função for executada, deixando de existir quando ela 
terminar. A mesma ideia ocorre com as duas variáveis de loop(): só existem 
enquanto loop() executar. As variáveis com nome de x em setup() e loop() são 
diferentes e não devem ser confundidas; possuem o mesmo nome, mas o valor 
que uma possuiu não tem relação com o valor que da outra. 
Em resumo, há dois tipos de variáveis: globais e locais. As globais existem 
em toda a extensão do código e podem ser utilizadas em qualquer função. Já as 
locais apenas existem dentro do bloco de código em que foram criadas. 
Além de variáveis, ainda é possível criar uma forma de armazenar dados 
que não altera seu conteúdo no decorrer do código, o componente de constante. 
Na IDE do Arduino, há diversos valores predefinidos para constantes, 
classificados segundo alguns critérios1: 
a. Constantes booleanas 
 false: definido como zero na linguagem de programação, tem sentido 
lógico falso. 
 
1 Disponível em: <https://www.arduino.cc/reference/pt/language/variables/constants/constants/>. 
Acesso em: 26 abr. 2019. 
 
 
4 
 true: definido como o número 1, sendo o significado de verdadeiro. 
Porém na linguagem de programação, qualquer número diferente de 
zero tem sentido lógico verdadeiro. 
Estas constantes booleanas devem ser escritas com todos os caracteres 
minúsculos. 
b. Níveis lógicos 
 HIGH: indica que o pino do microcontrolador está em nível lógico alto, 
em outras palavras, no caso de leitura, uma tensão superior a 3 V. No 
caso de uma escrita, de 5 V ou 3,3V dependendo da alimentação da 
placa. 
 LOW: indica que o pino do microcontrolador está em nível lógico baixo, 
no caso de leitura, uma tensão inferior 1,5 V. No caso de escrita, 0 V. 
c. Definição de modos de pinos digitais 
Estas constantes são usadas para definições de pinos como entrada ou 
saída, por meio do comando pinMode(), normalmente usado na função 
setup(). 
 INPUT: define o pino digital como uma entrada; neste caso, deve ser 
usado para fazer a leitura de um botão ou algum sensor com saída 
digital. 
 OUTPUT: define o pino digital como uma saída; neste caso podemos 
usar o pino para acender LED, tocar um buzzer ou enviar comando a um 
display. 
 NPUT_PULLUP: funciona da mesma forma que o INPUT, porém o pino 
digital tem um valor padrão em nível alto ou HIGH. 
d. Definição de LED na placa 
 LED_BUILTIN: é o pino da placa conectado ao LED; na maioria das 
placas é o pino 13. 
TEMA 2 – OPERADORES ARITMÉTICOS 
 Na programação do Arduino, há um conjunto de operadores aritméticos, 
relacionais e lógicos que podem ser usados para diversas situações no decorrer 
do programa. Neste tema abordaremos cada um destes operadores e veremos 
como utilizá-los. 
Segundo Oliveira (2017), os operadores aritméticos são usados para 
realizar contas simples como atribuição, soma, subtração, incremento etc. Seu 
 
 
5 
objetivo é realizar operações matemáticas, para que sejam utilizadas nas 
estruturas de programação ou na própria lógica do algoritmo. 
A tabela a seguir apresenta cada um dos símbolos e suas operações: 
Tabela 1 – Operações aritméticas 
Símbolo Operação 
= Atribuição 
+ Soma 
- Subtração 
* Multiplicação 
/ Divisão 
% Resto da divisão 
++ Incremento 
-- Decremento 
 O primeiro operador apresentado na tabela 1 é o operador de atribuição, 
usado para alterar o conteúdo de determinada variável, exemplo: 
 X = 10 
 C = ‘A’ 
As operações seguintes são as operações matemáticas convencionais: 
soma, subtração, multiplicação e divisão, que seguem o seguinte formato: 
Resultado = <Num1> <operação> <Num2> 
Exemplo: 
Res = A+B 
Temos uma soma entre as variáveis A e B, com o resultado colocado em 
Res. Para manter o paralelo com o Scratch, a mesma operação é realizada: 
Figura 4 – Soma no Scratch 
 
Foi utilizado o bloco de atribuição com o bloco de operações aritméticas: 
Figura 5 – Bloco de atribuição e aritmético do Scratch 
 
 
 
6 
 A operação seguinte é o resto da divisão. A ideia desta operação é bastante 
simples; consideremos a seguinte operação de divisão: 
5 / 2 = 2, sobrando 1 (resto da divisão) 
O resto da divisão é a operação simbolizada por %. No caso de nosso 
exemplo, 1. É comum a confusão entre o quociente e o resto da divisão, mas 
perceba que o quociente do nosso problema é o resultado da divisão, 2. 
 As duas últimas operações aritméticas são incremento e decremento, que 
consistem em adicionar 1 ou subtrair 1 respectivamente. Vamos entender um 
pouco mais como funciona o incremento, e tudo que for falado sobre esta 
operação vale para o decremento. 
 A operação incremento é implementada na linguagem Wiring desta forma: 
Num++; 
em que Num é uma variável inteira. O efeito desta operação equivale à 
seguinte linha de código: 
Num = Num + 1; 
 Do lado direito da sentença é realizada uma soma entre o valor de Num 
com 1, e o resultado desta operação substitui o valor da variável. Exemplo: se 
Num tivesse o valor 5, após esta linha de código, Num estará com o valor 6. 
 As operações de incremento e decremento serão muito usadas mais à 
frente na disciplina, em repetições. 
TEMA 3 – OPERADORES RELACIONAIS 
 Resultam em valores lógicos como verdadeiro e falso. Normalmente são 
usados em um programa, como condições em estruturas condicionais. 
Tabela 2 – Operações relacionais 
Símbolo Operação 
== Igualdade 
!= Diferença 
> Maior 
< Menor 
>= Maior ou igual 
<= Menor ou igual 
 
 
 
7 
As condições são formadas da seguinte forma: 
<variável> <operador> <valor condicional> 
 Exemplo 1: 
(X == 10) 
 A expressão indica que, se a variável X for igual a 10, a condição será 
verdadeira, mas para qualquer outro valor a condição é falsa. 
 Exemplo 2: 
(Idade>=18) 
 Temos a variável chamada idade e, se ela for maior ou igual a 18, a 
condição estará verdadeira. Porém se for menor, ou seja, possuir um valor 17 ou 
inferior, a condição será considerada falsa. 
 O Scratch possui a estrutura para as operações relacionais, como mostrado 
na Figura 6: 
Figura 6 – Operação relacional no ScratchEste bloco da Figura 6 tem a possibilidade de ser utilizado com variáveis, 
alternando a operação utilizada entre as operações relacionais. 
TEMA 4 – OPERADORES LÓGICOS 
Estes operadores são utilizados em conjunto com os operadores 
relacionais para formar uma sentença lógica maior, de forma a juntar duas ou mais 
sentenças relacionais. 
Tabela 3 – Operações lógicas 
Símbolo Operação 
&& E (AND) 
|| OU (OR) 
! NÃO (NOT) 
 
 
 
8 
O uso destes operadores é para unir duas sentenças lógicas, por exemplo: 
Exemplo 1: 
(N<=10) && (N>=5) 
A expressão apresentada tem duas sentenças relacionais. A primeira indica 
que todos os valores menores ou iguais a 10 são considerados verdadeiros, isto 
é: 10, 9, 8, ..., 0, -1, -2, ..., -∞. Então, é o conjunto definido na matemática como 
[10, -∞). Por outro lado, temos a outra expressão, N>=5, na qual todos os valores 
possíveis são valores que contêm o 5 e valores superiores: 5, 6, 7, ..., ∞. 
O operador E funciona como uma interseção entre os dois conjuntos, e 
pontos em comum serão escolhidos, no caso: 10, 9, 8, 7, 6 e 5. Logo, o E serve 
para juntar elementos em comum entre dois ou mais conjuntos. 
Exemplo 2: 
(N>10)||(N<0) 
 Temos outros dois intervalos e devemos determinar os valores possíveis. 
No caso de N>10, são todos os valores maiores que 10, sem incluir o 10: 11, 12, 
13, ..., ∞. No segundo caso, todos valores com N<0, ou seja, todos os valores 
negativos: -1, -2, -3, ..., -∞. 
O operador OU é usado como a união destes dois conjuntos, por isso 
qualquer valor que for considerado verdadeiro em qualquer uma das condições 
será considerado verdadeiro na sentença com OU. Vamos supor N com valor 12, 
como é verdadeiro na condição à esquerda, será considerado verdadeiro para 
sentença como um todo. Agora suponha N com valor de 5; não é verdadeiro em 
nenhuma das condições, por isso é considerado falso na expressão. 
Exemplo 3: 
!(N==2) 
Para a condição ser verdadeira, N tem de ser igual a 2, mas o operador 
NÃO inverte o sentido lógico. Então, supondo que N seja igual a 2, o resultado da 
expressão será falso, pois o verdadeiro da condição foi invertido pelo operador 
NÃO. Para fixar, vamos supor que N tenha o valor de 10; na condição isto é falso, 
mas, quando aplicamos o operador NÃO, a sentença fica verdadeira. 
No Scratch os operadores lógicos são usados com estes blocos: 
 
 
 
9 
Figura 7 – Operadores lógicos no Scratch 
 
No hexágono que aparece nos operadores lógicos da Figura 7, podemos 
colocar condições, como apresentado a seguir: 
Figura 8 – Operação E entre condições relacionais 
 
Este exemplo da Figura 8 é exatamente o Exemplo 1, porém em Scratch. 
A lógica destes blocos é a mesma que usada na linguagem Wiring. 
TEMA 5 – ESTRUTURA CONDICIONAL 
Quando escrevemos linhas de código, podemos pensar que algumas linhas 
podem executar se ocorrer alguma condição, ou que um trecho de código não 
seja executado em outra situação. Para exemplificar, imagine um LED e um botão. 
O LED só deverá acender se o botão for pressionado – o termo se indica que há 
uma condição que deve ocorrer, neste caso, a ação de pressionar o botão. 
O condicional mais simples é o if e sua estrutura é apresentada a seguir 
(Oliveira, 2017): 
if(condição){ 
 Comando1; 
 Comando2; 
} 
Nesta estrutura há uma condição que é formada a partir de estruturas com 
operadores aritméticos, relacionais e lógicos, de forma que o resultado seja uma 
sentença com valor lógico verdadeiro ou falso. O comando if faz a verificação da 
condição; caso seja verdadeira, os comandos de dentro das chaves serão 
executados; caso contrário, os comandos serão ignorados e o programa 
continuará normalmente. 
Exemplo 1: 
 
 
10 
botao = digitalRead(2); 
If(botao==HIGH){ 
 digitalWrite(13,HIGH); 
} 
O circuito que representa este exemplo é apresentado a seguir: 
Figura 9 – Circuito com um botão 
 
 Para o Exemplo 1, temos a variável botao que faz uma leitura digital do pino 
2, onde encontra-se um botão. Caso este esteja pressionado, a leitura digital será 
HIGH; caso contrário, a leitura será LOW. 
Se o botão estiver pressionado, a condição será verdadeira, neste caso o 
LED que está no pino 13 – na verdade o LED não está visivelmente ligado no 
circuito, mas é representado pelo L na placa. Para este exemplo, uma vez que o 
botão seja pressionado, o LED acenderá e não se apagará mais. 
Uma forma complementar do condicional é a estrutura: 
if(condição){ 
 Comando1; 
 Comando2; 
} 
else{ 
 Comando3; 
 Comando4; 
} 
Esta estrutura faz a verificação da condição; caso seja verdadeira, 
executará os comandos dentro das chaves do if (Comando1 e Comando2). Caso 
 
 
11 
a condição seja falsa, executará os comandos entre as chaves do else (Comando3 
e Comando4). Para ilustrar esta estrutura condicional vamos analisar o próximo 
exemplo: 
botao = digitalRead(2); 
If(botao==HIGH){ 
 digitalWrite(13,HIGH); 
} 
else{ 
 digitalWrite(13,LOW); 
} 
Este exemplo também tem como circuito exemplo a Figura 9, mas neste 
caso será analisado o botão no pino 2. Caso esteja pressionado, a variável botao 
estará com valor HIGH e acenderá o LED no pino 13. Caso contrário, a variável 
botao estará em LOW, fazendo com que a condição seja considerada falsa. Por 
isso será executado o comando em else, que apagará o LED no pino 13. 
O Scratch também possui a mesma estrutura condicional com os blocos: 
Figura 10 – Estrutura condicional no Scratch 
 
 
 Esta estrutura condicional funciona de forma semelhante ao apresentado 
em linguagem Wiring. A seguir um exemplo aplicado do Scratch: 
Figura 11 – Condicional no Scratch 
 
 
 
12 
 O funcionamento dos blocos da Figura 11 é semelhante ao apresentado no 
Exemplo 2. Perceba que usando o Scratch a solução é muito mais visual, mas a 
condição é semelhante à criada em Wiring. 
Há uma terceira estrutura que possui condições intermediarias, como 
mostrado a seguir: 
if(condição1){ 
 Comando1; 
 Comando2; 
} 
else if(condição2){ 
 Comando5; 
 Comando6; 
} 
else{ 
 Comando3; 
 Comando4; 
} 
 Esta estrutura suporta uma nova verificação após a primeira e seu 
funcionamento é da seguinte forma: 
 Verifica a condição do if; se for verdadeira executa os comandos do if 
(Comando1 e Comando2) e ignora o resto das condições. 
 Caso a condição anterior não seja verdadeira, verifica a condição do else 
if; se for verdadeira executa os comandos do else if (Comando5 e 
Comando6) e ignora o resto das condições. 
 Caso nenhuma condição seja verdadeira, executa os comandos em else 
(Comando3 e Comando4). 
Uma observação interessante sobre esta estrutura é a possibilidade de 
existir qualquer número de condições intermediárias, ou seja, é possível colocar 
quantos else if desejar. 
 
 
 
13 
Exemplo 3: 
Figura 12 – Estrutura condicional com condição intermediária 
 
O Exemplo 3 é código fonte do circuito apresentado a seguir: 
Figura 13 – Circuito do Exemplo 3 
 
 Neste exemplo há duas condições, se o botão no pino 2 está pressionado 
e se o botão do pino 4 está pressionado. Em ambos os casos, o mesmo LED 
acenderá, mas perceba que são condições completamente diferentes que podem 
ser atendidas para acender o mesmo LED. 
Quando nenhum dos botões estiver pressionado, será apagado o LED. Isso 
só ocorre se nenhuma condição for considerada verdadeira. 
 
 
14 
REFERÊNCIAS 
ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 
2014. 
ASCENCIO, A. F. G. Fundamentos da programação de computadores. 1. ed. 
São Paulo: Prentice Hall, 2002. 
FORBELLONE, A. L. V. Lógica de programação: a construção de algoritmos e 
estrutura de dados. 3. ed. São Paulo: Prentice Hall, 2005. 
MCROBERTS, M. Arduino básico. 1. ed. São Paulo: Novatec, 2011. 
OLIVEIRA, C. L. V. Arduino descomplicado: aprenda com projetos de eletrônica 
e programação. 1. ed. São Paulo: Érica, 2017.

Continue navegando