Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
Este pequeno manual destina-se apenas a ser utilizado como uma lista, de acesso rpido, de
algumas das instrues mais utilizadas na programao da placa Arduino. Assim, deve
considerar-se apenas como uma pequena introduo programao da placa. Para aqueles
que pretendem explorar todos os recursos da Arduino recomenda-se outros manuais que
podem ser encontrados com grande facilidade na Internet.
A Placa Arduno
Para melhor compreender o mtodo de programao da placa Arduino deve comear-se por
entender como ele interage com o exterior. Deste modo, o primeiro passo deve consistir em
conhecer as suas portas, ou pinos, e quais as suas caratersticas.
A seguinte figura ilustra os componentes mais importantes para a compreenso dos mtodos
de programao para a entrada e sada de dados.
/*
* Ol Mundo!
*
* isto o ol Mundo para Arduino.
* a mensagem ser apresentada no ecr do computador
*/
void setup()
// executado uma vez. Quando o programa inicia
{
Serial.begin(9600);
// define a velocidade da porta 9600 bps
}
void loop()
// repete infinitamente
{
Serial.println("Ol Mundo!"); // escreve a mensagem e salta linha
delay(1000);
}
A Funo setup()
Consiste na primeira funo a ser executada num programa Arduino e chamada apenas uma
vez. Este bloco essencialmente dedicado a iniciar os pinos digitais e analgicos, e tambm a
porta serie.
A funo loop()
Define o corpo principal do programa. Assim, todas as instrues que interagem com os pinos,
ciclos, operaes matemticas, entre outras, so colocadas no interior desta funo. Isto no
faz regra, se se optar por criar subfunes para melhor modular o programa. No entanto, a
chamada a essas subfunes deve constar dentro desta funo principal.
Tal como o seu nome indica, todas as instrues contidas nesta funo so repetidas de forma
cclica.
Smbolos
{ } Chavetas: contm as instrues que a funo deve executar
; - Ponto e vrgula: define o fim de uma instruo
// - Duas barras: comentrio de linha
/* */ - Barra e asterisco: comentrio com vrias linhas
Constantes
So valores predefinidos que nunca podem ser alterados.
Existem 3 tipos de constantes:
TRUE/FALSE constantes booleanas
HIGH/LOW define a tenso dos pinos digitais (high 5 volts; low 0 volts)
INPUT/OUTPUT constantes definidas pela funo pinMode():
input para entrada no pino e output para sada do pino
Exemplos:
pinMode (10,OUTPUT);
digitalWrite(13, HIGH);
Variveis
Variveis Globais So variveis que que podem ser usadas em qualquer funo do programa
Qualquer varivel tem de ser declarada antes de ser chamada. Por isso, a sua definio
efetuada antes do bloco setup().
A declarao consiste em definir um tipo e um nome varivel.
Tipos de Variveis
byte 8 bits (0-255)
int nmero inteiro at 16 bits
long nmero inteiro at 32 bits
float nmero real at 32 bits
boolean valor lgico que pode assumir dois estados: true ou false
char- apenas armazena um nico carcter. Guarda o valor decimal correspondente a um
determinado carter na tabela ASCII.
Exemplos:
char exemplo = A;
Matrizes
Chama-se matriz, ou array, a um conjunto de variveis do mesmo tipo. Um valor est
armazenado num determinado espao de memria que representado por um identificador
denominado de ndice. O primeiro elemento de uma matriz tem o ndice 0.
Sintaxe:
Tipo_de_varivel nome_variavel[ndice] = valor;
Declarao de uma matriz:
Int vetor[] = {16,17,10,45};
Declarao de uma matriz (outra forma):
Int vetor [3];
Escrever numa matriz:
Vetor [3] = 12; //guarda na 4 posio o valor 12
Ler de uma matriz
Int x =vetor[4];
Operadores
Aritmticos
+
*
/
Adio
Subtrao
Multiplicao
Diviso
&&
||
!
E (and)
Ou (or)
No (not)
==
!=
<
>
<=
>=
Igual
Diferente
Menor
Maior
Menor ou igual
Maior ou igual
x++
x-x+=y
x-=y
x*=y
x/=y
x=x+1
X=x-1
x=x+y
x=x-y
x=x*y
x=x/y
Lgicos
Relacionais
Smbolos compostos
Funes de tempo
Funo
delay(ms)
delayMicroseconds(us)
millis()
Descrio
Notas
Pra
a
execuo
do
programa
por
um
determinado perodo de
1 segundo = 1000ms
tempo,
dado
em
milissegundos
Pra
a
execuo
do
programa
por
um
determinado perodo de
1 ms = 1000us
tempo,
dado
em
microssegundos
Retorna um nmero, em long valor = millis()
milissegundos, desde que o valor-varivel do tipo long
programa est em execuo que guarda o tempo desde
que o programa est em
execuo
Funes matemticas
Funo
random(min,max)
abs(x)
min(valor1, valor2)
max(valor1, valor2)
Sqrt(valor)
Descrio
Funo que permite gerar
nmeros aleatrios.
Devolve o valor absoluto de
um nmero real
Devolve o menor de dois
valores
Devolve o maior de dois
valores
Devolve a raiz quadrada de
valor
Notas
min Valor mnimo possvel
(opcional- 0)
max valor mximo possvel
Var_modulo = abs(valor)
Var_menor = min(5,3)
Var_maior = max(5,3)
Res = sqrt(valor)
Outras funes
Funo
Map(valor,min1,max1,min2,max2)
Descrio
Notas
Converte uma
faixa de valores
numa outra faixa
definida
Exemplo:
Int valor = map(analogRead(A0),0,1023,0,255);
Converte o valor analgico lido pelo pino A0, que pode oscilar entre 0 e 1023, num outro valor
balizado entre 0 e 255;
Pinos Digitais
Consistem em 14 pinos marcados com o ttulo DIGITAL e permitem a entrada e sada de
valores lgicos digitais. Estes valores podem ser representados por 0v ou 5v; verdadeiro ou
falso; I/O; HIGH/LOW. Os pinos 6 a 9 podem ser utilizados para aplicar o mecanismo PWM.
Funo
pinMode(pino,modo)
digitalRead(pino)
Descrio
Serve para definir o pino a
ser utilizado e qual o sentido
do fluxo de informao.
Esta Funo deve constar
sempre dentro da funo
Setup()
Permite ler o valor recebido
por um determinado pino e
coloc-lo numa varivel
digitalWrite(pino,modo)
Permite que um
determinado pino envie um
valor digital para o exterior
analogWrite(pino,valor)
Notas
Pino - nmero do pino a ser
utilizado;
Modo INPUT para entrada e
OUTPUT para sada
Exemplo 1:
/*
Pisca
O led acende durante um segundo, depois, apaga durante mais um segundo, repetindo
infinitamente
*/
// repete infinitamente:
void loop() {
digitalWrite(led, HIGH); // Liga o Led (HIGH corresponde a uma sada de 5 volts)
delay(1000);
// espera um segundo
// espera um segundo
Exemplo 2:
/*
Acende e apaga o led do pino 13, consoante se carrega, ou no, no boto ligado ao pino
digital 2
*/
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT); // inicia o pino do boto para input:
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
Porta Serie
Funces
Serial.begin()
Serial.end()
Serial.available()
Serial.read()
Serial.print(valor,formato)
Serial.println(valor,formato)
Descrio
Notas
Inicia a comunicao Serie e define Pode usar valores como
2400,
9600,
a velocidades de transmisso de 300,
115200,
alm
de
muitos
dados
Desativa a porta serie para que
seja possvel a utilizao dos pinos
digitais 0 e 1 para entrada e sada
de dados
Determina o nmero de bytes que
so recebidos por srie. Assim,
permite determinar se esto a ser
recebidos dados ou no
L o primeiro byte do buffer da
porta serie
Envia para a porta serie dados em
ASCII. O formato especifica o
nmero de casas decimais ou base
numrica do nmero a ser
transmitido
O mesmo que a anterior mas neste
caso salta uma linha
Exemplo
void setup() {
// inicializa a porta serie e espera pela sua abertura
Serial.begin(9600);
// imprime um titulo
Serial.println("Tabela ASCII");
}
// primeiro carter '!' corresponde ao valor 33:
int thisByte = 33;
// tambm poderia ser: int thisByte = '!';
void loop() {
Serial.print(thisByte);
// tambm se poderia fazer da seguinte forma
// Serial.print(thisByte, DEC);
Serial.print(thisByte, OCT);
Pinos analgicos
So constitudos por 6 pinos e esto denominados na placa como ANALOG IN. Estes pinos
esto numerados de 0 a 5 e podem aceitar valores entre 0 a 5 volts. Ao contrrio dos pinos
digitais, que permitem a entrada e sada de valores, os analgicos apenas permitem a receo
de valores. Para situaes em necessrio o envio de valores analgicos, a Arduino recorre a
uma funcionalidade denominada PWM. Este mecanismo consiste em utilizar algumas das
portas digitais (9, 10 e 11) para a simulao de sadas analgicas. A explicao do
funcionamento do PWM foge do contexto deste manual.
analogRead(pino)
Exemplo 1
/*
L um valor capturado pela porta analgica A0 e apresenta-o no monitor
Ligar o pino A0 ao pino central do potencimetro, um dos laterais a +5V e o outro a gnd
*/
void setup() {
// inicia a porta serie com uma velocidade de 9600 bits por segundo:
Serial.begin(9600);
}
void loop() {
// l o valor que entra na porta analgica 0 (A0)
Serial.println(sensorValue);
delay(1);
}
// pausa de 1 milessegundo
Exemplo 2
/*
Entrada analgica
Liga-se o pino analgico 0 ao pino do meio do potencimetro.
Liga-se um pino lateral do potencimetro ao pino 5v da Arduino
Liga-se o outro pino lateral do potencimetro ao pino gnd da Arduino
O potencimetro vai controlar o tempo em que o led se matem aceso ou apagado
*/
void setup() {
// declara o ledPin para OUTPUT:
pinMode(ledPin, OUTPUT);
}
void loop() {
// L o valor do sensor
sensorValue = analogRead(sensorPin);
// acende o led
digitalWrite(ledPin, HIGH);
// interrompe o processo durante o tempo definido por sensorValue
delay(sensorValue);
// apaga o Led
digitalWrite(ledPin, LOW);
// interrompe o processo durante o tempo definido por sensorValue
delay(sensorValue);
}
Deciso
If
If (expresso) {
conjunto de instrues;
}
A instruo if impe a execuo do conjunto de instrues, se a expresso for verdadeira. Caso
contrrio no executa a instruo
If else
If (expresso) {
conjunto de instrues 1;
}
else {
conjunto de instrues 2;
}
A instruo if impe a execuo do conjunto de instrues 1 , se a expresso for verdadeira.
Caso contrrio executa o conjunto de instrues 2
Switch
Switch (expresso) {
case 1: conjunto de instrues 1;
break;
case 2: conjunto de instrues 2;
break;
case 3: conjunto de instrues 3;
break;
default: conjunto de instrues 4;
}
A instruo switch um teste de deciso mltipla, que numa sequncia de instrues decide a
partir de qual comea a execuo. A execuo do conjunto de instrues n comea quando for
encontrado um valor do case coincidente com o valor da expresso.
Ciclos
While
While (expresso) {
conjunto de instrues;
}
Enquanto a expresso for verdadeira, o corpo do ciclo while executado.
do while
do {
conjunto de instrues;
}
while (expresso);
O ciclo dowhile difere da instruo while pelo facto de o conjunto de instrues ser
executado pelo menos uma vez, dado que o teste expresso s e efetuado aps a concluso
do ciclo.
for
For (varivel; expresso; incremento){
conjunto de instrues;
}
A varivel iniciada normalmente com 0 ou 1. O parmetro expresso deve conter o valor
mximo, ou mnimo, que o contador de atingir. incremento o valor a ser incrementado
varivel cada vez que o bloco de instrues executado.
Exemplo:
for (int i = 0; i <= 10; i++){
serial.println(contador);
delay(1000);
}
void setup() {
// inicia o pino do led para output:
pinMode(ledPin, OUTPUT);
// inicia a comunicao serie:
Serial.begin(9600);
}
void loop() {
// l o valor do potencimetro:
Serial.println(analogValue);
delay(1);
}
#define BUZZER 9
int notas[] = { 524, 588, 660, 699, 785, 881, 989 };
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
for (int i = 0; i < 7; i++) {
tone(BUZZER, notas[i], 1000);
delay(1000);
}
delay(1000);
}
int led1 = 9;
int led2 = 10;
char var;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
var = Serial.read();
switch (var) {
case 'a':
digitalWrite(led1, HIGH);
break;
case 'b':
digitalWrite(led2, HIGH);
break;
}
}
}