Menu

Revisão Arduino

Em 2025 trabalhamos com várias atividades utilizando o Arduino. Vamos revisar alguns conceitos.

O ambiente de programação do Arduino possui duas funções principais:

void setup() {

}


void loop() {

}

A função ‘setup‘ é utilizada para informar ao Arduino as condições de trabalho, estabelecendo, por exemplo, endereços de controle e valores iniciais. Ela é executada uma única vez, quando a alimentação é fornecida (ou, se ocorrer um ‘reset’ da plaquinha).

A função ‘loop‘, ou laço, é uma função de repetição: os comandos colocados nesta função serão executados em sequência e, após execução do último, o primeiro é executado novamente, depois o segundo… até o último, repetindo este ciclo enquanto houver energia (ou enquanto não for realizado um ‘reset‘).

 

LEDs

 

O LED são um tipo especial de diodo, que ao ser percorrido pela corrente elétrica emitem luz (  veja aqui  ).

Um primeiro contato com o Arduino é realizado por meio do controle de LEDs.

A placa do Arduino possui um LED que pode ser utilizado para experimentos iniciais. Para controlar o LED da placa, temos que:

  • declarar o local no qual o LED está ligado (qual ‘porta’) e estabelecer que será uma saída (já que não vamos receber informações do LED, e sim enviar energia para ele) – o LED da placa está ligado eletricamente na plaquinha por meio de conexão estabelecida quando a placa é fabricada, e está conectado na porta de número 13 ; não podemos mudar isso.
  • a função/ o comando a utilizar é o pinMode(local, sentido). Local é o número da porta e sentido informa se será uma entrada ou uma saída.
  • este comando é utilizado na inicialização, e, portanto, ficará na função ‘setup‘:
void setup(){

    pinMode(13, OUTPUT);

}
  • depois temos que informar se o LED estará aceso ou apagado e, se queremos que mude, deveremos explicitamente mudar. Como é muito rápido, é comum colocarmos uma espera entre um comando e outro, para podemos perceber o que está ocorrendo.
  • um comando para escrever algo do tipo ligado/ desligado (dados binários) em uma porta é o digitalWrite(porta, valor). Porta é o número que identifica o local onde o recurso de interesse está ligado e valor pode ser 0/1 ou LOW/HIGH, correspondendo a colocar a porta em conexão com GND ou com VCC, respectivamente 0Volts ou +5Volts.
  • uma forma de colocar uma espera entre a execução de um comando e outro é utilizar o delay(tempo em milissegundos).
  • poderia ficar assim:
void loop(){
    digitalWrite(13, 1);
    delay(800);
    digitalWrite(13, 0);
    delay(300);
}
  • o que ocorre é o seguinte: o Arduino envia um sinal alto (1) para a porta 13, espera 0,8 segundo (800ms), envia um sinal baixo (0) para a porta 13 e espera 0,3 segundo (300ms). Repete isto indefinidamente enquanto houver energia (ou até ser pressionado o reset, e daí reinicia o processo).
  • podemos trocar os tempos e verificar o funcionamento. Temos que lembrar que ao modificarmos algo deveremos enviar o código novamente para o Arduino (por meio do processo de compilação, que transforma o que digitamos em códigos binários que o Arduino compreende, e envio por meio do cabo USB de alimentação e comunicação).

Podemos ligar um LED externo ao Arduino e aproveitar o código já realizado:

Como o LED foi ligado na porta 13, ele piscará juntamente com o LED da placa, sem que precisemos fazer mais nada (pois o código já estava OK). Há três observações a colocar aqui: 1) no exemplo o LED usado emite cor vermelha, o seu poderá ser desta cor ou de outra cor; 2) o LED é um componente polarizado. Isto quer dizer que ele tem uma forma certa de conectar a energia positiva e negativa, há um jeito certo de fazer com que a corrente elétrica circule. Ele possui dois terminais, um maior que é o lado positivo, e um menor, que é o lado negativo (veja aqui). Ligue-os corretamente. No exemplo, o lado maior está ligado na porta do Arduino, e o menor, por meio do resistor, está ligado ao GND; 3) há um resistor ligado em série com o LED. Isto é obrigatório, para limitar a corrente do LED (sob pena de queimar sua plaquinha Arduino). No exemplo foi utilizado um resistor de 220 ohms (vermelho, vermelho, marrom), mas você pode utilizar outros valores, por exemplo: marrom, verde marrom (150 ohms); laranja, laranja, marrom (330 ohms); amarelo, violeta, marrom (470 ohms); marrom, preto, vermelho (1000 ohms, ou 1k) – estes são os mais comuns, mas existem muitos outros – veja valores clicando aqui.

Teste!

Depois, podemos ligar o LED em outra porta (neste exemplo, na 12):

Não funciona de imediato, pois embora a conexão esteja correta nosso controle está sendo executado para a porta 13 (o LED da placa continua piscando).

Vamos mudar:

void setup(){
     pinMode(12, OUTPUT); 
}

