Você está na página 1de 15

________________________________________________________________________________________

Administração Central
Cetec Capacitações

1. Estrutura de Decisão

1.1. If (condicional)

Neste exemplo, não utilizou-se as chaves como limitadores de comandos, portanto, somente a
instrução Serial.println() será executada dentro da condição do if().

int contador = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
contador++;
Serial.println(contador);
if (contador == 10)
Serial.println("Chegamos em 10");
delay(500);
}

Com o uso das chaves como limitadores.

void loop()
{
contador++;
Serial.println(contador);
if (contador == 10){
Serial.println("Chegamos em 10");
}
delay(500);
}

Organização linear também é permitida.

if (contador == 10) Serial.println("Chegamos em 10");


ou
if (contador == 10) { Serial.println("Chegamos em 10"); }

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~1~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

1.2. Utilizando o If ... Else

void loop()
{
contador++;
Serial.println(contador);
if (contador == 10){
Serial.println("Chegamos em 10");
} else {
Serial.println("...");
}
delay(500);
}

Primeiro exemplo do semáforo, mas sem os LEDs.

int cor = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
// meu primeiro semáforo sem LED
cor++;
if(cor==1){
Serial.println("Verde");
}
if(cor==2){
Serial.println("Amarelo");
}
if(cor==3){
Serial.println("Vermelho");
cor = 0;
}
delay(1000);
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~2~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

Ficou curioso de como ligar o LED caso nunca usou o Arduino, pense nisso !!!!

int cor = 0;

void setup()
{
Serial.begin(9600);
// ativa sinal para o led verde
// ativa sinal para o led amarelo
// ativa sinal para o led vermelho
}

void loop()
{
// meu primeiro semáforo sem LED
cor++;
if(cor==1){
Serial.println("Verde");
// desliga led vermelho
// liga led verde
}
if(cor==2){
Serial.println("Amarelo");
// desliga led verde
// liga led amarelo
}
if(cor==3){
Serial.println("Vermelho");
cor = 0;
// desliga led amarelo
// liga led vermelho
}
delay(1000);
}

Como alternativa para realizar testes no Arduino é o comando switch(). Vamos utilizar o mesmo
exemplo da função if() utilizado anteriormente para comparação entre os dois comandos.

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~3~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

int cor = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
// meu primeiro semáforo sem LED
cor++;
switch(cor){
case 1:
Serial.println("Verde");
break;

case 2:
Serial.println("Amarelo");
break;

case 3:
Serial.println("Vermelho");
cor = 0;
break;
}
delay(1000);
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~4~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

1. Comando de Repetição

Antes de iniciarmos os comandos de repetição, é importante relembrarmos de que a função loop()


da estrutura básica do código, permanece em execução durante o período em que o código está
sendo executado no Arduino (ligado). Então cuidado para gerar repetições de repetições
desnecessárias.

1.1. while()

Os loops da instrução while() deverão rodar, até que a expressão torne-se falsa.

Sintaxe:

while(expressão){
// instrução(s)
}

Exemplo 01: Neste exemplo a expressão de controle é “contador <= 10”, como está dentro da
função loop(), teremos duas repetições. Após o loop interno (while), será executado uma nova
repetição pela função loop().

int contador = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Iniciando a contagem While");
while(contador <= 10){
Serial.println("Contador:"+String(contador));
contador++;
delay(500);
}
contador = 1;
delay(500);
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~1~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

Exemplo 02: Para visualizarmos de forma mais dinâmica o controle do loop, analise o código e
observe o resultado das variáveis cont_loop e cont_while.

int cont_while = 1;
int cont_loop = 1;
void setup()
{
Serial.begin(9600);
}
void loop()
{

Serial.println("Contador loop(): "+String(cont_loop));


while(cont_while <= 10){
Serial.println("Contador while: "+String(cont_while));
cont_while++;
delay(500);
}
cont_loop++;
cont_while = 1;
delay(500);
}

Exemplo 03: Caso tenha a necessidade de realizar alguma interrupção durante o loop do while(),
poderá utilizar a instrução “break”.

int controle = 1;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Contando:");
while(true){
Serial.println(String(controle));
controle++;

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~2~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

if(controle >10){break;}
delay(500);
}
controle = 0;
}

1.2. Do ... while()

Similar ao comando while(), mas executa o teste no final da estrutura.

Sintaxe:

do {
// instrução(s)
} while(expressão){

Exemplo 04: Neste caso, o teste condicional será realizado após a execução das instruções dentro
do loop, isso garante a execução no mínimo de uma vez o código. Este exemplo é adaptação do
exemplo 01.

int contador = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Iniciando a contagem While");
do {
Serial.println("Contador:"+String(contador));
contador++;
delay(500);
} while(contador <= 10);
contador = 1;
delay(500);
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~3~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

1.2. For()

Os loops do for(), irão rodar conforme os parâmetros de inicialização, expressão e incremento.

Sintaxe:

for (inicialização; expressão; incremento) {


//// instrução(s);
}

Exemplo 05: A proposta é realizar a impressão dos números 1 até 10.

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Iniciando a contagem For()");
for(int x=1; x<=10;x++){
Serial.println("Contador:"+String(x));
delay(500);
}
}

Exemplo 06: Contando de forma decrescente os números 10 até 1.

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("Iniciando a contagem For()");
for(int x=10; x>=1;x--){
Serial.println("Contador:"+String(x));
delay(500);
}
}
________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~4~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

Exemplo 07: Fazendo um LED piscar 10 vezes usando o while(), mas sem o LED! A cada
acionamento do Led existe um delay() para ajustar o tempo de visualização com o usuário.

