Variables-en-Arduino

Na lição de hoje (a terceira lição), vamos agora ver como se utilizam as variáveis em Arduino. As variáveis servem para guardar informação.

Tipos de variáveis

Os dados que guardamos nas variáveis podem ser de diferentes tipos. Vamos listar alguns deles. Para uma referência completa dos tipos de variáveis no Arduino, podes consultar esta página web.

  • char, são utilizados para armazenar caracteres e ocupam um byte.
  • byte, podem armazenar um número entre 0 e 255.
  • int, ocupam 2 bytes (16 bits) e tanto armazenam um número entre 2-15 e 215-1, ou seja, entre -32,768 e 32,767.
  • unsigned int, também ocupam 2 bytes, mas como não possuem sinal, podem tomar valores entre 0 e 216-1, ou seja, entre 0 e 65,535.
  • long, ocupa 32 bits (4 bytes), de -2,147,483,648 até 2,147,483,647.
  • unsigned long.
  • float, números decimais que ocupam 32 bits (4 bytes). Podem tomar valores entre -3.4028235E+38 e +3.4028235E+38.
  • double, também armazena números decimais, mas possuem 8-bytes (64 bit).

Sempre que escolhemos um tipo de dados, devemos escolher o menor tamanho possível para as nossas necessidades, uma vez que ocuparão espaço na memória da nossa placa e pode ocorrer que o nosso programa precise de mais memoria do que a disponível. Mas como “fazemos” variáveis no nosso código? É muito simples: indicando o tipo e o nome da variável. Podemos também atribuir (ou não) um valor inicial. Vejamos um exemplo:

 

Existe outro tipo de váriável muito importante: String (“Cadeia” em português). Serve para armazenar cadeias de texto, e é fundamental quando queremos enviar texto pela porta série. Permite criar cadeias a partir de números, outras variáveis ou concatenando cadeias. Vejamos alguns exemplos (desta página):

 

Existe ainda outro tipo de variável muito importante, chamado Array (“Conjunto” em português), que é uma conjunção ordenada de dados de um determinado tipo. De momento não vamos ver já esse tipo…vamos pouco a pouco. Vamos criar um programa de exemplo, que some dois números inteiros e mostre o resultado através da porta série:

 

Neste programa, escrevemos tudo na função setup, porque queremos que se execute apenas uma vez. Qual destas três opções achas que imprimirá pela porta série?

  1. a + b igual c
  2. 5 + 6 igual 11
  3. a + b igual 11

Vais ter que resolver o problema para confirmar se acertaste!

Âmbito das variáveis

Vamos a explicar isto através de exemplos.

Âmbito global

 

Dizemos que a variável a é global porque se pode aceder a ela a partir de qualquer parte, ou seja, acedemos ao seu valor através das funções setup e loop. O que iríamos receber através da porta série seria o seguinte: variable_global

Âmbito local

São variáveis que apenas existem dentro do âmbito em que foram declaradas. Para entendermos rapidamente, um âmbito é o que está entre parênteses. Se as utilizar-mos fora do seu âmbito, teremos um erro de compilação. Como apenas existe dentro do seu âmbito, o meu programa poderia repetir o mesmo nome da variável em âmbitos distintos. Vamos ver alguns exemplos para explicá-lo bem:

 

Ao compilar este programa iríamos obter um erro de código, porque a variável int a é de âmbito local, e só existe dentro da função setup. Por isso, não a podemos usar na função loop. O que aconteceria com este código?

 

Compila? Sim, porque a foi declarada tanto dentro do loop, como dentro do setup. O que se imprimiria no monitor da porta série?

 

De certeza que te apanhei de surpresa! Esperavas que se imprimisse 1 2 3 4 ? Sim, qualquer um esperava isso! Porque é que não aconteceu isso? Porque a variável a do loop … é criada e destruída em cada iteração, e por isso inicializa-se sempre a 0 … e adiciona-se 1… Por isso, vale sempre 1 dentro do loop. E os programas seguintes? Vamos ver  se adivinhas! Constrói-os tu mesmo para confirma o resultado.

 

Se achas que sabes, antes de programares, escreve nos comentários o que deveria sair… Vamos ver quem acerta :)