Você está na página 1de 15

AULA 2

LÓGICA E
MICROCONTROLADORES

Prof. Charles Way Hun Fung


TEMA 1 – ALGORITMO

O objetivo de desenvolver uma programação é resolver problemas, e, para


isso, devemos reeducar nossa mente para pensarmos de forma sequencial. Um
exemplo bem conhecido é uma receita de bolo; nela encontramos ingredientes e
o modo de preparo. Podemos entender que os ingredientes são os dados e o
procedimento de preparo são as ações que deveram ser feitas.
Agora vamos estender este conceito para outras ações do dia a dia, como
escovar os dentes. Parece uma tarefa muito simples, mas, começando a pensar
de forma sequencial, podemos formar uma lista de atividades:

 Pegar a escova de dente;


 Pegar a pasta de dente;
 Abrir a pasta de dente;
 Pressionar a pasta de dente;
 Colocar a pasta na escova de dente;
 Fechar a pasta de dente;
 Guardar a pasta de dente;
 Colocar a escova de dente na boca;
 Escovar os dentes;
 Tirar a escova da boca;
 Enxaguar a boca;
 Enxaguar a escova de dente;
 Guardar a escova de dente.

Esta sequência de atividades apresenta de forma resumida como é escovar


os dentes, e cada instrução foi colocada de forma lógica para resolver o problema
estabelecido. A capacidade de reduzir as etapas do programa em partes menores
e mais simples é muito importante no desenvolvimento da lógica de programação.
A partir de agora entramos no conceito de algoritmo, que, segundo Alves
(2014), é a descrição textual de uma solução para determinado problema,
podendo ser descrito como uma sequência lógica de etapas ou procedimentos
que transformam uma entrada de dados em uma saída válida.
Analisando o problema de escovar os dentes, podemos dizer que nossa
entrada de dados seria a escova e a pasta de dentes. Depois que foi executado o
algoritmo, tivemos uma saída válida, os dentes escovados.

2
Há três formas de se representar um algoritmo (Ascencio, 2002):

a. Forma narrativa – Faz uso da linguagem natural (português) para


descrever o problema passo a passo. A vantagem é que não é necessário
aprender nenhum conceito novo, pois a linguagem natural já é bem
conhecida. A desvantagem é que ela abre margem para diversas
interpretações, dificultando a resolução do problema.

b. Pseudocódigo ou Portugol – Também conhecido como português


estruturado, consiste em analisar o problema e escrever, usando regras
predefinidas, os passos a serem seguidos para resolver o problema. A
vantagem é que os algoritmos implementados podem facilmente ser
passados a uma linguagem de programação. Como desvantagem, é
preciso conhecer as regras do pseudocódigo para compreendê-lo.

c. Fluxograma – Consiste em analisar o problema e utilizar símbolos gráficos


predefinidos, como na Figura 1, apresentando a resolução do problema
passo a passo por meio do gráfico. A vantagem é que a representação
gráfica torna a resposta do sistema mais simples. A desvantagem: é
necessário conhecer os símbolos do fluxograma, e o gráfico resultante não
traz muita informação além do que está apresentado.

Figura 1 – Símbolos usados no fluxograma

Fonte: Alves, 2014.

3
 Exemplo de algoritmo – Fazer um algoritmo que mostre o resultado da
multiplicação de dois números (Alves, 2014).
 Descrição narrativa
1. Receber os dois números que serão multiplicados;
2. Multiplicar os números;
3. Mostrar o resultado obtido na multiplicação.

Figura 2 – Fluxograma do algoritmo exemplo

 Pseudocódigo (Visualg)
algoritmo "Algoritmo Exemplo"
var
N1,N2,M: Inteiro
inicio
leia(N1,N2)
M <- N1 * N2;
escreva("Multiplicação = ",M)
fimalgoritmo

Este primeiro exemplo mostra como podemos reproduzir um algoritmo. Nos


próximos temas, começaremos a entender como funciona a estrutura de um
algoritmo e a aplicar este conceito usando linguagens de programação como
Scratch e Wiring, muito usadas para escrever os códigos do Arduino.

TEMA 2 – SCRATCH

Consiste em um ambiente de aprendizagem desenvolvido pelo grupo