void loop(){
   digitalWrite(12, 1);
   delay(800);
   digitalWrite(12, 0);
   delay(300);
}

Agora o LED externo estará piscando. MAS, o LED da placa não pisca mais, pois modificamos o número da porta.

E se quisermos que os dois pisquem juntos novamente, mas mantendo o LED externo na porta 12? Poderia ficar assim:

void setup(){
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(12, 1);
  digitalWrite(13, 1);
  delay(800);
  digitalWrite(12, 0);
  digitalWrite(13, 1);
  delay(300);
}

E se quisermos que eles pisquem alternadamente (primeiro o externo e depois o da placa? poderia ser assim:

void setup(){
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(12, 1);
  digitalWrite(13, 0);
  delay(800);
  digitalWrite(12, 0);
  digitalWrite(13, 1);
  delay(300);
}

E se quisermos que eles pisquem alternadamente (primeiro o da placa e depois o externo? poderia ser assim:

void setup(){
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(12, 0);
  digitalWrite(13, 1);
  delay(800);
  digitalWrite(12, 1);
  digitalWrite(13, 0);
  delay(300);
}

Perceba que o que controla a sequência é sua programação. O que determina qual porta será usada é o seu projeto (você pode escolher a porta  – com exceção do LED da placa que está conectado na porta 13 por meio da construção da plaquinha).

Na sequência, podemos acrescentar mais LEDs na plaquinha externa (não esqueça dos resistores…).

Coloque 6 (seis) LEDs na plaquinha e faça um código para fazer um sinaleiro simples.

No meu exemplo usei as portas 12, 10, 8, 4, 3 e 2 – você pode usar outras, mas não esqueça de ajustar o código.

Para a programação, vamos introduzir uma novidade: vamos utilizar um uma diretiva: #define.

Isto permite que nós possamos dar ‘nomes’ para as portas, ao invés de números – a vantagem é que nomes são mais úteis ao pensamento de raciocínio do que os números de portas. Também podemos usar para outros valores, como ligado e desligado. Vamos ver:

#define LedVermelho1   12
#define LedAmarelo1   10
#define LedVerde1   8
#define LedVermelho2   4
#define LedAmarelo2   3
#define LedVerde2   2
#define desligado 0
#define ligado 1

As diretivas devem ficar antes de seu uso, no início do programa.

Desta forma, podemos usar isso no código, por exemplo:

  digitalWrite(LedVermelho1, desligado); 

  digitalWrite(LedVerde2, ligado);

Então, nosso código agora poderia ser assim:

#define LedVermelho1 12 
#define LedAmarelo1 10 
#define LedVerde1 8 
#define LedVermelho2 4 
#define LedAmarelo2 3 
#define LedVerde2 2 
#define desligado 0 
#define ligado 1

void setup() {
  pinMode(LedVermelho1, OUTPUT);
  pinMode(LedAmarelo1, OUTPUT);
  pinMode(LedVerde1, OUTPUT);
  pinMode(LedVermelho2, OUTPUT);
  pinMode(LedAmarelo2, OUTPUT);
  pinMode(LedVerde2, OUTPUT); 
}

void loop() {
  digitalWrite(LedVermelho1, ligado);
  digitalWrite(LedAmarelo1, desligado);
  digitalWrite(LedVerde1, desligado);
  digitalWrite(LedVermelho2, desligado);
  digitalWrite(LedAmarelo2, desligado);
  digitalWrite(LedVerde2, ligado);
  delay(1000);

  digitalWrite(LedVermelho1, ligado);
  digitalWrite(LedAmarelo1, desligado);
  digitalWrite(LedVerde1, desligado);
  digitalWrite(LedVermelho2, desligado);
  digitalWrite(LedAmarelo2, ligado);
  digitalWrite(LedVerde2, desligado);
  delay(1000);

  digitalWrite(LedVermelho1, desligado);
  digitalWrite(LedAmarelo1, desligado);
  digitalWrite(LedVerde1, ligado);
  digitalWrite(LedVermelho2, ligado);
  digitalWrite(LedAmarelo2, desligado);
  digitalWrite(LedVerde2, desligado);
  delay(1000);

  digitalWrite(LedVermelho1, desligado);
  digitalWrite(LedAmarelo1, ligado);
  digitalWrite(LedVerde1, desligado);
  digitalWrite(LedVermelho2, ligado);
  digitalWrite(LedAmarelo2, desligado);
  digitalWrite(LedVerde2, desligado);
  delay(1000); 
}

 

O que revisamos?

Código
– comandos
– lógica

Ligação elétrica
– pinos
– energia

Universidade Federal do Paraná
TI Aplicada – pesquisa e extensão

Av Pref Lothário Meissner, 632
80210-170 | Curitiba |
simao@ufpr.br
(41) 3360-4420
Universidade Federal do Paraná
TI Aplicada – pesquisa e extensão

Av Pref Lothário Meissner, 632
80210-170 | Curitiba |
simao@ufpr.br
(41) 3360-4420

UFPR nas Redes Sociais


UFPR nas Redes Sociais