Escolar Documentos
Profissional Documentos
Cultura Documentos
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);
}
void loop()
{
contador++;
Serial.println(contador);
if (contador == 10){
Serial.println("Chegamos em 10");
}
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
void loop()
{
contador++;
Serial.println(contador);
if (contador == 10){
Serial.println("Chegamos em 10");
} else {
Serial.println("...");
}
delay(500);
}
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
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()
{
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;
}
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()
Sintaxe:
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);
}
}
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);
}
}
A instrução goto permite a criação de labels, assim podemos realizar desvios no decorrer do
código.
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.
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
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)));
}
________________________________________________________________________________________
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:
No Tinkercad, as entradas ocorrem na parte inferir da janela de código, figura 01, digite os dados e
clique no botão “Send”.
Na IDE do Arduino, use a linha logo abaixo da indicação da COM e o botão “Enviar”, figura 02.
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.
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.