Lifelong Kindergarden do MIT Media Lab. A linguagem utilizada é chamada de
linguagem natural imperativa, apresentada como uma linguagem com blocos de
montagem com construções básicas de qualquer linguagem de programação:
variáveis, atribuições, condicionais, repetições, funções e comentários. Não
precisa de conhecimentos prévios de programação, por isso é ideal para quem
está começando.
O funcionamento do Scratch se baseia em juntar blocos para criar uma
sequência lógica a ser executada pelo computador. As instruções são encaixadas
4
uma a uma, formando cadeias de comandos que executam as etapas do
algoritmo. A Figura 3 apresenta um exemplo do uso do Scratch no site de
simulação Tinkercad (<www.tinkercad.com>).

Figura 3 – Exemplo de Scratch

Como podemos ver na Figura 3, a linguagem em blocos é bastante intuitiva


– desconsiderando os comentários, pois são apenas explicações colocadas pelo
programador. Este código tem apenas quatro instruções que estão nos blocos
azuis e laranjas:

1. Acender o led;
2. Esperar um segundo;
3. Apagar o led;
4. Esperar um segundo.

Em outras palavras, este código é um pisca led, porque se o led fica aceso
um segundo e apagado um segundo, o led piscou.
O objetivo deste curso será utilizar a linguagem Scratch no Arduino,
fazendo um paralelo com a linguagem Wiring (Linguagem C/C++), que veremos
no próximo tema. Para isso, começaremos a entender o seu uso para a
programação do Arduino.
Para a criação do programa, os comandos são classificados em:

 Saída: consiste em comandos que definem o funcionamento de leds, pinos,


servos-motores, alto-falantes e porta serial, indicando o que aparecerá
neste dispositivo, por exemplo, quantos graus um servo-motor irá girar.

5
 Entrada: indica que será feita a leitura de um dispositivo analógico ou
digital. Para isso é possível definir o mecanismo em que será feita a leitura,
que pode ser um sensor de ultrassom, sensor de temperatura, porta serial,
ou leitura dos graus de um servo-motor.
 Notações: comentários que o programador pode colocar no meio do
programa; não são considerados como código.
 Controlar: estruturas de controle, que podem ser usadas para diversas
situações que auxiliam o programador a resolver o problema. Entre elas:
condicionais, repetição e contagem. Estas estruturas serão abordadas em
breve com mais detalhes.
 Matemática: estruturas lógicas, relacionais e aritméticas que podem ser
usadas no código para relacionar dois valores, por exemplo, verificar se um
valor é maior que outro.
 Variáveis: declaração de variáveis que serão usadas para guardar algum
valor que será útil na execução do código.

TEMA 3 – PROGRAMAÇÃO WIRING

Neste tema serão apresentados conceitos básicos da linguagem utilizada


para programar o Arduino em seu ambiente de desenvolvimento integrado, que
pode ser baixado no site <https://www.arduino.cc/en/Main/Software>.
A IDE (ambiente integrado de desenvolvimento) pode ser instalada em
sistemas operacionais como Windows ou Linux, e possui uma interface (sketch)
como mostra a Figura 4:

6
Figura 4 – IDE do Arduino

Na Figura 4 pode-se identificar que este ambiente é dividido em três partes


(McRoberts, 2011): barra de ferramentas no topo, área de código ou sketch
window no centro e janela de mensagem na base da tela.
A barra de ferramentas consiste em um conjunto de botões com os itens:
arquivo, editar, sketch, ferramentas, ajuda. Além destes botões, há atalhos em
formato de ícones para as principais funcionalidades da ferramenta:

 Verificar: verifica se o código possui erros antes de enviar para o Arduino;


também recebe o nome de compilar.
 Carregar: possui a mesma funcionalidade do botão verificar, porém, se
tudo estiver correto, faz o carregamento na placa do Arduino.
 Novo: abre uma nova janela da IDE do Arduino, contendo apenas as
funções setup() e loop() vazias. Em outras palavras, é aberto um novo
sketch em branco.
 Abrir: mostra uma lista de sketches que podem ser abertos, todos eles