int pisca = 1;
void setup()
{
Serial.begin(9600);
// ativa sinal para o led
}
void loop()
{
while(pisca <=10){
Serial.println("Pisca:"+String(pisca));
pisca++;
// liga led
delay(500);
// desliga led
delay(500);
}
Serial.println("Fim do Pisca, mas ainda estamos em loop.");
}

Exemplo 07: O mesmo exemplo usando for(). Observe que a variável pisca não fui inicializada, pois
temos uma variável global já definida.

int pisca = 1;
void setup()
{
Serial.begin(9600);
// ativa sinal para o led
}
void loop()
{
for(pisca; pisca <=10; pisca++){
Serial.println("Pisca:"+String(pisca));
// liga led
delay(500);
// desliga led
delay(500);

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~5~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

}
Serial.println("Fim do Pisca, mas ainda estamos em loop.");
}

1.2. Continue

Podemos utilizar a instrução continue para interromper o fluxo do loop e realizar a próxima
interação, podendo ser aplicado nos comandos de repetição (for, while ou do..while), realizando a
verificação da expressão (condicional).

Exemplo 08: Durante a impressão do loop, uma faixa será ignorada (41 ...59).

void setup()
{
Serial.begin(9600);
}
void loop()
{
for(int contador=0; contador <=100; contador++){
if(contador >40 && contador <60){
Serial.println("Pulando uma faixa");
continue;
}
Serial.println(contador);
delay(5);
}
}

1.3. Instrução Goto

A instrução goto permite a criação de labels, assim podemos realizar desvios no decorrer do
código.

Exemplo 09: Contando de 1..100, usando o goto.

int contador = 1;

void setup()

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~6~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

{
Serial.begin(9600);
}
void loop()
{
contar:
Serial.println(contador);
delay(50);
contador++;
if (contador==100) goto fim;
goto contar;
fim:
Serial.println("Fim");
contador = 0;
goto contar;
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~7~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

1. Funções

Representa um bloco de código que realiza uma série de comandos, podendo ou não receber
parâmetros.

Declaração de uma função:

tipo função ([parâmetros])


{
// Linhas de código pertencentes à função função
}

Exemplo 01: Chamando uma função (texto) para impressão de uma mensagem.

void setup()
{
Serial.begin(9600);
}
void loop()
{
texto();
//chamada da função texto
}
void texto(){
Serial.println("Executando");
}

Utilizamos o void para identificar que a função não retorna nenhum valor.

Exemplo 02: Chamando uma função (numero), com passagem de parâmetro. Observe a definição
das variáveis locais x e y, responsáveis por receber os valores 10 e 20 da chamada.

void setup()
{
Serial.begin(9600);
}
void loop()
{
numero(10,20);
}
________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~1~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

void numero(int x, int y){


int resp = x + y;
Serial.println(String(resp));
}

Exemplo 03: Retornando valores de uma função, observe que a função não é mais identificada
como void, pois temos que indicar qual o tipo de dados estará retornando, neste caso um número
inteiro (int).

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(String(numero(10,20)));
}

int numero(int x, int y){


int resp = x + y;
return resp;
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~2~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

1. Recebendo dados

Podemos enviar dados via Serial Monitor ao Arduino (ou aplicação), desta forma, podemos realizar
interações com o código sem utilizar componentes eletrônicos neste primeiro momento.

Principais funções:

• Serial.available() – Verifica se ocorreu alguma entrada, retorna a quantidades de bytes


disponíveis para leitura no buffer de leitura. A quantidade máxima de bytes no buffer é 64.

• Serial.read() – faz a leitura dos dados apontado no buffer.

No Tinkercad, as entradas ocorrem na parte inferir da janela de código, figura 01, digite os dados e
clique no botão “Send”.

Figura 01 – Entrada Via Tinkercad

Na IDE do Arduino, use a linha logo abaixo da indicação da COM e o botão “Enviar”, figura 02.

Figura 02 – Entrada Via IDE Arduino

Exemplo 01: Neste exemplo vamos realizar a entrada de qualquer valor via teclado.

byte caracter;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available())
{
caracter = Serial.read();
Serial.write(caracter);
}
}

________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~1~
________________________________________________________________________________________

Administração Central
Cetec Capacitações

Os dados inseridos via Serial são devolvidos na outra janela. Para limpar a janela de saída, utilize
os botões “Clear” no Tinkercad e “Deleta a Saída” no IDE do Arduino.

Outra novidade nesse código é o uso do Serial.write(), que escreve byte na saída serial, se alterar
o código do exemplo 01 para Serial.print(), a saída será o código correspondente da tabela ASCII.

Entrada Serial.write() Serial.print()


A A 65
Oi Oi 79105
3 3 51

Exemplo 02: Os dados lidos via serial serão testados entre 03 opções, observe que o teste não
refere-se aos valores 1, 2 ou 3, mas sim ao código ASCII dos números (49, 50 e 51).

int op;
void setup() {
Serial.begin(9600);
Serial.println("Digite: 1, 2 ou 3.");
}
void loop() {
if (Serial.available())
{
op = Serial.read();
if(op==49){ Serial.println("LED Um");}
else if (op==50) { Serial.println("LED Dois");}
else if (op==51) { Serial.println("LED Três"); }
}
}

Tente digitar várias vezes o mesmo número, como por exemplo o número 112233, conforme a
figura 03. O teste é executado várias vezes, isso porque os valores do buffer são tratados
individualmente.

Figura 03 – Testando a leitura do buffer


________________________________________________________________________________________
www.centropaulasouza.sp.gov.br
Rua dos Andradas, 140 • Santa Ifigênia • 01208-000 • São Paulo • SP • Tel.: (11) 3324.3300
~2~

Você também pode gostar