INTRODUÇÃO AO C++
Aprenda a programar em C++ com o objetivo de usar o Arduino para os seus projetos de robótica.
TERMOS INICIAIS IMPORTANTES
VARIÁVEL:
É um objeto criado pelo programador com o objetivo de guardar uma informação, neste caso na memória de um Arduino. Variáveis podem ser números ou palavras. Uma variável pode ser atualizada durante o programa, e o seu valor não precisa ser fixo.
MÓDULO:
Existem certas partes de um programa de computador que são muito extensas e são repetidas com frequência por muitos programadores em muitas aplicações. Portanto, essas partes do programa são transformadas em módulos. Assim, quando um programador precisar utilizar um recurso que necessita de muitas linhas de código e também é frequentemente usado, tudo que ele precisa fazer é chamar o módulo em seu programa. Porém é importante lembrar que o arquivo do módulo a ser usado precisa estar baixado no computador do programador.
LOOP:
Termo usado na programação quando existe a repetição de uma ação por parte do computador.
ALGORITMO:
Uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema. Podemos pensar em um algoritmo como uma receita para fazer um bolo.
SINTAXE:
Termo usado para se referir às palavras usadas no código de um programa e como são usadas.
OUTPUT:
No caso do Arduino, um pino Output é um pino de onde “sai eletricidade” e é usado para controlar dispositivos como motores, LEDs, motores servos, e etc.
INPUT:
No caso do Arduino, um pino Input é um pino por onde “entra eletricidade” e é normalmente usado para ler resultados de sensores.
ESTRUTURA:
Um código de C++ para arduino é normalmente estruturado em três partes. Podemos ver isso no exemplo abaixo:
int LED = 12;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
Acima temos um código feito para ligar e desligar um LED, conectado no pino número 12 do arduino, a cada 1 segundo. Porém o que estamos interessados são as três sessões do nosso código. Na primeira parte que está iluminada em verde é onde o programador declara todas a suas variáveis, inclui módulos, e define certos parâmetros.
Na segunda parte, iluminada em amarelo, temos uma função chamada de “void setup()” nela definimos aspectos relacionados aos pinos da placa arduino, como se um pino terá a função input ou output, e etc. Devemos levar em consideração que tudo que está nessa função é somente executado/interpretado uma vez pelo arduino.
Na terceira parte podemos ver uma função chamada “void loop()”, nessa parte do código nós escrevemos realmente todas as ações que queremos que o arduino execute como ligar e desligar o LED neste caso. Diferentemente do “void setup()” esta parte do código é repetida infinitamente até desligarmos o Arduino.
TIPOS DE VARIÁVEIS:
-
Na linguagem C++ toda vez que queremos declarar uma variável precisamos levar em consideração o tipo de variável que queremos declarar para o computador. Por exemplo:
-
Números como 1, 2, 3, -2, -3, -4, 0, e etc, são chamados de números inteiros por isso quando queremos declarar uma variável que é igual a um número inteiro usamos a seguinte sintaxe:
-
int minha_variável = -2;
-
-
Também existem números como 1.02, 4.3, -3.7, 6.00, e etc. Estes outros números são chamados na programação de floats. Para declararmos uma variável com um número float usamos esta sintaxe:
-
float minha_variável = 4.05;
-
-
Além destas duas categorias de variáveis temos uma outra categoria para palavras. O nome desta categoria é string, e para usarmos ela simplesmente usamos a sintaxe:
-
String minha_variável = “Projeto++”
-
-
Definição dos Pinos:
Dentro do void setup(), como citado antes, podemos definir a função de pinos do Arduino. Isso pode ser feito usada a sintaxe:
pinMode( 5, OUTPUT);
Observamos que dentro dos parênteses possuímos duas informações, uma referente ao pino que o programador quer definir, como 4, 5, A1, A2, A3, no outro espaço (depois da vírgula) devemos escrever se o pino será output ou input, isso pode ser feito simplesmente escrevendo as palavras OUTPUT OU INPUT.
Também vale a pena lembrar que podemos usar uma variável para substituir a numeração do pino, por exemplo:
int LED = 5;
void setup () {
pinMode(LED, OUTPUT);
}
Lembrando que isto não é necessário, mas para muitos programadores deixa o código mais organizado e melhor estruturado.
Usando Pinos Digitais
Pinos digitais são capazes de operar em dois estados HIGH e LOW, como aprendemos antes nas aulas sobre Arduino. Nós podemos programar o Arduino para mudar o estado de um pino digital ou também ler qual é o estado de um pino digital que está funcionando como input.
Para ler um mudar o estado de um pino digital output podemos usar a seguinte sintaxe:
digitalWrite( 5, HIGH);
Neste caso eu coloquei o pino digital 5 no estado HIGH (ligado). Para podermos analisar o estado de um pino input podemos usar a sintaxe:
int valor_digital = digitalRead(5);
Vemos que neste exemplo eu aloquei o estado do pino analógico a uma variável, isso irá permitir que este estado seja salvo no programa e possa ser usado no futuro.
Usando Pinos analógicos:
Pinos analógicos são capazes de ler valores além dos HIGH e LOW que os pinos digitais conseguem. O pinos analógicos conseguem ler voltagens e interpretar seu valor em um número de 0 a 1024, então se eu ligar uma bateria de 5 volts ao pino analógico o Arduino dará o valor de 1024, se desconectarmos a bateria então o valor será 0. Do mesmo jeito que os pinos analógicos podem ler estes valores eles podem reproduzir voltagens de 0 até 5 volts.
Os pinos analógicos de saída são na verdade pinos digitais que tem a função PWM, explicada na introdução ao Arduino, para utilizar-los usamos esta sintaxe:
analogWrite(3, 1024);
Os dois parâmetro desta função são o pino digital PWM e o valor de 0 a 1024 que vai designar a voltagem. Porém se quisermos usar os pinos digitais para ler valores analógicos devemos usar relamente os pinos analógicos (A0, A1, A3, A4, e etc) e usar esta sintaxe:
int valor_analogico = analogRead(A0);
Condições If e Else:
Uma das partes mais essenciais da programação são as condições que o programador cria para um computador. Por exemplo, se o botão conectado no pino digital número 5 estiver pressionado, então ligar o LED conectado no pino digital número 13. Isso é o que chamamos de uma condição “if”, palavra em inglês que significa “se”. Vemos então que a condição “if” tem um formato bem definido: se (tal coisa acontecer), então (realizar uma ação).
Além disso, também temos a condição “else”, palavra em inglês que significa “senão”. Esta condição diz ao computador o que fazer se a condição “if” não for verdadeira.
Para usarmos estas duas condições nós podemos usar a seguinte sintaxe:
if (digitalRead(botao) == HIGH) {
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
Notamos que depois de uma condição precisamos usar o sinal de chaves “{ }” depois da condição e depois da ação designada pelo programador. Além disso, precisamos colocar as sintaxes das ações em TAB, isso significa que elas estão mais na frente da sintaxe da condição.
Operadores lógicos:
Quando queremos fazer comparações entre valores em um programa, incluindo valores que estão guardados em variáveis, nós usamos operadores lógicos para realizar estas comparações. Aqui está uma lista de comparadores lógicos muito usados:
-
> (maior que)
-
< (menor que)
-
== (igual)
-
=> (igual ou maior que)
-
=< (igual ou menor que)
-
&& (e/ao mesmo tempo)
-
|| (ou)
-
! (não)
Delay:
O delay é uma função que usamos em C++ para ter um intervalo de tempo entre duas ações diferentes. Por exemplo quando queremos ligar e desligar um LED a cada um segundo tudo que temos de fazer é usar a função delay depois de dar o comando para o LED ligar e desligar, a sintaxe pode ser vista abaixo:
digitalWrite( LED, HIGH);
delay(1000);
digitalWrite( LED, LOW);
delay(1000);
Observamos que dentro dos parênteses da função existe um número neste caso 1000, este é o tempo do intervalo em milisegundos. 1000 milisegundos é igual a 1 segundo.
Monitor e gráfico serial:
Dentro do IDE do Arduino temos uma aba chamada monitor serial e gráfico serial que são muito úteis para o programador. Quando o Arduino está conectado no computador por um cabo USB nós conseguimos por meio do monitor e gráfico seriais ver na tela do computador uma informação transmitida pelo Arduino. Um exemplo de quando isto pode ser extremamente útil é se nós estivermos medindo a temperatura com um sensor conectado ao Arduino, para o programador ser capaz de ver o valor da temperatura no computador, basta ele dar um comando ao Arduino de “imprimir” os valores de temperatura no monitor serial, para isso usamos essa sintaxe:
Serial.println(); “imprimir valor”
Serial.begin(9600); “comando para iniciar comunicação com monitor serial”
Dentro dos parenteses do Serial.begin() podemos ver que está escrito o número 9600. Este número é somente um padrão de transmissão de dados entre o Arduino e o computador. Para que a comunicação funcione os números dentro do parenteses e no monitor serial devem ser os mesmos, normalmente usamos o 9600 que já está predefinido no monitor e gráfico serial.
Para acessar tal função basta entrar na aba "Tools" do IDE do Arduino e clicar na opção do monitor serial ou gráfico serial dependendo de qualquer você quiser usar.
Como usar módulos:
Para incluir um módulo em um programa precisamos incluir o nome deste módulo é a seguinte sintaxe:
#include<nome_modulo>
As sintaxes para usar funções de cada módulo variam e é necessário ler as instruções do módulo ou pesquisar na internet.
Agora vamos ver como fazer o download de um módulo na IDE do Arduino. Primeiro na página inicial do IDE devemos clicar na aba “Tools” circulada em vermelho na foto abaixo.
Depois de clicar na aba “Tools” uma tela como a da foto abaixo deve aparecer, então clicamos na aba “Manage Libraries” circulada em vermelho.
Depois disso, uma tela como a abaixo deve aparecer. Nesta tela podemos pesquisar nomes de módulos, também chamados de livrarias. Quando você achar o seu módulo clique no botão de instalar e espere, quando estiver totalmente instalado então o IDE estará pronto para usar este módulo.
Operações matemáticas:
Operações matemáticas são importantes em um programa de computador já que muitas vezes precisamos somar variáveis e fazer várias outras contas matemáticas. Existem alguns sinais especiais que podemos usar em código de C++ para realizar essas operações matemáticas. Aqui está uma lista dos mais usadas e suas sintaxes:
-
Soma: +
-
Subtração: -
-
Multiplicação: *
-
Divisão: /
Porém é muito importante lembrar que operações matemáticas somente funcionam quando um número está guardado em uma variável de número inteiro ou de float, operações matemáticas não funcionam com números guardados em variáveis string. Por exemplo:
String numero1 = 5;
String numero2 = 2;
void Setup() {
Serial.begin(9600);
Serial.println(numero1+numero2);
}
No código acima o que será mostrado no monitor serial do arduino será o número 52 ao invés da soma correta que é 7. Isso acontece porque os números foram salvos em variáveis do tipo String e não do tipo float ou int.