presentes no sketchbook da aplicação. Ainda dá a opção de abrir; neste
caso o usuário pode buscar no computador por um sketch presente em
algum outro lugar do computador.

7
 Salvar: grava o código do atual em arquivo; após, na parte inferior da tela
aparece a mensagem “Salvo”.

A linguagem de programação adotada é uma versão otimizada da


linguagem C/C++ adaptada para o Arduino. No decorrer da disciplina serão
apresentados os detalhes desta linguagem, porém, se tiver interesse em se
aprofundar no assunto desta linguagem de programação, recomenda-se:
Treinamento em linguagem C, de Victorine Viviane Mizrahi:
<https://bv4.digitalpages.com.br/?term=linguagem%2520c&searchpage=1&filtro=
todos&from=busca&page=_1&section=0#/legacy/2781>.
Este software possui diversos exemplos que podem ser acessados pela
barra de ferramentas em: Arquivo  Exemplos.
O código, apresentado na Figura 4, possui duas estruturas bem definidas:
as funções setup() e loop(). Estes campos são obrigatórios em todos os
programas para o Arduino.
A função setup() é executada apenas uma vez no código, por isso, é usada
para executar as configurações iniciais do programa ou qualquer comando que se
deseje executar apenas uma vez. São comandos que serão executados assim
que a placa inicializar (Oliveira, 2017).
A função loop() é executada repetidamente durante o funcionamento da
placa, e todos os comandos colocados nesta função serão executados
repetidamente. Nesta função é colocado o núcleo do código do programa, tendo
a noção que estes comandos se repetirão com uma periodicidade.
O funcionamento do código é o seguinte: a placa do Arduino inicia; executa
primeiramente a função setup(), executando configurações iniciais e comandos
apenas uma vez. Em seguida, é executada a função loop(), que se repete até o
dispositivo ser desligado, ou reiniciado. Neste caso, a função setup() será
executada novamente e em seguida voltará para a função loop().

TEMA 4 – VARIÁVEL

Quando elaboramos um programa, é necessário guardar alguns dados.


Como exemplo, temos o algoritmo que fazia uma multiplicação:

8
Figura 5 – Fluxograma do algoritmo da multiplicação

Para realizar esta operação de multiplicação, como mostrado na Figura 5,


temos de obter o valor N1 e N2, para que em seguida seja realizada a operação
de multiplicação. N1 e N2 podem possuir qualquer valor, mas, dependendo deste,
o resultado da multiplicação pode mudar.
Segundo Forbellone (2005), a definição de variável é um dado que pode
ser alterado em algum instante no decorrer do tempo. Por isso, podemos dizer
que N1 e N2 são variáveis, pois podem receber qualquer valor no decorrer do
programa.
O processo de criação de variáveis é chamado de declaração de variáveis,
e a seguir serão abordadas as formas de criação de variável usando Scratch e
Wiring. No Scratch (tinkercad), para criar uma variável, deve-se entrar em código,
e será mostrado o menu, como na Figura 6:

Figura 6 – Criar variável no Scratch (Tinkercad)

Neste menu, deve-se clicar em “Criar variável”. Aparecerá uma tela, na qual
poderá definir o nome da variável:

Figura 7 – Definindo o nome da variável

9
O nome de variáveis, segundo Alves (2014), é chamado de identificador,
mas não se limita apenas às variáveis, mas diversas outras estruturas do
algoritmo que podem ser nomeadas: constantes, funções, estrutura de dados, etc.
Assim que a variável for criada, podem ser usados os blocos de definir valor
e alterar valor, como mostrado ne Figura 8:

Figura 8 – Ações que podem ser feitas com variáveis

As variáveis têm usos diversos na programação, desde armazenar valores


