Escolar Documentos
Profissional Documentos
Cultura Documentos
IDE: generalidades
Exemplos
Botões superiores
Sketchbooks
Indo a Arquivo > Sketchbook > ..., vê-se a lista dos algoritmos
mais recentes salvos pelo usuário em pasta padrão do Arduino, a
saber: C:\Documentos\Arduino.
Monitor serial
Variáveis inteiras
int variável = valor
Declara-se uma variável com um valor numeral inteiro como acima.
O símbolo “=” é usado para atribuir valores a qualquer variável.
Aritmética
+ Adição
- Subtração
* Multiplicação
/ Divisão
Os operadores seguem as mesmas convenções de hierarquia da
matemática usual.
Comparadores
< Menor que
> Maior que
<= Menor ou igual a
>= Maior ou igual a
== Igual a/equivalente a
!= Diferente de
Operadores usados em expressões lógicas, ou seja, que retornam
TRUE ou FALSE apenas.
Laço for
for (int contador = valor inicial; condição; incremento){
bloco de instruções;
}
Ex: for(int i = 1 ; i<20 ; i++){
Serial.println(i);
}
O laço de repetição é utilizado para fazer tarefas repetitivas e
para diminuir o tamanho do código, porém é lento quanto ao
processamento; por isso, prefere-se usar uma condição if dentro
da função void loop(), como abaixo.
Faça até
void loop(){
bloco de instruções;
if (condição){
bloco de instruções;
}
}
Laço While
while (condição){
bloco de instruções;
incremento;
}
O laço while, como acima, pode substituir o laço for.
Constantes
const int variável = valor //constante inteira, nesse caso
A fim de se declarar valores constantes a variáveis, faz-se como
acima; o que é bom hábito e economiza memória.
Funções
Função sem parâmetro
void função(){
bloco de instruções;
}
A sintaxe de uma função sem parâmetro é como acima e para chama-
la basta digitar: função().
Variáveis estáticas
static int variável = valor // nesse caso, inteira
Uma variável estática é aquela que, dentro de uma função, tem
seu valor inicializado apenas uma vez. Assim, caso esteja em um
laço de repetição, a sua primeira atribuição (static) será
ignorada a cada nova iteração.
Tipos de variáveis
- int: variáveis inteiras (2 bytes);
- float: variáveis de ponto flutuante (4 bytes);
- char: caractere (1 byte);
- boolean: variáveis lógicas (TRUE ou FALSE);
- long: números muito grandes;
- unsigned int: de 0 a 65535.
Operadores lógicos
&& AND
|| OR
! NOT
Arrays
int matriz[] = {valor1 , valor2 , ...} //uma matriz-linha de
int’s
A declaração de uma matriz é como acima. Neste caso, uma matriz-
linha de inteiros.
matriz [índice] //acessar o valor de uma matriz
Para acessar o valor contido na matriz-linha, basta adicionar o
índice do elemento entre os colchetes.
*As matrizes começam sempre com o índice 0.
Char
São variáveis do tipo char que representam letras do alfabeto e
caracteres especiais, de acordo com a ASCII.
Cada caractere apresenta um valor na tabela ASCII, como acima.
*Toda variável char termina com um caractere especial: “\0”.
Definindo Caracteres
char string[] = “valorNome” //define uma string
char *string = “valorNome” //também define uma string
Para definir uma variável string, basta fazer como acima; e seu
valor sempre vai entre aspas duplas.
Matriz de char
char* matriz[] = {“valorNome1” , “valorNome2”, ...}
Como acima pode-se definir uma matriz com várias strings
literais em seu interior.
Serial.begin(taxa) //inicia o buffer do Serial a uma taxa
dada
Inicia a porta serial a uma dada taxa (geralmente 9600),
habilitando seu uso pela placa.
Serial.avaible() //verifica se há dados no buffer
É uma função que retorna o valor de bytes de informação
presentes no buffer.
Deve-se chamá-la a fim de se verificar o que há de entrada vinda
do Serial e para um posterior uso dessas informações.
Serial.read() //lê os dados do buffer do Serial
Lê o que está no buffer, isto é, as entradas do usuário pelo
Serial.
Operações com Caracteres
Uma vez que a cada char corresponde um valor (número) bem
definido no código ASCII, pode-se utilizá-las como índices, ou
números que são; cabendo-lhes as operações aritméticas usuais e
os comparativos lógicos.
Ex1:
if (char>=”a” && char<=”z”){ //compara o valor de char e “a”
bloco de comandos; //no caso, 97<=char<=114
(minúsculas)
}
Ex2:
letras [char – “a”]; // é o mesmo que char – 97 (valor de
“a”)
INPUT e OUTPUT
Saída digital
pinMode (int Pin , OUTPUT/INPUT/INPUT_PULLUP) //configura o
pino para I/O
Na função setup(), deve-se configurar o pino como feito acima.
digitalWrite (int outPin , HIGH/LOW) //configura o pino para 1/0
A fim de configurar a saída (alta ou baixa) do pino, deve-se
usar a função como acima.
*Pode-se ainda usar pinos analógicos como saída digital, porém a
notação a ser usada deve ser a seguinte: “A0”, por exemplo, como
primeiro argumento da função.
Entrada digital
digitalRead (inputPin) //faz a leitura do pino digital
escolhido
Para ler a entrada fornecida a um pino digital, usa-se a função
acima; podendo o valor ser alto (>2.5 V) ou baixo (<=2.5 V).
Retorna HIGH ou LOW.
Resistor Pull-up
Funções matemáticas
abs (a) Valor absoluto de a
constrain (x , a , b) Retorna a se x<a, x se a<x<b e b se
b<x
map (x , a , b , A , B) Retorna valores de x de acordo com a
proporção: a:A::b:B
max (a , b) Retorna o maior entre a e b
min (a , b) Retorna o menor entre a e b
pow (a , b) Mesmo que a^b
sqrt (a) Raiz quadrada de a
sin , cos , tan (a) Funções trigonométricas
log (a) Mesmo que ln (a)
Manipulação de Bit’s
int x = 0x<valor_hexadecimal> //cria um valor
hexadecimal
int x = 0b<valor_binario> //cria um valor binário para
x
Para declarar valores hexadecimais e binários, usa-se,
respectivamente, os seguintes prefixos: 0x... e 0b... .
bitRead
bitRead (int índice) //retorna o bit indicado pelo
índice
Começando do bit menos significativo, vai o índice até o último.
bitWrite
bitWrite (int número , int índice , int bitTroca)
Altera o valor do bit indicado pelo índice (segundo argumento)
do número binário em questão (primeiro argumento) pelo bit
indicado no último argumento.
Tons
tone (int pino , int frequencia , int duracao)
Gera uma onda quadrada de acordo com os parâmetros acima como
saída.
Caso o terceiro argumento não seja definido, a onda é produzida
ininterruptamente, sendo necessário usar a seguinte função para
pará-la:
noTone(int pino)
Interrupts
attachInterrupt(0/1 , funcaoInterrupt , FALLING/RISING/CHANGE)
Interrompe o funcionamento do programa atual mediante entrada no
pino digital D2 (primeiro argumento 0) ou D3 (primeiro argumento
1) e faz executar outra função (segundo argumento), podendo
funcionar em três modos distintos: FALLING, RISING e CHANGE.
O modo CHANGE faz a interrupção tanto no FALLING quanto no
RISING.
noInterrupts() //desabilita qualquer interrupt
escrito
interrupts() //reativa todos os interrupts
Armazenamento de dados
Constantes
const char* variável //constante
char
É uma forma de armazenar dados na memória RAM de maneira que não
sejam alterados ao longo do programa.
AVR EEPROM
#include <avr/eeprom.h> //Inclui a biblioteca no
programa
Essa biblioteca facilita a utilização da memória EEPROM, devido
a duas funções, principalmente:
eeprom_write_block(&var1 , endereço , numBytes)
eeprom_read_block(&var2 , endereço , numBytes)
A primeira salva na memória EEPROM o valor de var1, de acordo
com referência à sua posição na RAM (&), no endereço (0 a 1023)
especificado; a segunda função lê o valor no endereço dado e o
salva em var2, levando em conta o seu tamanho em bytes
(numBytes).
* while(!Serial.avaible()){};
* A expressão acima para o loop infinito até que o Serial seja
conectado, momento em que a condicional torna-se falsa.
Serial.readBytesUntil(char , buffer , tamanho)
A função acima retorna um inteiro cujo valor é o número de
caracteres lidos até o caractere char (primeiro parâmetro) dado.
Além disso, os caracteres lidos no buffer do serial (de acordo
com os outros dois parâmetros dados) são salvos no parâmetro
buffer, que é uma variável global a esta função.