Funções e Comandos Básicos do Arduino

Autor: Pablo Castelo

Na aula anterior, conhecemos a IDE do Arduino e entendemos a estrutura obrigatória de todo sketch, formada pelas funções setup e loop. Agora, vamos aprender os comandos básicos que permitem, de fato, controlar os pinos do Arduino, ler informações de sensores e enviar mensagens para o computador através do Monitor Serial. Esses comandos são a base para tudo que vamos construir daqui em diante, incluindo o controle dos motores na próxima aula.

Pinos digitais e analógicos

Antes de aprender os comandos, é importante relembrar que os pinos do Arduino podem funcionar de duas formas:

Pinos digitais, que reconhecem apenas dois estados, ligado ou desligado, representados no código pelas palavras HIGH e LOW. São usados, por exemplo, para ligar um LED ou ler se um botão está pressionado.

Pinos analógicos, que conseguem reconhecer uma faixa de valores, e não apenas dois estados. São usados, por exemplo, para ler a intensidade de luz captada por um sensor infravermelho.

Cada modelo de Arduino tem uma quantidade limitada de pinos digitais e analógicos, e é justamente por isso que, no planejamento eletrônico, a quantidade de portas disponíveis na placa é um fator tão importante na escolha do microcontrolador.

pinMode

Antes de usar qualquer pino, é necessário informar ao Arduino se ele vai funcionar como entrada, ou seja, recebendo informação, como um sensor, ou como saída, ou seja, enviando informação, como um motor ou LED. Essa configuração é feita com a função pinMode, e deve ficar dentro do setup, já que só precisa ser feita uma vez.

pinMode(pino, modo);

O primeiro parâmetro é o número do pino que está sendo configurado, e o segundo é o modo, que pode ser OUTPUT, para saída, ou INPUT, para entrada.

Exemplo, configurando o pino 8 como saída: pinMode(8, OUTPUT);

digitalWrite e digitalRead

Depois de configurar um pino digital como saída, usamos a função digitalWrite para definir se ele deve ficar ligado, HIGH, ou desligado, LOW.

digitalWrite(pino, estado);

Exemplo, ligando o pino 8: digitalWrite(8, HIGH);

Já quando um pino digital está configurado como entrada, usamos a função digitalRead para verificar o estado atual dele, se está em HIGH ou em LOW. Isso é muito usado, por exemplo, para ler o estado de um botão ou de alguns tipos de sensor infravermelho que retornam apenas sinal digital.

int estadoDoPino = digitalRead(pino);

analogWrite e analogRead

Alguns pinos do Arduino, chamados de pinos PWM e identificados com o símbolo til ao lado do número, conseguem simular uma saída analógica através da função analogWrite. É justamente essa função que permite controlar a velocidade de um motor através da ponte H, e não apenas ligar ou desligar ele.

analogWrite(pino, valor);

O valor pode variar de 0, que representa desligado, até 255, que representa a potência máxima.

Exemplo, definindo metade da potência em um pino PWM: analogWrite(9, 127);

Já a função analogRead é usada para ler valores em pinos analógicos, que variam de 0 até 1023. Essa é a função mais usada para ler sensores como o infravermelho e o sensor de cor, discutidos na aula de hardware sobre sensores.

int valorDoSensor = analogRead(A0);

Repare que os pinos analógicos são identificados com a letra A antes do número, diferente dos pinos digitais.

delay

A função delay pausa a execução do programa por um determinado tempo, medido em milissegundos, sendo que 1000 milissegundos equivalem a 1 segundo.

delay(1000);

Esse comando é útil em testes simples, como o exemplo do LED piscando da aula anterior, mas deve ser usado com cuidado em um robô de competição. Como o loop fica pausado durante o delay, o robô não consegue ler seus sensores nem tomar nenhuma decisão nesse período, o que pode atrapalhar o desempenho na pista. Vamos discutir formas de contornar essa limitação nas próximas aulas.

Variáveis e tipos de dados

Variáveis são espaços reservados na memória do Arduino para guardar valores que podem mudar durante a execução do programa, como a leitura de um sensor. Para criar uma variável, é necessário informar o seu tipo, que define que tipo de valor ela pode guardar. Os tipos mais usados em projetos de robótica são:

int, usado para números inteiros, como 10 ou -5.

float, usado para números com casas decimais, como 3.14.

bool, usado para valores que só podem ser verdadeiro ou falso, representados por true e false.

Exemplo de criação de variáveis:

int leituraSensor; 

float tensaoBateria = 7.4; 

bool roboLigado = true;

Comunicação Serial

A comunicação serial permite que o Arduino troque mensagens com o computador através do cabo USB, sendo enviadas para o Monitor Serial que conhecemos na aula anterior. Essa ferramenta é extremamente importante durante o desenvolvimento do robô, pois permite verificar, em tempo real, os valores que os sensores estão lendo, sem precisar adivinhar se o código está funcionando corretamente.

Para usar a comunicação serial, o primeiro passo é iniciá-la dentro do setup, definindo a velocidade de comunicação, chamada de baud rate. O valor mais comum é 9600.

Serial.begin(9600);

Depois de iniciada, podemos enviar mensagens usando duas funções:

Serial.print, que envia a mensagem sem pular para a próxima linha.

Serial.println, que envia a mensagem e já pula para a próxima linha, o que deixa a leitura mais organizada quando várias mensagens são enviadas seguidas.

Exemplo, enviando o valor lido de um sensor para o Monitor Serial:

Ao abrir o Monitor Serial na IDE, com a placa conectada e o código rodando, é possível acompanhar em tempo real o valor lido pelo sensor, o que ajuda bastante a calibrar e entender o comportamento de cada componente do robô.

Resumo da aula

Nessa aula, aprendemos a configurar pinos com pinMode, a controlar saídas digitais e analógicas com digitalWrite e analogWrite, a ler entradas com digitalRead e analogRead, e a pausar a execução com delay. Também vimos como criar variáveis para guardar valores durante a execução do programa e como usar a comunicação serial para acompanhar, em tempo real, o que está acontecendo dentro do código.