para realizar uma operação até controlar a quantidade de vezes que serão
realizadas medidas de um sensor.
Na linguagem Wiring, a declaração de variável não é tão simples.
Primeiramente deve-se saber qual o tipo de dado que a variável irá armazenar,
por exemplo: número inteiro, que não tem casas decimais. Ou irá armazenar um
caractere, que pode ser qualquer caractere representado pela tabela ASCII.
Estes tipos de variáveis devem ser pensados muito bem antes de seu uso,
pois cada tipo é mais indicado para certas situações. Veja a seguir todos os tipos
suportados pelo Arduino (<https://www.arduino.cc/reference/pt/>):

Tabela 1 – Tipos de dados no Arduino

Tipo Descrição
char Caractere da tabela ASCII
double Números reais com grande precisão
float Números reais com baixa precisão
int Número inteiro
long Número inteiro com maior capacidade
short Número inteiro de menor capacidade
String Sequência de caracteres
vetor Conjunto de variáveis
void Indica não retorno em funções
word Número sem sinal de 16 bits

10
Os tipos mais comuns usados em projetos são: char, int, float e String.
A declaração de variáveis normalmente ocorre antes da função setup():

Figura 9 – Declaração de variável na linguagem Wiring

Na Figura 9, a variável teste foi declarada na linha 1. O formato para fazer


esta declaração é:

<Tipo da variável> <nome da variável> = <valor inicial>;

Primeiro deve-se escrever qual o tipo da variável, em seguida o nome que


deve ser atribuído a ela. Em seguida, é opcional o operador de atribuição igual (=)
e um valor inicial, sendo finalizado com um ponto e vírgula.
A seguir alguns exemplos de declarações de variáveis:

int x;
float numero = 10;
String nome = “José”;
char letra;

Perceba que nos exemplos apresentados alguns receberam valor inicial e


outros não receberam, isso porque atribuir um valor inicial não é obrigatório. Outro
fato é que na linguagem C, de onde a linguagem Wiring surgiu, um caractere é
representado por uma letra entre aspas simples: ‘A’, ‘c’, ‘1’. São respectivamente
os caracteres A maiúsculo, c minúsculo e o caractere do número um. As palavras
e frases são atribuídas às variáveis tipo String, e o formato deste tipo de dado é
entre aspas duplas: “teste”, “ola mundo”.

11
TEMA 5 – EXEMPLO

Para ilustrar o uso de algoritmos com a programação em Scratch e fazendo


um paralelo com a linguagem Wiring, acompanhe o problema a seguir:

Figura 10 – Exemplo de aplicação do Arduino

O problema apresentado na Figura 10, indica que um botão está conectado


ao pino digital 2 do Arduino. Quando o botão for pressionado o led L, irá acender
na placa. Caso contrário ficará apagado.
Antes de continuarmos, vamos entender como o botão funciona, veja que
no circuito o lado esquerdo do botão está conectado ao pino 2, também conectado
a um resistor e ao GND (terra). Este circuito indica que o pino 2 do Arduino está
ligado ao terra, em outras palavras em nível lógico zero ou LOW. Quando o botão
for pressionado, o pino 2 do Arduino é ligado diretamente a 5V, ou nível lógico alto
ou HIGH. Agora devemos desenvolver um algoritmo para fazer esta aplicação
funcionar adequadamente.
Para resolver este problema vamos apresentar a forma narrativa do
algoritmo em tópicos, em seguida o fluxograma, para então mostrar a solução
usando as linguagens Scratch e Wiring.

a. Forma narrativa:
1. Definir o pino 2 como entrada.
2. Definir o pino 13 como saída.
3. Fazer uma leitura do pino 2 e colocar o resultado em buttonState.
4. Verificar se buttonState está em HIGH.
5. Se sim, acender o led no pino 13, deixando-o em HIGH.
6. Se não, apagar o led no pino 13, deixando-o em LOW.
7. Esperar 10 ms.
8. Repetir todos os passos a partir do passo 3.
12
Figura 11 – Fluxograma da resolução do exercício

Perceba que criamos uma variável para receber as leituras digitais do pino
2, chamada buttonState, leitura que será realizada a cada 10 ms. Dependendo do
valor da leitura, o led irá acender ou apagar.

b. Programa em Scratch

Figura 12 – Resolução em linguagem Scratch

13
c. Programa em Wiring

Figura 13 – Resolução em linguagem Wiring

Apresentando todas as quatro formas de resolução, podemos perceber que


as linguagens de programação são diretas e, em poucas linhas, apresentam
muitos detalhes. Em breve abordaremos as diversas características das
linguagens, sempre fazendo um paralelo entre a linguagem Scratch e Wiring.

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.

15

Você também pode gostar