Upload
toninho-porpino
View
214
Download
0
Embed Size (px)
Citation preview
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
1/70
1
1
www.facebook.com/fbseletronica
.
APOSTILA ARDUINO
Com aplicaes baseada na placa:
ARDUINO UNOwww.fbseletronica.com.br
V0RV1
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
2/70
2
2
www.facebook.com/fbseletronica
Sumrio
1 Sobre a FBS Eletrnica ........................................................................................ 52 Termos de uso .................................................................................................... 53 Objetivos ........................................................................................................... 64 Introduo ......................................................................................................... 65 O que ARDUINO? ............................................................................................. 76 Plataforma de desenvolvimento ARDUINO .............................................................. 8
6.1 Hardware do ARDUINO ................................................................................... 86.2 Software do ARDUINO .................................................................................... 9
6.2.1 IDE do ARDUINO ..................................................................................... 107 Programao ..................................................................................................... 13
7.1 Estrutura de um programa ARDUINO .............................................................. 137.2 Funes ....................................................................................................... 137.3 Constantes ................................................................................................... 15
7.3.1 Definindo estados lgicos, true(verdadeiro) e false(falso) ............................. 157.3.2 Definindo Nvel lgico alto e baixo nos pinos ............................................... 157.3.3 Definindo direo de um pino digital e Pull-up ............................................. 15
7.4 Variveis ..................................................................................................... 167.5 Escopo de variveis ....................................................................................... 167.6 Qualificadores de variveis ............................................................................. 17
7.6.1 static ..................................................................................................... 177.6.2 volatile................................................................................................... 177.6.3 const ..................................................................................................... 18
7.7 Tipos de dados ............................................................................................. 187.7.1 void ....................................................................................................... 197.7.2 Boolean ................................................................................................. 197.7.3 char ...................................................................................................... 207.7.4 unsigned char ......................................................................................... 20
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
3/70
3
3
www.facebook.com/fbseletronica
7.7.5 byte ...................................................................................................... 207.7.6 int ......................................................................................................... 207.7.7 unsigned int ........................................................................................... 217.7.8 word ...................................................................................................... 217.7.9 long ....................................................................................................... 217.7.10 unsigned long ...................................................................................... 217.7.11 short ................................................................................................... 227.7.12 float .................................................................................................... 227.7.13 double ................................................................................................ 22
7.8 Vetores ....................................................................................................... 227.8.1 Criando e declarando um vetor ................................................................. 23
7.9 string (vetor do tipo char) .............................................................................. 237.10 Vetores de string ....................................................................................... 247.11 Operadores ............................................................................................... 24
7.11.1 Atribuio ............................................................................................ 257.11.2 Aritmticos .......................................................................................... 257.11.3 Operadores Relacionais ......................................................................... 267.11.4 Operadores Lgicos .............................................................................. 267.11.5 Operadores Lgicos Bit a Bit .................................................................. 27
7.12 Associao de operadores ........................................................................... 297.13 if .............................................................................................................. 307.14 switch....................................................................................................... 317.15 for ........................................................................................................... 327.16 while ........................................................................................................ 337.17 do - while ................................................................................................. 347.18 Diretivas do compilador .............................................................................. 34
7.18.1 #define ............................................................................................... 347.18.2 #include .............................................................................................. 35
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
4/70
4
4
www.facebook.com/fbseletronica
7.19 Funes do ARDUINO ................................................................................. 367.19.1 Funes de Entrada/Sada Digital ........................................................... 367.19.2 Funes de Entrada Analgica ................................................................ 387.19.3 Funes de temporizao ...................................................................... 397.19.4 Funes de bit e byte ............................................................................ 427.19.5 Funes matemticas............................................................................ 447.19.6 Funes de Converso .......................................................................... 47
8 Projetos ............................................................................................................ 508.1 Sada digital - Piscar LED ............................................................................... 508.2 Entrada Digital Lendo tecla .......................................................................... 538.3 Entrada analgica Lendo o valor em um potencimetro ................................... 598.4 Comunicao Serial ....................................................................................... 628.5 6.5. Sada PWM ............................................................................................ 68
9 REFERNCIAS ................................................................................................... 70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
5/70
5
5
www.facebook.com/fbseletronica
1SOBRE A FBSELETRNICAA FBS Eletrnica uma empresa que tem o objetivo de dar suporte para quem estcomeando na rea de eletrnica.
Acesse nossos contatos na Internet:
Blog:www.fbseletronica.wordpress.com
Loja:www.fbseletronica.com.br
Facebook:www.facebook.com/fbseletronica
2TERMOS DE USOEste material de domnio pblico podendo ser livremente distribudo.
proibida a venda deste material.
Pode ser usado livremente, s pedimos que seja citadas na referncias quando usada paracompor outros artigos.
E-mail do desenvolvedor:[email protected]
http://www.fbseletronica.wordpress.com/http://www.fbseletronica.wordpress.com/http://www.fbseletronica.wordpress.com/http://www.fbseletronica.com.br/http://www.fbseletronica.com.br/http://www.fbseletronica.com.br/http://www.facebook.com/fbseletronicahttp://www.facebook.com/fbseletronicahttp://www.facebook.com/fbseletronicamailto:[email protected]:[email protected]:[email protected]:[email protected]://www.facebook.com/fbseletronicahttp://www.fbseletronica.com.br/http://www.fbseletronica.wordpress.com/8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
6/70
6
6
www.facebook.com/fbseletronica
3OBJETIVOS
O objetivo desta apostila apresentar a plataforma ARDUINO. Ser baseada na
plataforma ARDUINO UNO onde sero abordados os conceitos bsicos de hardware e
software com exemplos prticos.
4 INTRODUOA plataforma Arduino est presente em muitos artigos na internet, porm para quem est
iniciando na programao dessa plataforma geralmente sente dificuldade de um ter um
ponto de partida. A fonte de principal de pesquisa deve ser o site do prprio Arduino, l
esto as informaes bsicas para iniciar. Um fator que bloqueia os iniciantes o fato desse
site ser em ingls. Essa apostila usa como referncia principal o site do Arduino, e o
objetivo apresentar para os iniciantes um ponto de partida para essa plataforma.
abordado a teoria bsica da plataforma, assim como a linguagem de programao e so
apresentados no captulo final alguns exemplos para colocar em prtica.
Esperamos que essa apostila colabore com a comunidade que a cada dia que passa cresce
mais.
Bons estudos!!
Caso encontrem erros (tero muitos), por gentileza nos enviem um e-mail para correo.
e-mail:[email protected]
mailto:[email protected]:[email protected]:[email protected]:[email protected]8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
7/70
7
7
www.facebook.com/fbseletronica
5OQUE ARDUINO?
ARDUINO uma plataforma flexvel open-source de hardware e software paraprototipagem eletrnica. destinada a designers, hobbistas, tcnicos, engenheiros epessoas interessadas em criar projetos ou ambientes interativos.
ARDUINO pode receber entradas de uma variedade de sensores e pode atuar oambiente ao seu redor por controladores de iluminao, motores e uma infinidade deatuadores. O microcontrolador presente na placa programado usando a linguagem deprogramao do ARDUINO (baseada em wiring) e o ambiente de desenvolvimentoARDUINO (baseada em processing). Os projetos com ARDUINO podem ser STAND-ALONE ou comunicar com um software rodando no PC. Os kits de desenvolvimentopodem ser montados pelo prprio projetista ou podem ser compradas e o software pode
ser baixado gratuitamente no site do ARDUINO. Os projetos de hardware parareferncias esto disponveis em www.arduino.cc, sob licena open-source, onde estlivre para adaptao as suas necessidades.
O ARDUINO diferente das outras plataformas presentes no mercado devido aosseguintes fatores:
um ambiente multiplataforma, podendo ser executado em Windows, Macintoshe Linux;
Tem por base um ambiente de fcil utilizao baseado em processing; Pode ser programado utilizando um cabo de comunicao USB onde geralmente
no necessria uma fonte de alimentao;
Possui hardware e software open-source, facilitando a montagem do seu prpriohardware sem precisar pagar nada aos criadores originais;
Hardware de baixo custo;
Grande comunidade ativa de usurios;
Ambiente educacional, ideal para iniciantes que desejam resultados rpidos.
http://www.arduino.cc/http://www.arduino.cc/http://www.arduino.cc/8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
8/70
8
8
www.facebook.com/fbseletronica
6PLATAFORMA DE DESENVOLVIMENTO ARDUINO
O ARDUINO como foi visto anteriormente e formado por dois componentes principais:Hardware e software. O hardware composto por uma placa de prototipagem na qual soconstrudos os projetos. O software uma IDE, que executado em um computador onde feita a programao, conhecida como sketch, na qual ser feita upload para a placa deprototipagem ARDUINO, atravs de uma comunicao serial. O sketch feito pelo projetistadir placa o que deve ser executado durante o seu funcionamento.
6.1Hardware do ARDUINO
A placa do ARDUINO um pequeno circuito microcontrolado, onde colocado todos oscomponentes necessrios para que este funcione e se comunique com o computador.Existem diversas verses de placas que so mantidas sob licena open-source. Nestaapostila ser utilizada a placa ARDUINO UNO, porm as instrues aprendidas aqui podemser aplicadas a outras placas. Em seguida apresentada a placa ARDUINO UNO:
Conforme visto na imagem acima a placa Arduino UNO possui diversos conectores queservem para interface com o mundo externo. A seguir e dada uma explicao de como cadapino da placa pode ser utilizado.
14 pinos de entra e sada digital (pinos 0-13):
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
9/70
9
9
www.facebook.com/fbseletronica
o Esses pinos podem ser utilizados como entradas ou sadas digitais deacordo com a necessidade do projeto e conforme foi definido no sketchcriado na IDE.
6 pinos de entradas analgicas (pinos 0 - 5):
o Esses pinos so dedicados a receber valores analgicos, por exemplo, atenso de um sensor. O valor a ser lido deve estar na faixa de 0 a 5 V ondesero convertidos para valores entre 0 e 1023.
6 pinos de sadas analgicas (pinos 3, 5, 6, 9, 10 e 11):
o So pinos digitais que podem ser programados para ser utilizados comosadas analgicas, utilizando modulao PWM.
A alimentao da placa pode ser feita a partir da porta USB do computador ou atravsde um adaptador AC. Para o adaptador AC recomenda-se uma tenso de 9 volts com
pino redondo de 2,1 mm e centro positivo.
6.2 Software do ARDUINO
O software para programao do ARDUINO uma IDE que permite a criao deSketches para a placa ARDUINO. A linguagem de programao modelada a partir dalinguagem processing(www.processing.org). Quando pressionado o boto upload da IDE,o cdigo escrito traduzido para a linguagem C e transmitido para o compilador avr-gcc,
que realiza a traduo dos comandos para uma linguagem que pode ser compreendida pelomicrocontrolador.
O Ciclo de programao do ARDUINO pode ser dividido da seguinte maneira:
1. Conexo da placa a uma porta USB do computador;
2. Desenvolvimento de um sketch com comando para a placa;
3. Upload do sketch para a placa, utilizando a comunicao USB.
4. Aguardar a reinicializao, aps ocorrer execuo do sketch criado.
A partir do momento que o software gravado no ARDUINO no precisa mais docomputador: o ARDUINO funciona como um computador independente e conseguirsozinho executar o sketch criado, desde que seja ligado a uma fonte de energia.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
10/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
11/70
11
11
www.facebook.com/fbseletronica
Sob a Toolbar h uma guia, ou um conjunto de guias, com o nome do arquivo dosketch. Tambm h um boto posicionado no lado direito que habilita o serial monitor. Aolongo do topo h uma barra de menus, com os itens File, Edit, Sketch, Tools e Help. Osbotes na Toolbar fornecem acesso conveniente s funes mais utilizadas dentro dessesmenus.
Abaixo so identificados os cones de atalho da IDE:
Verify
o Verifica se existe erro no cdigo digitado.
Uploado Compila o cdigo e grava na placa Arduino se corretamente conectada;
New
o Cria um novo sketch em branco.
Open
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
12/70
12
12
www.facebook.com/fbseletronica
o Abre um sketch, presente no sketchbook.
Save
o Salva o sketch ativo
Seria monitor
o Abre o monitor serial.
Os demais comandos presentes na barra de menus podem ser consultados atravs do helpdo IDE.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
13/70
13
13
www.facebook.com/fbseletronica
7PROGRAMAO
7.1Estrutura de um programa ARDUINOA estrutura bsica de um programa para ARDUINO extremamente simples e dividida emdois blocos de funes. Primeiro bloco de funo chamado de setup () e o segundo chamado de loop (). A estrutura exibida a seguir:
void setup()
{
procedimentos;
}
void loop()
{
procedimentos;
}
A funo setup() responsvel pela configurao inicial do ARDUINO e a funo loop() responsvel pela execuo das tarefas. Ambas as funes so requeridas para o corretofuncionamento do ARDUINO.
A funo setup segue logo abaixo da declarao de variveis no inicio do programa. Esta
a primeira funo a ser executada e usada para configurao dos pinos ou inicializao dacomunicao serial.
A funo loop vem em seguida e inclui os comandos que sero executados durante ofuncionamento do ARDUINO, por exemplo: leitura de entradas, acionamento de sadas, etc.Essa a funo principal do ARDUINO onde executada a maior parte dos comandos.
7.2 FunesFuno um bloco de cdigo que possui um nome e procedimentos que so
executados quando a mesma chamada. As funes setup() e loop() foram explicadosanteriormente e as demais funes do compilador sero apresentadas mais a frente nestecaptulo.
Funes customizadas podem ser escritas para simplificar em tarefas repetitivas reduzindorepeties na programao. Funes so declaradas primeiramente definindo o seu tipo,que dir qual o tipo de dado retornado pela funo. Depois de definido o tipo de retorno
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
14/70
14
14
www.facebook.com/fbseletronica
deve dar um nome a funo e definir entre parntese se algum parmetro deve ser passadopara a funo, conforme exemplo de cdigo a seguir:
tipo NomedaFuno(parametros)
{
Comandos;
}
A seguinte funo do tipo inteiro chamada delayVal() usada para atribuir um valor noprograma atravs da leitura de um potencimetro. Dentro do bloco da funoprimeiramente declarado a varivel local do tipo inteira chamada v, depois atribudo ovalor lido do potencimetro pela funo analogRead(pot) que retorna um valor entre 0 e
1023, depois este valor divido por 4 para dar um resultado final entre 0 e 255.Finalmente retornado este valor para o programa principal.
int delayVal()
{
int v; // create temporary variable 'v'
v = analogRead(pot); // read potentiometer value
v /= 4; // converts 0-1023 to 0-255
return v; // return final value
}Os seguintes smbolos so utilizados na construo de funes:
{ }as chaves so utilizadas para delimitar os blocos de funes, dentro das chaves seencontram os procedimentos da funo:
tipo funo ()
{
procedimentos;
}
; - ponto e vrgula so utilizados para marcar o final do procedimento;int x = 13; // declara a varivel 'x' como um inteiro igual a 13
//- qualquer caractere despois das duas barras ignorado pelo compilador, utilizado paracomentrios de apenas uma nica linha.
// comentrio de linha simples como no exemplo acima
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
15/70
15
15
www.facebook.com/fbseletronica
/*........*/ -qualquer texto entre esses smbolos ignorado pelo compilador, usadopara comentar varias linhas.
/* comentrio de mltiplas
Linhas geralmente utilizado
Para documentao ou para
Ignorar uma sequncia de
Cdigos*/
7.3 Constantes
A linguagem Arduino possui algumas constantes pr-definidas que auxiliam naprogramao. So divididas em grupos:
7.3.1 Definindo estados lgicos, true(verdadeiro) e false(falso)Existem duas constantes para determinar valores booleanos na linguagem ARDUINO: true efalse.
false
Define um valor falso, ou seja, o valor booleano 0.
true
Define valores verdadeiros, ou seja, o valor booleano 1.
7.3.2 Definindo Nvel lgico alto e baixo nos pinos
Quando se trabalha com pinos de entrada ou sada digital apenas dois valores sopossveis: HIGH(alto, 1, 5 Volts) e LOW(baixo, 0, 0 Volts).
7.3.3 Definindo direo de um pino digital e Pull-up
Pinos digitais podem ser usados como INPUT_PULLUP INPUT, ou OUTPUT. Mudando umpino com pinMode () muda o comportamento eltrico do pino.
Para configura um pino como entrada utiliza a constante INPUT com a funo pinMode().
Pode-se tambm colocar o pino como entrada e habilitar o resistor interno de o pull-up,dessa forma o pino passa a ser entrada e tem nvel lgico 1 quando estiver aberto. Utiliza-se a constante INPUT_PULLUP na funo pinMode().
Para configurar um pino como sada digital utiliza-se a constante OUTPUT na funopinMode().
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
16/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
17/70
17
17
www.facebook.com/fbseletronica
{for (int i=0; i
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
18/70
18
18
www.facebook.com/fbseletronica
pinMode(pin, OUTPUT);attachInterrupt(0, blink, CHANGE);
}
void loop(){
digitalWrite(pin, state);}void blink(){
state = !state;}
7.6.3 const
um qualificador que modifica o comportamento da varivel, tornando uma varivel "read-only". Isto significa que a varivel pode ser utilizada tal como qualquer outra varivel doseu tipo, mas o seu valor no pode ser alterado. Voc receber um erro do compilador sevoc tentar atribuir um valor a uma varivel const.
Constantes definidas com a palavra-chave const obedecer as regras de escopo de variveisque governam outras variveis.
Exemplo:
const float pi = 3.14;float x;
// ....
x = pi * 2; // legal usar const em expresses matemticas
pi = 7; // illegal - you can't write to (modify) a constant
Voc pode usar const ou #definepara criar constates numricas ou constantes de textos.Para vetores voc vai precisar usar const. Em geral prefervel a consta #defineparadefinir constantes.
7.7Tipos de dados
As variveis podem assumir diferentes tipos de dados, tais tipos determinaro suacapacidade e numerao que poder ser utilizada. Os tipos bsicos de dados soapresentados a seguir:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
19/70
19
19
www.facebook.com/fbseletronica
7.7.1 void
A palavra reservada void usada em declaraes de funes. Este tipo indica que a funono retorna nenhum valor quando executada.
Exemplo:// as funes setup e loop no retornam valores quando so executadas
void setup()
{
// ...
}
void loop()
{
// ...
}
7.7.2 Boolean
O tipo booleanpode representar valores booleanos, verdadeiro (true) ou falso(false). Umtipo booleanocupa um byte da memria.
Exemplo:
int LEDpin = 5; // LED no pino 5int switchPin = 13; // chave no 13
boolean running = false; //varivel booleana
void setup(){
pinMode(LEDpin, OUTPUT); //configura pino como sadapinMode(switchPin, INPUT); //configura pino como entradadigitalWrite(switchPin, HIGH); //Liga pullup do pino
}
void loop(){
if (digitalRead(switchPin) == LOW) //se pino em nvel baixo{ // switch is pressed
// pullup keeps pin high//normally
delay(100); // delay to debounce switchrunning = !running; // toggle running variabledigitalWrite(LEDpin, running) // indicate via LED
}}
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
20/70
20
20
www.facebook.com/fbseletronica
7.7.3 char
O tipo char armazena valores de 1 byte. Caracteres so codificados em um nico byte e soespecificados na tabela ASCII. O tipo char sinalizado e representa nmeros de -128 a127. Para nmeros no sinalizados usa-se o tipo byte.
Exemplo
char myChar = 'A';
char myChar = 65; // both are equivalent
7.7.4 unsigned char
unsigned char armazena valores de 1 byte no sinalizados, mesmo que utiliza o tipo byte.A faixa de valores vai de 0 a 255.
Para programao consistente no estilo Arduino o tipo byte preferido para esse tipo de
dado.
Exemplo
unsigned char myChar = 240;
7.7.5 byte
Armazena valores de 8 bits no sinalizados de 0 a 255.
Exemplo
byte b = B10010; // B10010 = 18 decimal
7.7.6 int
Inteiros so tipos primrios de armazenamento. No Arduino Uno ( e em outras placasbaseadas em ATMEGA) um int armazena valores de 16 bits(2 bytes). Esse tipo compreendevalores de -32768 a 32767. J no Arduino Due, um int armazena valores de 32 bits (4bytes) que compreende valores de -2147483648 a 2,147483647.
Exemplo:
int ledPin = 13;
Quando o valor contido na varivel excede o seu valor mximo o seu valor reiniciado parao mnimo. Exemplo
int x;
x = -32768; //atribui o valor mnimo a varivel x
x = x - 1; // x agora contm o valor mximo: 32,767
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
21/70
21
21
www.facebook.com/fbseletronica
x = 32767;
x = x + 1; // x agora contm o valor mnimo: -32,768
7.7.7
unsigned intNo Arduino UNO e em outras placas baseadas em ATMEGA armazenam valores de 16 bitsno sinalizados, ou seja, apenas valores negativos de 0 a 65535.
O Arduino DUE armazena valores de 32 bits no sinalizados, e compreende a faixa de 0 a4294967295.
Exemplo
unsigned int ledPin = 13;
7.7.8 wordO tipo armazena valores de 16 bis no sinalizados que compreendem valores de 0 a 65535.
Exemplo
word w = 10000;
7.7.9 long
O tipo de dado Long armazena valores inteiros sinalizados de 32 bits (4 bytes) quecompreendem a faixa de -2147483648 a 2147483647
Exemplo
long speedOfLight = 186000L;
7.7.10 unsigned long
O tipo unsigned long armazena valores de 32 bits(4 bytes) no sinalizados quecompreendem a faixa de 0 a 429967295.
Exemplo
unsigned long time;
void setup()
{
Serial.begin(9600);
}
void loop()
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
22/70
22
22
www.facebook.com/fbseletronica
{
Serial.print("Time: ");
time = millis();
Serial.println(time);
delay(1000);
}
7.7.11 short
O tipo short armazena valores de 16 bits (2 bytes) sinalizados.
Exemplo
short ledPin = 13;
7.7.12 float
O tipo float armazena valor em ponto flutuante, ou seja, um valor que possui casasdecimais. O tipo float armazena valores de 32 bits (4 bytes) e compreendem a faixa de -3,4028235 E+38 a 3,4028235 E+38.4.
A matemtica em ponto flutuante requer muito processamento, por exemplo, se for feitauma operao em ponto flutuante dentro de um loop, ocorrer um atraso maior, do que sefosse feita uma operao com inteiros. Deve-se ficar atento ao uso do tipo float tanto naquesto de espao de memria quanto no processamento. As funes de manipulao dotipo float requerem muito processamento,
Exemplos
float myfloat;
float sensorCalbrate = 1.117;
7.7.13 double
O tipo double tambm armazena valores de ponto flutuante, porm no Arduino Uno eoutras placas baseadas em ATMEGA esse tipo exatamente o mesmo que o tipo float, semganho de preciso, j no Arduino Due o tipo double pussui 64 bits (8 bytes) provendo maiorpreciso, seu valor mximo pode chegar a 1,7976931348623157 x 10308.
7.8VetoresUma matriz uma coleo de variveis que so acessadas por meio de um ndice. Matrizesem um programa em linguagem C, na qual o Arduino baseado, pode ser um pouco
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
23/70
23
23
www.facebook.com/fbseletronica
complicado. Mas utilizando uma matriz de linha simples, conhecida como vetores, podetornar a programao mais simples.
7.8.1 Criando e declarando um vetor
Todos os mtodos abaixo so vlidos para criar(declarar) um vetor: Pode-se declara um vetor sem inicializa-lo:
int myInts[6];
Pode-se inicializar um vetor sem determinar o tamanho, apenas inicializando com oselementos. O compilador se encarrega de determinar o tamanho conforme aquantidade de elementos:
int myPins[] = {2, 4, 8, 3, 6};
Pode-se inicializar o vetor com tamanho e com as variveis:
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
7.9string (vetor do tipo char) um conjunto de caracteres ASCII utilizado para armazenar informaes textuais (umastring pode ser utilizada para enviar dados pela serial, ou para exibir dados em um displayLCD). Uma String utiliza um byte para cada caractere e mais um caractere nulo para indicaro fim da string.
Possibilidade para declarao de strings:
Declarar um vetor de char sem inicializao:
char Str1[15];
Declarar um vetor de char com um caractere adicional que o compilador encarregarde colocar o caractere nulo:
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
Declarar um vetor de char inicializando com todos os caracteres inclusive o caracterenulo
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
Inicializar o vetor sem tamanho determinado e atribuir uma string.O compilador seencarrega de determinar o tamanho, conforme tamanho da string atribuda eadiciona o caractere nulo automaticamente:
char Str4[ ] = "arduino";
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
24/70
24
24
www.facebook.com/fbseletronica
Inicializar vetor com tamanho determinado e atribuir uma string para inicializar.Importante observar que o tamanho deve ser suficiente para conter o caractere nulo:
char Str5[8] = "arduino";
Inicializar o vetor com tamanho extra e inicializar com uma string de quantidades decaracteres menor que a quantidades de variveis no vetor:
char Str6[15] = "arduino";
7.10Vetores de stringMuitas vezes, conveniente, quando se trabalha com grandes quantidades de texto,configurar um vetor de string para manipulao deste texto.
No cdigo em seguida o caractere asterisco aps o tipo char(char*) indicar que se trata de
um vetor de string. Todos os nomes nos vetor so na verdade ponteiros para outrosvetores. Isso necessrio para criar vetores de vetores:
Exemplo:
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3","This
is string 4", "This is string 5","This is string 6"};
void setup(){
Serial.begin(9600);
}
void loop(){
for (int i = 0; i < 6; i++){
Serial.println(myStrings[i]);
delay(500);
}
}
7.11Operadores
A linguagem C muito rica em operadores sendo possivelmente uma das linguagens commaior numero de operadores disponveis. Possui operadores encontrados em linguagens dealto nvel como operadores encontrados em linguagens de baixo nvel como o Assembly.
Os operadores so divididos nas seguintes categorias: Atribuio, aritmticos,relacionais, lgicos, lgicos bit a bit.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
25/70
25
25
www.facebook.com/fbseletronica
7.11.1 Atribuio
O operador de atribuio em linguagem C o =, que utilizado para atribuir
determinado valor a uma varivel. Exemplo:
x = 10;
y = x+3;
Verificando as linhas anteriores duas operaes de atribuio foram feitas. Primeiro foiatribudo o valor 10 a varivel x, e na segunda foi atribudo o resultado da soma entre a
varivel x(que 10) com o valor 3, portanto ao final desta operao ser atribudo o valor13 a varivel y. A atribuio sempre feita da direita para a esquerda.
7.11.2 Aritmticos
So utilizados para efetuar operaes matemticas, a tabela abaixo exibe os operadoresaritmticos disponveis na linguagem C:
OPERADOR AO+ Adio- Subtrao* Multiplicao/ Diviso% Resto de diviso inteira++ Incremento-- Decremento
Os operadores de adio, subtrao, multiplicao e divisopossuem a mesmasfunes j conhecida em matemtica.
O operador % utilizado para retornar o resto de uma diviso inteira. Exemplo:
x = 5%2; //retorna para a varivel x o valor 1 que o resto de uma diviso inteira
de 5 por 2.
Os operadores de incremento e decremento so utilizados para adicionar ousubtrair em 1 o valor de uma varivel.
Exemplos:
x= 10;
x++; //incrementa em 1 o valor da varivel x, portanto x valer 11
x = 20;
x--; //decrementa em 1 do valar da varivel x, portanto x valer 19
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
26/70
26
26
www.facebook.com/fbseletronica
7.11.3 Operadores Relacionais
So utilizados em testes condicionais para determinar a relao entre dados, so osseguintes:
OPERADOR AO> Maior que>= Maior ou igual que< Menor que
b; //neste caso x valer 0, pois 5 menor do que 10.
importante observar que o operador relacional de igualdade lembra bastante ooperador de atribuio. Um erro muito comum para iniciantes em linguagem C o uso dooperador de atribuio em testes relacionais. Deve-se ficar atento, pois usar o operador deatribuio ao invs do relacional de igualdade pode ocasionar erros de lgica no programa.
7.11.4 Operadores Lgicos
Os operadores lgicos so utilizados para realizar testes booleanos entre elementosem um teste condicional. Eles retornam verdadeiro ou falso conforme o resultado doteste. So os seguintes:
OPERADOR AO&& AND(E)|| OR(OU)
! NOT(NO)
Os operadores lgicos so muito importantes na construo de testes condicionais, comeles pode-se relacionar diversas condies em um mesmo teste. Exemplo:
x = 10;
y = x>>5 && x
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
27/70
27
27
www.facebook.com/fbseletronica
// maior que 5 E menor do que 20
Esses operadores so muito utilizados em conjuntos com os operadores relacionaisem estruturas de controle.
7.11.5 Operadores Lgicos Bit a Bit
Os operadores Lgicos bit a bit so utilizados para operaes lgicas entre elementosou variveis. So os seguintes:
OPERADOR AO& AND(E)| OR(OU)^ XOR (OU EXCLUSIVO)~ NOT (NO)
>> Deslocamento direita
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
28/70
28
28
www.facebook.com/fbseletronica
OR(||)
0x04 Hexadecimal = 1 1 1 1 0 0 0 0 binrio
Resultado = 1 1 1 1 0 0 0 1 binrio = 0xF1 hexadecimal
Portanto o valor armazenado em v2 ser 0xF2h ou 242d.O operador OR muito utilizado para ligar bits de variveis ou registradores.
O operador ^(XOR)faz a operao booleana XORentre dois operandos, lembrandoque a operao XORresulta em 0 quando os valores so iguais e resulta em 1 quando osvalores so diferentes.
int v1, v2;
v1 = 0x50;
v2 = v1 ^ 0x50;
A operao ocorrer da seguinte forma:
0x20 hexadecimal = 0 1 0 1 0 0 0 0 binrio
XOR(^)
0x04 Hexadecimal = 0 1 0 1 0 0 0 0 binrio
Resultado = 0 0 0 0 0 0 0 0 binrio = 0x00hexadecimal
Portanto o valor armazenado em v2 ser 0x00h ou 00d.
O operador XORe muito utilizado para fazer a comparao entre variveis e teste deregistradores.
O operador ~(NOT) faz a operao booleana NOT, ou complemento de umavarivel. Exemplo:
int x , y;
x = 0b00001111;
y = ~x;
O resultado desta operao ser:
y = 0b11110000;
O operador NOT muito utilizado para inverter estados de bit em variveis, registradores epinos de I/O.
Os operadores de deslocamento so utilizados para deslocar determinadas quantidades debits para direita ou esquerda. A forma geral para o uso destes operadores :
Valor >>quantidade de bits a ser deslocados para a direita;
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
29/70
29
29
www.facebook.com/fbseletronica
Valor
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
30/70
30
30
www.facebook.com/fbseletronica
x = x>= y
7.13if
O comando if utilizado para executar um comando ou bloco de comandos no caso de umadeterminada condio ser avaliada como verdadeira.
A forma geral do comando if:
if (condio) comandoA;
Caso seja necessrio executar um comando se a condio for avaliada com Falsa usaa clausula elsejunto com o comando if, o comando ficar da seguinte forma:
if (condio)
comandoA;
else
comandoB;
Desta forma possvel executar comandos conforme o resultado do teste feito.
Pode-se executar um bloco de cdigo dentro da declarao if else, pra isso deve-selimitar com { e }, exemplo:
if(condio){
comandoA1; //bloco de cdigo para a condio verdadeira
comandoaA2;...comandoAn;}else{
comandoB1; //bloco de cdigo para a condio falsacomandoB2;...comandoBn;
}
Deve-se ficar claro que a clausula elseno necessria para o funcionamento do comandoif, funciona apena como uma opo para tomar uma ao se a condio testada for
avaliada como falsa. Desta forma a maneira mais simples de seu utilizar o comandoif:if(condio) comandoA;
H a possibilidade de aninhar diversos comandos if,um dentro do outro para executar umasequncia de testes, exemplo:
if(condio1) comandoA;
else if(condio2) comandoB;
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
31/70
31
31
www.facebook.com/fbseletronica
else if(condio3) comandoC;
Neste caso ser avaliada a condio1, se verdadeira ser executado o comandoA efinalizada a estrutura de teste, caso a condio1 seja falsa ser avaliada a condio2,
caso verdadeira ser executado o comandoBe finalizado a estrutura, caso a condio2seja falsa ser avaliada a condio3e assim por diante at finalizarem os testes.
Tambm possvel utilizar estruturas if-else dentro de estruturas if-else, como porexemplo:
if(condio1){
if(condio2){
comandoA;comandoB;
}
else{
comandoC;comandoD;
}}else{
if(condio3){
comandoE;comandoF;
}else{
comandoG;comandoH;
}}
Neste caso a condio1 avaliada caso verdadeira ser avaliada a condio2. Casoa condio1seja avaliada como falsa ser avaliada a condio3.
7.14switch
Em alguns caso, como na comparao de uma determinada varivel com diversos valoresdiferentes o comando if pode torna-se extenso, confuso e pouco eficiente.
O comando switch permite a realizao de comparaes sucessivas de uma formaelegante, clara e eficiente. O formato do comando switch:
switch(varivel){
case constante1:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
32/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
33/70
33
33
www.facebook.com/fbseletronica
ComandoN;}
Cada uma das trs sees do comandoforpossui uma funo distinta conforme emseguida:
Inicializao: esta seo conter uma expresso valida utilizada normalmente prainicializar a varivel de controle do lao.
Condio:esta seo pode conter a condio a ser avaliada para deciso de continuidadedo lao de repetio. Enquanto a condio for avaliada como verdadeira o lao permanecerem execuo.
Incremento: esta seo pode conter uma declarao para incremento da varivel decontrole do lao.
O funcionamento bsico do comando for o seguinte:
Primeiramente a seo de inicializao executada, em seguida a condio testada
e se for verdadeira o comando ou bloco de comandos so executados, aps o fim doscomandos o lao executa a seo de incremento da varivel de controle.
possvel utilizar a clausula break para encerrar a execuo do lao forindependente de a condio de repetio ser avaliada, desta forma quando o comandobreak for executado dentro de um lao de repetio for, este lao interrompidoimediatamente.
7.16whileOutro tipo de estrutura de repetio da linguagem C comando while, que
utilizado para repetir um comando ou um conjunto de instrues enquanto uma condiofor avaliada como verdadeira. No comando while existe apenas o teste condicional,diferentemente do comando forque possui ciclos definidos. A estrutura do comando while a seguinte:
while(condio)
{
comando1;
comando2;
...
comandoN;
}
O funcionamento do comando while ocorre de uma forma bem simples.Primeiramente a condio avaliada, caso a condio seja avaliada como verdadeira ocomando ou o bloco de comandos executado em seguida a condio avaliada
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
34/70
34
34
www.facebook.com/fbseletronica
novamente. Caso seja avaliada como verdadeira o lao repetido, quando avaliada comofalsa o lao interrompido.
Assim como no comando for possvel usar a clausula break para interromperprematuramente um lao while.
7.17do - while
O comando do-while utilizado para criar uma estrutura de repetio com funcionamentoligeiramente diferente do while e fortradicionais.
De fato, a diferena entre a estrutura while e a estrutura do-while que esta ltimarealiza a avaliao da condio de teste no final de cada ciclo de iterao do lao de
repetio, ao contrrio do comando while, que realiza o teste no incio de cada ciclo.A forma geral da estrutura do-while :
docomando;while (condio);
Oudo{
comandoA;comandoB;
...comandoN;
} while (condio);
O funcionamento da estrutura do-while o seguinte: o comando ou bloco de comandos executado e logo depois ser avaliada a condio de teste, caso ela seja verdadeira, seriniciada uma nova iterao do ciclo, caso seja falsa, o lao terminado.
Assim como nos comandos fore whilepode-se utilizar a clausula breakpara interrompero lao do-while.
7.18Diretivas do compilador
7.18.1 #define
uma ferramenta que permite ao programador dar um nome a um valor constante antesde de iniciar a programao. O compilador substituir esse a constante no lugar destenome na hora da compilao. Isto facilita na programao e deixa o cdigo mais agradvel.
A sintaxe mesma da linguagem C:
#define constantName valor
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
35/70
35
35
www.facebook.com/fbseletronica
Exemplo:
#define ledPin 3
7.18.2 #include utilizado para incluir bibliotecas externas ao scketch. Dessa forma pode-se acessar umgrande nmero de bibliotecas seja ela do padro da linguagem C ou as feitas especialmentepara Arduino, ou at mesmo bibliotecas feitas pelo programador.
Exemplo:
#include
Obs.: Assim como a diretiva #define no se coloca;no final.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
36/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
37/70
37
37
www.facebook.com/fbseletronica
pino: Numero correspondente ao pino;
valor:HIGHOULOW
Exemplo
int ledPin = 13; // LED connected to digital pin 13
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output}
void loop(){
digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a seconddigitalWrite(ledPin, LOW); // sets the LED offdelay(1000); // waits for a second
}
digitalRead()
L o valor presente e um pino digital. Este valor pode ser HIGH ou LOW.
Sintaxe:
digitalRead(pino)
Parmetros:
Pino: valor correspondente ao pino que se deseja ler.
Retorno
HIGH ou LOW.
Exemplo:
int ledPin = 13; // LED connected to digital pin 13int inPin = 7; // pushbutton connected to digital pin 7int val = 0; // variable to store the read value
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as outputpinMode(inPin, INPUT); // sets the digital pin 7 as input}void loop(){
val = digitalRead(inPin); // read the input pindigitalWrite(ledPin, val); // sets the LED to the button's value
}
http://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.htmlhttp://localhost/var/arduino-1.0.3/reference/Constants.html8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
38/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
39/70
39
39
www.facebook.com/fbseletronica
Exemplo:
int analogPin = 3; // potentiometer wiper (middle terminal) connected to analogpin 3
// outside leads to ground and +5Vint val = 0; // variable to store the value read
void setup(){
Serial.begin(9600); // setup serial}
void loop(){
val = analogRead(analogPin); // read the input pinSerial.println(val); // debug value
}
7.19.3 Funes de temporizaomillis()
Retorna o numero de milissegundos desde que a placa comeou a executar o programa.Este nmero retorna a zero aps aproximadamente 50 dias.
Sintaxe:
time = millis();
Parmetros:
Nenhum
Retorno:
unsigned long
Exemplo:
unsigned long time;
void setup(){Serial.begin(9600);
}void loop(){
Serial.print("Time: ");time = millis();//prints time since program startedSerial.println(time);// wait a second so as not to send massive amounts of datadelay(1000);
}
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
40/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
41/70
41
41
www.facebook.com/fbseletronica
Exemplo:
int ledPin = 13; // LED connected to digital pin 13
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output}
void loop(){
digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a seconddigitalWrite(ledPin, LOW); // sets the LED offdelay(1000); // waits for a second
}
delayMicroseconds()
Pausa o programa pelo tempo em microssegundos passado no parmetro.
O valor mximo que produz um valor preciso 16383.
Sintaxe:
delayMicroseconds(us)
Parmetros:
us: valor em microssegundos que se deseja esperar(unsigned int)
Exemplo:int outPin = 8; // digital pin 8
void setup(){
pinMode(outPin, OUTPUT); // sets the digital pin as output}
void loop(){
digitalWrite(outPin, HIGH); // sets the pin ondelayMicroseconds(50); // pauses for 50 microsecondsdigitalWrite(outPin, LOW); // sets the pin off
delayMicroseconds(50); // pauses for 50 microseconds}
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
42/70
42
42
www.facebook.com/fbseletronica
7.19.4 Funes de bit e byte
lowByte()
Retorna o byte menos significativos de uma varivel
Sintaxe
lowByte(x)
Parmetros
x: um valor de qualquer tipo
highByte()
Retorna o byte mais significativo de uma varivel.Sintaxe
highByte(x)
Parmetros
x: um valor de qualquer tipo
bitRead()
L um bit de um numero
Sintaxe
bitRead(x, n)
Parmetros
x: varivel que deseja ser lido o bit
n: a posio do do bit na varivel.
Retorno
O valor do bit (0 ou 1).
bitWrite()
Escreve um bit em uma varivel.
Sintaxe:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
43/70
43
43
www.facebook.com/fbseletronica
bitWrite(x, n, b)
Parmetros
x:
varivel que deseja ser escrito o bit
n: posio do bit a ser escrito.
b: o valor do bit (0 or 1)
bitSet()
Coloca em 1 o bit de uma varivel.
Sintaxe:
bitSet(x, n)
Parmetros
x: a varivel que se deseja manipular
n: posio do bit que se deseja colocar em 1
bitClear()
Colocar em 0 o bit desejado.
Sintaxe
bitClear(x, n)
Parametros
x: a varivel que se deseja manipular
n: posio do bit que se deseja colocar em 0
bit()
Calcula o valor de um especifico bit.
Sintaxe:bit(n)
Parmetros:
n: a posio do bit que deseja calcular o valor.
Retorno:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
44/70
44
44
www.facebook.com/fbseletronica
O valor do bit.
7.19.5 Funes matemticas
min(x, y)
Retorna o menor dos dois nmeros.
Parmetros
x: o primeiro valor a ser comparado
y: o segundo valor a ser comparado
Retorno
O menor dos dois nmeros passados
Exemplo
sensVal = min(sensVal, 100); //verifica se sensval menor que se 100 se maior
//garante que no ultrapasse 100
max(x, y)
Descrio
Retorna o maior de dois nmeros.
Parmetros
x: o primeiro valor a ser comparado
y: o segundo valor a ser comparado
Retorno
O maior entre os dois nmeros.
Exemplo
sensVal = max(senVal, 20); // garante que sensVal maior que 20
abs(x)
Calcula o valor absoluto de um numero.
Parmetros
x: o numero
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
45/70
45
45
www.facebook.com/fbseletronica
constrain(x, a, b)
Restringe um nmero para estar dentro de um intervalo.
Parmetros
x: O numero que deseja restringir;
a: meno valor do intervalo
b: maior valor do intervalo
Retorno
x: sexestiver entre a e b
a: se x menor quea
b: sex maior queb
Exemplo
sensVal = constrain(sensVal, 10, 150);
// limits range of sensor values to between 10 and 150
map(value, fromLow, fromHigh, toLow, toHigh)
Re-mapeia um nmero a partir de um intervalo para o outro. Isto , um valor de fromLowficaria mapeada para toLow, um valor de fromHigh ficaria mapeado para toHigh.
No restringe os valores dentro do intervalo, Por que valores fora do intervalo as vezes sodesejados e uteis. A funo constrain () pode ser usada antes ou aps esta funo, se oslimites para os intervalos so desejados.
Note que os limites inferiores pode ser maior ou menor do que os "limites superiores" demodo que o map () pode ser usado para inverter uma srie de nmeros, por exemplo
y = map(x, 1, 50, 50, 1);
A funo tambm lida com nmeros negativos, como no exemplo abaixo
y = map(x, 1, 50, 50, -100);
A funo map() usa matemtica inteiro por isso no ir gerar fraes. Restos fracionriosso truncados, e no so arredondados.
Parmetros
value: numero para mapear
fromLow: limite inferior da faixa atual
fromHigh: limite superior da faixa atual
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
46/70
46
46
www.facebook.com/fbseletronica
toLow: limite inferior da faixa futura
toHigh:limite superior da faixa futura
Retorno
O valor Re-mapeado
Exemplo
/* Map an analog value to 8 bits (0 to 255) */
void setup() {}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
pow(base, exponent)
Calcula o valor de um nmero elevado a uma potncia. pow() pode ser usado para elevarum nmero a uma potncia fraccionada. Isto til para a gerao valores de mapeamentoexponencial ou curvas.
Parmetros
base: o numero da base (float)
exponent: o numero do expoente (float)
Retorno
Resultado da operao (double)
sqrt(x)
Calcula a raiz quadrada de um numero.
Parmetros
x: o numero, pode ser de qualquer tipoRetorno
O resultado da operao(double)
sin(rad)
Calcula o seno de um ngulo(radianos). O resultado ser entre -1 e 1.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
47/70
47
47
www.facebook.com/fbseletronica
Parmetros
rad: ngulo em radianos(float)
Retorno
Seno do ngulo.(double)
cos(rad)Calcula o Cosseno de um ngulo(radianos). O resultado ser entre -1 e 1.
Parmetros
rad: ngulo em radianos(float)
Retorno
Cosseno do ngulo.(double)
tan(rad)
Calcula a tangente de um ngulo (radianos). O resultado estar entre menos infinito e maisinfinito.
Parmetros
rad: ngulo em radianos(float)
Retorno
Tangente do ngulo. (double)
7.19.6 Funes de Converso
char()
Converte o valor para o tipo char.
Sintaxe
char(x)
Parmetros
x: valor de qualquer tipo
Retorno
char
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
48/70
48
48
www.facebook.com/fbseletronica
byte()
Converte um valor para o tipo byte
Sintaxe
byte(x)
Parmetros
x: um valor de qualquer tipo
Retorno
byte
int()
Converte um valor para o tipo int
Sintaxe
int(x)
Parmetros
x: um valor de qualquer tipoRetorno
Int
word()
Converte um valor em um dado do tipo word ou cria uma word a partir de dois bytes.
Sintaxe
word(x)word(h, l)
Parmetros
x: um valor de qualquer tipo.
h: Parte alta da word
l: parte baixa da word
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
49/70
49
49
www.facebook.com/fbseletronica
Retorno
Word
long()
Converte um valor para o tipo de dado long.
Sintaxe
long(x)
Parmetros
x: valor a ser convertido
Retornolong
float()
Converte um valor para o tipo de dado float.
Sintaxe
float(x)
Parmetros
x: valor de qualquer tipo
Retorno
float
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
50/70
50
50
www.facebook.com/fbseletronica
8PROJETOS
A seguir sero apresentadas algumas aplicaes bsicas com o ARDUINO, aplicando napratica as funes estudadas anteriormente. Sero exibidos os conceitos com exemplosassim como a proposta de exerccios.
8.1Sada digital - Piscar LED
O exemplo mais simples para iniciar a programao do Arduino, que pode serconsiderado como o conhecido Hello World das linguagens de programao, consiste emacionar um LED atravs de uma sada digital.
A placa Arduino Uno j possui um Led ligado ao pino digital 13 que pode ser utilizadopara o teste, a ligao desse LED exibida a seguir:
Porm podemos, conforme figura a seguir, ligar um LED ao pino 13 no protoboard:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
51/70
51
51
www.facebook.com/fbseletronica
Para configurar o pino como sada digital utiliza a funo pinMode(). Inicialmentedefiniu-se uma varivel do tipo intcom o valor correspondente ao pino que se deseja ligaro LED, no caso o pino 13. Para definir o pino como sada usa-se a constante OUTPUT,conforme instruo abaixo:
pinMode(led, OUTPUT);
Para acionar a sada utiliza-se a funo digitalWrite(). Para escrever nvel lgico 1,usa-se a constante HIGH e para um nvel lgico baixo usa-se a constante LOW, conformeinstrues abaixo.
digitalWrite(led, HIGH); // liga led
digitalWrite(led, LOW); //desliga led
A funo delay() utilizada para aguardar 1 segundo entre a mudana de estados.Como a funo delay() aguarda por x milissegundos so necessrios 1000 ms para se ter 1segundo:
delay(1000); // aguarda 1 segundo
O sketch para a programao do ARDUINO apresentado em seguida:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
52/70
52
52
www.facebook.com/fbseletronica
/*
Pisca LEDLiga led por 1 segundo e depois desliga por mais 1 segundo
*/
// Pino 13 tem um led conectado na maioria das placas
int led = 13; //cria uma varivel inteira cchamada led com o numero do pino
// rotina de configurao
void setup() {
pinMode(led, OUTPUT); // inicaliza pino do led como sada digital
}
void loop() {
digitalWrite(led, HIGH); // liga led
delay(1000); // aguarda 1 segundo
digitalWrite(led, LOW); //desliga led
delay(1000); //aguarda 1 segundo
}
Exerccio 1:
Criar um sketch para acionar 4 LED, conectados aos pinos 10,11,12,13. Os LEDs devempiscar da seguinte forma:
1. Ligar os LEDs 13, 11 e desligar os LEDs 12,10.
2. Aguardar 1 segundo
3.
Desligar os LEDs 13, 11 e ligar os LEDs 12,10.4. Aguardar 1 segundo
5. Repetir o processo.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
53/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
54/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
55/70
55
55
www.facebook.com/fbseletronica
O exemplo consiste em ler a tecla e ligar o LED quando a tecla estiver pressionada, osketch a seguir mostra a programao para leitura de uma entrada digital:
/*
Leitura de tecla
O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13
*/
const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED
const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla
void setup()
{
pinMode(ledPin, OUTPUT); // declara o pino do led como sada
pinMode(inputPin, INPUT); // declara o pino da tecla como entrada
}void loop()
{
int val = digitalRead(inputPin); // le o valor na entrada
if (val == LOW) // se valor est em zero( tecla pressionada)
{
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
56/70
56
56
www.facebook.com/fbseletronica
digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada
}
else
{
digitalWrite(ledPin, LOW); // Desliga led indicando tecla solta
}
}
Os pinos de entrada possuem resistores de pull-up internos, dessa forma pode-seler o estado de uma tecla sem a necessidade de ligar um resistor, como foi feito noexemplo anterior. A figura a seguir exibe o esquema eltrico para ligar uma tecla sem oresistor de pull-up:
O circuito fica mais limpo e mais simples de montar no protoboard, a figura a seguirexibe a ligao no protoboard para teste:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
57/70
57
57
www.facebook.com/fbseletronica
Para configura a entrada com resistor de pull-up ligado, utiliza-se a constanteINPUT_PULLUP na funo pinMode(), conforme instruo a seguir:
pinMode(inputPin, INPUT_PULLUP); //declara o pino da tecla como
//entrada E PULL UP habilitado
O sketch completo para o teste da leitura de tecla sem resistor de pull up exibido aseguir:
/*
Leitura de tecla
O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13
*/
const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED
const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
58/70
58
58
www.facebook.com/fbseletronica
void setup()
{
pinMode(ledPin, OUTPUT); // declara o pino do led como sada
pinMode(inputPin, INPUT_PULLUP); // declara o pino da tecla como entrada
}
void loop()
{
int val = digitalRead(inputPin); // le o valor na entrada
if (val == LOW) // se valor est em zero( tecla pressionada)
{
digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada
}
else
{
digitalWrite(ledPin, LOW); // Desliga led indicando tecla solta
}
}
Quando uma tecla pressionada gerado oscilaes at o nvel lgico se estabilizar,essas oscilaes so conhecidas como bounce. Esse podem gerar leituras indesejadasfazendo o programa tomar aes que no eram previstas. O processo para eliminar aleitura durante as oscilao chamado de Debounce.
A tcnica de debounce feita por software e existem muitas maneiras de se resolver esteproblema, umas delas apresentada no sketch a seguir:
/** Debounce sketchuma tecla conectada ao pino e um led no pino 13a lgica de debounce previne leituras indesejadas da tecla*/
const int inputPin = 2; // pino onde esta a teclaconst int ledPin = 13; // pino onde est conectado o ledconst int debounceDelay = 10; // tempo para estabilizar// rotina de debounceboolean debounce(int pin){
boolean state;boolean previousState;previousState = digitalRead(pin); // armazena o estado da tecla
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
59/70
59
59
www.facebook.com/fbseletronica
for(int counter=0; counter < debounceDelay; counter++){delay(1); //aguarda 1 milisegundostate = digitalRead(pin); // le a teclaif( state != previousState){
counter = 0; //reinicia contadorpreviousState = state; // armazena o valor atual da tecla
}}// retorna o estado da teclareturn state;
}
void setup(){
pinMode(inputPin, INPUT); //configura pino da tecla como entradapinMode(ledPin, OUTPUT); //configura pino do led como sada
}
void loop(){if (!debounce(inputPin)) //le tecla com rotina de debounce{digitalWrite(ledPin, HIGH); //liga led se tecla pressionada
}else{digitalWrite(ledPin, LOW); //Desliga led se tecla solta
}}
A funo debounce chamada passando como parmetro o numero do pino da tecla que sedeseja fazer a leitura. A funo retorna o nvel lgico presente no pinio aps a estabilizao.
Exerccio 2:
Desenvolver um sketch para a leitura de uma tecla e acionar 4 LEDS de sada. A cada vezque a tecla for pressionada deve-se acender um LED e apagar o anterior. Inicialmente osleds encontram-se apagados. Quando tecla pressionada pela primeira vez acende LED1, nasegunda vez apaga LED1 e acende LED 2, e assim por diante. Quando o LED4 estiver acesoe a tecla for pressionada apaga o LED4. Quando a tecla for pressionada novamente
repetem-se as instrues anteriores.
8.3 Entrada analgica Lendo o valor em um potencimetro
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
60/70
60
60
www.facebook.com/fbseletronica
Os microcontroladores Atmega usados para o Arduino contm embarcados 6 canaisde converso analgica-digital (A/D). O conversor do Arduino tem uma resoluo de 10bits, retornando inteiros entre 0 e 1023. Enquanto a funo principal das portas analgicaspara a maioria dos usurios do Arduino ler sensores, as portas analgicas tambm tem afuncionalidade de entrada/sada de propsito geral (GPIO) (da mesma forma que as portasdigitais 0~13). Consequentemente, se o usurio precisar mais entradas/sadas de propsitogeral, e todas as portas analgicas no estiverem em uso, estas podem ser usadas paraGPIO.
Para iniciar o estudo da entrada analgica, a maneira mais simples e rpida ligandoum potencimetro a uma entrada analgica, conforme esquema apresentado em seguida:
Se girarmos o cursor do potencimetro, alteramos a resistncia em cada lado docontato eltrico que vai conectado ao terminal central do boto. Isso provoca a mudananaproximidadedo terminal central aos 5 volts ou GND o que implica numa mudana novalor analgico de entrada. Quando o cursor for levado at o final da escala, teremos, porexemplo, zero volt a ser fornecido ao pino de entrada do Arduino e, assim, ao l-lo obtm-se 0. Quando giramos o cursor at o outro extremo da escala, haver 5 volts a serfornecido ao pino do Arduino e, ao l-lo, teremos 1023. Em qualquer posio intermediriado cursor, teremos um valor entre 0 e 1023, que ser proporcional tenso eltrica sendoaplicada ao pino do Arduino.
A ligao no Arduino UNO pode ser feita conforme a figura abaixo:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
61/70
61
61
www.facebook.com/fbseletronica
O exemplo a seguir l o valor no potencimetro. O tempo que o LED permanece ligado oudesligado depende do valor obtido pelo analogRead().
/*
* Entrada analgica
* Liga e desliga um LED conectado ao pino digital 13. O tempo
* que o LED permanece ligado ou desligado depende do valor
* obtido pelo analogRead(). No caso mais simples, conecta-se
* um potencimetro ao pino analgico 0.
*/
int potPin = 0; // selecione o pino de entrada ao potencimetro
int ledPin = 13; // selecione o pino ao LED
int val = 0; // varivel a guardar o valor proveniente do sensor
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
62/70
62
62
www.facebook.com/fbseletronica
void setup() {
pinMode(ledPin, OUTPUT); // declarar o pino ledPin como sada
}
void loop() {
val = analogRead(potPin); // ler o valor do potencimetro
digitalWrite(ledPin, HIGH); // ligar o ledPin
delay(val); // pausar o programa por algum tempo
digitalWrite(ledPin, LOW); // desligar o ledPin
delay(val); // pausar o programa por algum tempo
}
Exerccio 3:
Elaborar um sketch para ler um potencimetro e acender 8 leds nas sadas digitais querepresentaro o nvel de tenso na entrada analgica como um bargraph. Quando entradafor zero volts todos os leds estaro apagados e quando for 5 Volts todos estaro acesos equalquer valor dentro desse intervalo deve acender os leds proporcionalmente.
8.4Comunicao Serial
A comunicao serial prov um caminho fcil e flexvel para a placa ARDUINOinteragir com um computador ou outro dispositivo. Outro ponto interessante que a IDE doArduino, possui um Monitor serial que exibe os dados enviados pelo Arduino ou envia dadospara o Arduino. Esse monitor pode ser utilizado para exibir mensagens durante o teste doprojeto.
Uma comunicao serial envolve hardware e software, o hardware faz a ligaoeltrica entre o Arduino e o dispositivo que ele est comunicando. O software enviaordenadamente os dados. A biblioteca Arduino auxilia na complexidade da comunicao
serial tornando fcil e simples o seu uso.Atravs da comunicao serial pode-se criar supervisrios no computador para ler sinais doArduino e exibir na tela de um computador, pode-se enviar comandos atravs de umainterface grfica no computador para o Arduino executar determinadas tarefas.
Para exibir textos e nmeros enviados do Arduino, no computador, deve-se inicialmenteconfigura a comunicao serial atravs da funo Serial.begin() na funo setup(), e usar afuno Serial.print() para enviar o texto ou valores para o computador.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
63/70
63
63
www.facebook.com/fbseletronica
A funo Serial.begin() seleciona o baudrate da comunicao serial. O baudrate determinaquantos bits por segundo enviando na transmisso de um dado. Para a comunicao comum computador usa-se os seguintes valores: 300, 1200, 2400, 4800, 9600, 14400, 19200,28800, 38400, 57600 ou 115200.
A sintaxe exibida a seguir:Serial.begin(speed);
Exemplo:
Serial.begin(9600);
A funo print envia textos pela serial. O texto deve ser colocado dentro de aspas duplas,por exemplo:
Serial.print(ol, mundo);Para enviar nmeros, o valor exibido depender do tipo da varivel. Por exemplo, paraenviar uma varivel do tipo int, chamada numero, usa-se a seguinte funo:
Serial.print(numero);
Para visualizar os valores no computador pode-se utilizar o terminal serial integrado a IDEconforme figura a seguir:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
64/70
64
64
www.facebook.com/fbseletronica
Exemplo A Enviando nmeros para o computador
O sketch a seguir exibe como a comunicao serial pode ser utilizada para enviar dadospara um computador.
/** comunicao Serial* Envia nmeros pela comunicao serial* para ser exibido no computador*/void setup(){
Serial.begin(9600); // seleciona velocidade para 9600 bps}int number = 0; //varivel para ser enviada
void loop()
{Serial.println(number); // envia numero em noiva linhadelay(500); // aguarda 0,5 segundonumber++; // incrementa o valor do numero.
}
Sero exibidos no terminal serial os nmeros no terminal conforme a figura a seguir:
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
65/70
65
65
www.facebook.com/fbseletronica
Exemplo B Enviando nmeros em diferentes formatos
Para imprimir um texto simplesmente usa a funo: Serial.print(texto a ser enviado!).
para enviar uma nova linha aps o envio do texto, usa-se a funo: Serial.println(texto aser enviado);
Para imprimir valores numricos pode ser um pouco mais complicado. A forma que umvalor do tipo byte ou inteiro so exibidos depende do tipo de varivel e dos parmetros deformatao. A linguagem ARDUINO auxilia nessa tarefa possibilitando a exibir um valor emdiferente tipo de dados.
Por exemplo, enviando um char, um byte e um int de um mesmo valor a sada no ser amesma.
Segue um exemplo especifico todas as variveis a seguir tem valores similares:
char asciiValue = 'A'; // ASCII A has a value of 65
char chrValue = 65; // an 8 bit signed character, this also is ASCII 'A'
byte byteValue = 65; // an 8 bit unsigned character, this also is ASCII 'A'
int intValue = 65; // a 16 bit signed integer set to a value of 65
float floatValue = 65.0; // float with a value of 65
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
66/70
66
66
www.facebook.com/fbseletronica
Os seguintes parmetros podem ser utilizados para enviar valores em diferentes tipos dedados:
Serial.print(valor, BIN) - envia no formato binrio
Serial.print(valor, OCT) -envia no formato octalSerial.print(valor, DEC) envia no formato decimal
Serial.print(78, HEX ) envia no formato hexadecimal
Serial.println(1.23456, 0) - envia numero flutuante sem casa decimal
Serial.println(1.23456, 2) - envia numero flutuante com duas casa decimais
Serial.println(1.23456, 4) - envia numero flutuante com 4 casas decimais
O sketch a seguir envia dados em diferentes formatos pela comunicao serial:/** Comunicao serial - formatar dados* Envia valores*/char chrValue = 65; //valores para ser enviadosbyte byteValue = 65;int intValue = 65;float floatValue = 65.0;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("chrValue: ");Serial.print(chrValue);Serial.print(" ");Serial.write(chrValue);Serial.print(" ");Serial.print(chrValue,DEC);Serial.println();
Serial.print("byteValue: ");Serial.print(byteValue);Serial.print(" ");Serial.write(byteValue);Serial.print(" ");Serial.print(byteValue,DEC);Serial.println();
Serial.print("intValue: ");Serial.print(intValue);
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
67/70
67
67
www.facebook.com/fbseletronica
Serial.print(" ");Serial.print(intValue,DEC);Serial.print(" ");Serial.print(intValue,HEX);Serial.print(" ");Serial.print(intValue,OCT);
Serial.print(" ");Serial.print(intValue,BIN);Serial.println();
Serial.print("floatValue: ");Serial.print(floatValue);Serial.println();Serial.println();Serial.println();
delay(5000); // aguarda 5 segundochrValue++; // incremnta para o prximo valorbyteValue++;
intValue++;floatValue +=1;}
Exemplo C Enviando nmeros para o Arduino
So enviados valores em ASCII para o Arduino, esses valores podem ser convertidos emvalores numricos de de uma maneira bem simples, bastando conhecer a tabela ASCII.
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
68/70
68
68
www.facebook.com/fbseletronica
O valores de 0 a 9 possuem o valor 48 a 57 na tabela ASCII. Desta forma para converterum valor ASCII de 0 a 9 em um valor numrico basta subtrair o valor 48, ou seja subtrair ocaractere 0 em ASCII.
O sketch a seguir exibe uma maneira simples de receber valores em ASCII e converter em
valores numricos:/** Comunicao Serial - Enviar dados para o Arduino* PISCA o led com o valor proporcional ao recebino pela serial*/const int ledPin = 13; //pino do ledint blinkRate=0; // valor para piscar
void setup(){
Serial.begin(9600); // Inicializa serial com 9600 bpspinMode(ledPin, OUTPUT); //configura pino do led como saida
}
void loop(){
if ( Serial.available()) // verifica se h caracter disponivel na serial{char ch = Serial.read(); //le o caracterif( isDigit(ch) ) // verifica se valor est entre 0 e 9{blinkRate = (ch - '0'); // converte caracter em um valor numricoblinkRate = blinkRate * 100; // atualiza valor da piscagem
}}blink();//chama rotina para piscar led
}
void blink(){
digitalWrite(ledPin,HIGH);delay(blinkRate);digitalWrite(ledPin,LOW);delay(blinkRate);
}
Exerccio 4:
Desenvolver um sketch para ligar os leds conforme o nmero enviado pela serial. Seenviado o numero 1 deve-se ligar o led1 e assim por diante. Quando enviado o mesmonumero na segunda vez deve-se desligar o led correspondente.
8.56.5. Sada PWM
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
69/70
8/13/2019 apostilaarduinov0rv1fbseletronica-131023071049-phpapp01-2
70/70
70
O valor deve ser de 0 a 255 onde 0 a sada permanece sempre em nvel zero e 225 a sadapermanece sempre em nvel alto.
O sketch a seguir exibe como controlar a intensidade de um led atravs da leitura de umsinal analgico em um potencimetro.
/*PWM
controla a luminosidade de um led conforme o valor presenteem um potenciometro*/
int ledPin = 13; // pino do ledint analogPin = 3; // pino para leitura do potenciometroint val = 0; // variable to store the read value
void setup(){
pinMode(ledPin, OUTPUT); // configura pino como sada
}
void loop(){
val = analogRead(analogPin); // le o valor analgicoanalogWrite(ledPin, val / 4); // aciona led com o valor anlogico lido divido por 4
}
Exerccio 5
Desenvolver um sketch para controlar o brilho do led atravs de duas teclas onde umaaumenta o brilho do led e outra diminui o brilho do led.
9REFERNCIAS1. http://arduino.cc/en/Reference/HomePage
http://arduino.cc/en/Reference/HomePagehttp://arduino.cc/en/Reference/HomePagehttp://arduino.cc/en/Reference/HomePage