Microprocessadores e
Microcontroladores
Programação em Arduino
Curso de Engenharia Elétrica
Universidade Paulista
© UNIP 2020 all rights reserved
Hoje (slide 2/34)
Variáveis e constantes
Operadores aritméticos
Operadores relacionais
Operadores lógicos
Estruturas de controle: Condicionais
Estruturas de controle: Laços de repetição
Exemplos
Exercícios
© UNIP 2020 all rights reserved
Arduino (slide 3/34)
Sua linguagem é C/C++
Quase Tudo que você programar em C++ deve
funcionar em Arduino
Hoje vamos olhar do ponto de vista de
programação como a linguagem se estrutura
© UNIP 2020 all rights reserved
VARIÁVEIS E CONSTANTES
© UNIP 2020 all rights reserved
Variáveis e constantes (slide 5/34)
Nossa memória pode ser reservada para armazenarmos valores que
podemos mudar ao longo da execução do programa
Essas posições podem ser reservadas diretamente pelo endereço de
memória
Ou podem ser reservadas por uma chave que correlaciona a posição da
memória com um valor melhor para que eu trabalhe
Chamamos esses itens de variáveis
© UNIP 2020 all rights reserved
Variáveis e constantes (slide 6/34)
As variáveis podem assumir diferentes tipos de dados
A tabela apresenta alguns tipos
Tipo de dado Keyword Tamanho Valores
Booleano (lógico) boolean 8 bit true/false
Inteiro Int 16 bit -32768 a 32767
Ponto flutuante (real) float 32 bit -3.4028235E38 a
3.4028235E38
Caractere char 8 bit Texto entre aspas
Inteiro sem sinal unsigned int 16 bit Sem sinal 0 a 65535
© UNIP 2020 all rights reserved
Variáveis e constantes (slide 7/34)
Constantes não pode ser alteradas ao longo do programa
Duas maneiras de programa-las
1) #define <variável> <valor>
- #define pinoA 8
- Sem ponto-e-vírgula
2) const <tipo> <valor>;
- const int pinoA = 8;
- Com ponto-e-vírgula
© UNIP 2020 all rights reserved
Variáveis e constantes (slide 8/34)
Duas maneiras de inicializar variáveis
1) na própria declaração
- int pinoA = 8;
2) Durante o código
- int pinoA;
- ...
- pinoA = 8;
Nesse caso, o sinal de igual é chamada operador atribuição
© UNIP 2020 all rights reserved
Variáveis e constantes (slide 9/34)
Casting
- Fundição, molde;
- O elenco de um filme, que “toma uma nova forma”, é a cast
É transformar um tipo de variável em outro
- int a = 1;
- b = float(a);
- float a = 1;
- b = int(a);
- char a = ‘a’;
- b = int(a);
© UNIP 2020 all rights reserved
OPERADORES ALGÉBRICOS
© UNIP 2020 all rights reserved
Operadores aritméticos (slide 11/34)
Operadores são essenciais a qualquer linguagem de
programação
Aritméticos servem para fazer contas
Ou seja, retornam números
Podem ser de dois tipos: unários e binários
- Esse binário não é o que você tem em mente
Unários: funcionam com apenas um único operando
- ++ e --
- a++; ou a--;
- ++a; ou --a;
- Teste quando: int a = 1; j = a++; Serial.println(j);
int a = 1; j = ++a; Serial.println(j);
© UNIP 2020 all rights reserved
Operadores aritméticos (slide 12/34)
Operadores binários: precisam de duas entradas de mesmo tipo
Soma: +
Subtração: -
Multiplicação: *
Resto: %
Divisão: /
- int a = 1, b = 2;
- int c, d;
- c = a+b;
- d = c*2+4*a/2+b;
Potenciação/radiciação: pow(base, expoente)
© UNIP 2020 all rights reserved
Operadores aritméticos (slide 13/34)
Se vamos atualizar um número
somando/subtraindo/multiplicando ele mesmo por uma
constante podemos usar a notação
int a = 1;
a += 2; //soma 2 no valor de a e o atualiza: a = a + 2;
a -= 2; // a = a – 2;
a *= 2; // a = a*2;
a /= 2; // a = a/2;
© UNIP 2020 all rights reserved
Operadores aritméticos (slide 14/34)
Em uma expressão, como saber qual parte será realizada
primeiro?
Isso é chamado de precedência de operadores
Na ordem, do que acontece primeiro para o que acontece por
último
1) Entre o parênteses: ()
2) *, /, %
3) +, -
4) Atribuição: =
© UNIP 2020 all rights reserved
OPERADORES RELACIONAIS
© UNIP 2020 all rights reserved
Operadores Relacionais (slide 16/34)
São binários e fazem uma verificação entre os dois itens
Ou seja, retornam se é verdadeiro (1) ou falso (0)
Maior e menor: >, <
Maior/menor ou igual: >=, <=
Igual: ==
Diferente: !=
- int a = 1, b = 2;
- Serial.println(a>b);
- Serial.println(b>=a);
© UNIP 2020 all rights reserved
OPERADORES LÓGICOS
© UNIP 2020 all rights reserved
Operadores Lógicos (slide 18/34)
Fazem uma operação lógica
Como nos circuitos digitais
Portanto, retornam se é verdadeiro (1) ou falso (0)
AND: &&
OR: ||
NOT: !
- int a = 1, b = 10;
- Serial.print(a > b || a < 5);
© UNIP 2020 all rights reserved
ESTRUTURAS DE CONTROLE:
CONDICIONAIS
© UNIP 2020 all rights reserved
Condicionais (slide 20/34)
Verifica se uma expressão lógica é verdadeira ou falsa
Se for verdadeiro, executa o bloco dentro do condicional
Se não, continua para a próxima parte do código
if (condição) {
//código caso condição seja verdadeira
}
- int a = 1, b = 2;
- if (a>b)
- {
- Serial.pritln(“a é maior que b”)
- }
© UNIP 2020 all rights reserved
Condicionais (slide 21/34)
Podemos colocar um bloco de execução de negação que
será executada caso a condição testada seja falsa
É chamado de else
- int a = 1, b = 2;
- if (a>b)
- {
- Serial.pritln(“a é maior que b”)
- }
- else
- {
- Serial.pritln(“b é maior ou igual que a”)
- }
© UNIP 2020 all rights reserved
Condicionais (slide 22/34)
Exemplo: verificar se a é o maior número entre três
- int a = 1, b = 2, c = 3;
- if (a > b)
- {
- if (a > c)
- Serial.println(“a é o maior número da lista”)
- else
- Serial.println(“a é o segundo maior número da lista”)
- }
- else
- {
- if (a > c)
- Serial.println(“a é o segundo maior número da lista”)
- else
- Serial.println(“a é o menor número da lista”)
- }
© UNIP 2020 all rights reserved
ESTRUTURAS DE CONTROLE:
LAÇOS DE REPETIÇÃO
© UNIP 2020 all rights reserved
Laços de repetição (slide 24/34)
São utilizados para evitar repetições desnecessárias de
códigos
Temos dois tipos mais comuns
for e while
O for é utilizado quando sabemos de antemão quantas
repetições eu quero
- “Para esses casos, repita”
O while é utilizado quando não sabemos quantas repetições
faremos
- “Enquanto isso for verdade, repita”
Apesar das definições, elas são praticamente intercambiáveis
© UNIP 2020 all rights reserved
Laços de repetição: for (slide 25/34)
Precisamos de uma variável de incremento que vai
contar as repetições
for (inicialização; condição; incremento)
{
// Código a repetir;
}
Inicialização: qual o valor que meu contador começa
Condição: quando isso for Falso, eu paro de repetir
Incremento: de quanto eu incremento meu contador
© UNIP 2020 all rights reserved
Laços de repetição: for (slide 26/34)
int i = 0; //costumeiramente, i vem de incremento
for(i = 0; i<5; i++)
Serial.println(“Ola mundo”);
for(i = 3; i<5; i++)
Serial.println(“Ola mundo”);
for(i = 0; i<5; i++)
Serial.print(i);
for(i = 3; i<5; i++)
Serial.print(2*i);
© UNIP 2020 all rights reserved
Laços de repetição: for (slide 27/34)
int i = 0;
for(i = 10; i>5; i--)
Serial.println(i);
Outra maneira de iniciar
for(int i = 3; i<5; i++)
Serial.println(i);
© UNIP 2020 all rights reserved
Laços de repetição: while (slide 28/34)
Um laço while vai repetir infinitamente enquanto a
condição for verdadeira
while (condição) {
// código a repetir;
}
Exemplo
int i = 1;
while (i > 0) {
Serial.println(“Olá mundo”)
}
© UNIP 2020 all rights reserved
Laços de repetição: while (slide 29/34)
Exemplos
int i = 5;
while (i > 0) {
Serial.println(“Olá mundo”);
i--;
} //parecido com for
Laço infinito
while (1) // while(true); while(1==1)
{
Serial.println(“Olá”);
}
© UNIP 2020 all rights reserved
Exemplos (slide 30/34)
1) Escreva um código que escreva na tela quatro vezes o
comando “Contador limitado” e depois, mesmo dentro do
loop do Arduino, nunca mais escreva nada na tela. Utilize um
laço while.
bool liberar_impressao = true;
int i = 0;
void loop(){
while(liberar_impressão && i < 4)
{
Serial.println(“Contador limitado”)
i++;
}
liberar_impressao = false;
}
© UNIP 2020 all rights reserved
Exemplos (slide 31/34)
2) Escreva um código capaz de encontrar o maior
valor entre 3 números inseridos pelo usuário antes
do código começar a rodar.
int v1=0, v2=13; v3 = 14;
void loop(){
max = v1;
if (max < v2)
max = v2;
if (max < v3)
max = v3;
Serial.println(max);
© UNIP 2020 all rights reserved
Exemplos (slide 32/34)
3) Escreva um código capaz de calcular a potência
de um número onde o usuário entre com a base e o
expoente. Considere o expoente sempre inteiro e
maior que 1.
int base = 2, expoente = 5;
void loop(){
float potencia = 1;
for (int i = 0; i<expoente; i++)
potencia *= base
Serial.println(potencia);
}
© UNIP 2020 all rights reserved
Exercícios propostos (slide 33/34)
1) Escreva um código em C que encontre o menor número
entre 3 números pré-definidos pelo usuário.
2) Escreva um código que tenha um inteiro n previamente
definido pelo usuário, calcule a diferença dele com 25. Se n
for menor que 25, mostre na tela o quadrado da diferença. Se
ele for maior, divida-a por 2. Mostre na dela o resultado da
condição correta. (ENTREGA)
© UNIP 2020 all rights reserved
FIM !
© UNIP 2020 all rights reserved