Transcript

Programao Arduino

Pgina | 1

Sumrio:Estruturay yvoid setup ().............................................5 void loop ()...............................................5

Operadores de bits y y y y y y y y& (operador de bits AND)..............................22 | (operador de bits OR).................................22 ^ (operador de bits XOR)..............................22 ~ (operador de bits NOT)..............................24 > (desvio direita).....................................25 &=(de bits composto AND)............................26 |=(de bits composto OR)...............................26

Estruturas de controle y y y y y y y y y yif............................................................6 if...else...................................................7 for..........................................................8 switch case.............................................9 while.....................................................10 do... while..............................................10 break.....................................................69 continue.................................................11 return.....................................................11 goto.......................................................12

Operadores compostos y y y y y y++ (incrementar).........................................28 -- (decrementar)..........................................28 += (adio composta)..................................28 -= (subtrao composta)...............................28 *= (multiplicao composta)..........................28 /= (diviso composta)...................................28

Elementos de sintaxe y y y y y y; (ponto e vrgula)...................................13 {} (chaves).............................................13 // (linha de comentrio)...........................15 /* */ (bloco de comentrio)......................15 #define..................................................16 #include.................................................17

Operadores aritmticos y y y y y y= (igualdade).........................................18 + (adio)..............................................18 - (subtrao)..........................................18 * (multiplicao).....................................18 / (diviso)..............................................18 % (resto da diviso)...............................19

Operadores de comparao y y y y y y== (igual a)...........................................20 != (diferente de).....................................20 < (menor que).......................................20 > (maior que)........................................20 = (maior ou igual a).............................20

Operadores booleanos y y y&& (e)....................................................21 || (ou)....................................................21 ! (no)....................................................21

Pgina | 2

VariveisVariveis so expresses que voc pode usar em programas para armazenar valores como a leitura de um sensor em um pino analgico.

ConstantesConstantes so valores particulares com significados especficos.

y y y y

HIGH | LOW...........................................29 INPUT | OUTPUT....................................29 true | false.............................................29 Constantes inteiras.................................31

Tipos de dadosVariveis podem ser de vrios tipos:

y y y y y y y y y y y y

boolean..................................................32 char.......................................................32 byte.......................................................33 int..........................................................33 unsigned int............................................34 long.......................................................34 unsigned long.........................................35 float........................................................36 double....................................................37 string......................................................37 array.......................................................39 void........................................................40

Converso y y y y ychar()....................................................41 byte()....................................................41 int().......................................................41 long()....................................................41 float()....................................................42

Referncia yTabela ASCII..........................................42

Pgina | 3

FunesEntrada e sada digital

y y y

pinMode (pin, mode).....................................43 digitalWrite (pin, value).................................44 int digitalRead (pin).......................................45 Entrada e sada analgica

Comunicao serial Usado para comunicao entre a placa Arduino e um computador ou outros dispositivos. Esta comunicao ocorre atravs dos conectores serial ou USB da placa Arduino e nos pinos digitais 0 (RX) e 1 (TX). Assim, se voc utilizar estas funes no poder utilizar os pinos 0 e 1 para entrada e sada digital.

y y

int analogRead (pin)......................................46 analogWrite (pin, value) PWM....................47

Entrada e sada avanada

y y

shiftOut (dataPin, clockPin, bitOrder, value) .48 unsigned long pulseIn (pin, value) Tempo .49

y y y y

unsigned long millis()....................................50 unsigned long micros() delay(ms) delayMicroseconds( s) 2 Matemtica ..50 ..51 ..5

y y y y y y

Serial.begin (speed)......................................62 int Serial.available () int Serial.read () Serial.flush () 63 64 ..65

Serial.print (data)..........................................65 Serial.println (data).......................................68

y y y y y y y y

min (x, y).....................................................54 max (x, y) .55 abs (x).........................................................56 constrain (x, a, b).........................................56 map (value, fromLow, fromHigh, toLow, toHigh) sq (x) 57 ..58 pow (base, exponent)...................................58 sqrt (x).........................................................58 Trigonometria

y y y

sin (rad).......................................................59 cos (rad)......................................................59 tan (rad)......................................................59 Nmeros aleatrios

y y y

randomSeed (seed) long random (min, max)

.60 ..61

long random (max).......................................61

Pgina | 4

setup()A funo setup() chamada quando um programa pomea a rodar. Use esta funo para inicializar as sua variveis, os modos dos pinos, declarar o uso de livrarias, etc. Esta funo ser executada apenas uma vez aps a placa Arduino ser ligada ou ressetada. Exemplo int buttonPin = 3; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { // ... }

loop()Aps criar uma fuo setup() que declara os valores iniciais, a funo loop() faz exatamente o que seu nome sugere, entra em looping (executa sempre o mesmo bloco de cdigo), permitindo ao seu programa fazer mudanas e responder. Use esta funo para controlar ativamente a placa Arduino. Exemplo int buttonPin = 3; // setup inicializa o serial e o pino do button (boto) void setup() { beginSerial(9600); pinMode(buttonPin, INPUT); } // loop checa o boto a cada vez, // e envia o serial se ele for pressionado void loop() { if (digitalRead(buttonPin) == HIGH) serialWrite('H'); else serialWrite('L'); delay(1000); }

Pgina | 5

if (condicional) e ==, !=, (operadores de comparao)if, que usado juntamente com um operador de comparao, verifica quando uma condio satisfeita, como por exemplo um input acima de um determinado valor. O formato para uma verificao if : if (algumaVariavel > 50) { // faa alguma coisa } O programa checa se algumaVariavel (colocar acentos em nomes de variveis no uma boa idia) maior que 50. Se for, o programa realiza uma ao especfica. Colocado de outra maneira se a sentena que est dentro dos parntesis verdadeira o cdigo que est dentro das chaves roda; caso contrrio o programa salta este bloco de cdigo. As chaves podem ser omitidas aps uma sentena if se s houver uma nica linha de cdigo (definida pelo ponto e vrgula) que ser executado de modo condicional: if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) {digitalWrite(LEDpin, HIGH);} // todos so corretos A sentena que est sendo verificada necessita o uso de pelo menos um dos operadores: Operadores de comparao: x == y (x igual a y) x != y (x no igual a y) x < y (x menor que y) x > y (x maior que y) x = y (x maior ou igual a y) Cuidado: Tenha precauo com o uso acidental de apenas um sinal de igual (e.g. if (x = 10) ). O sinal de igual simples um operador de designao e coloca o valor 10 na varivel x. Ao contrrio o sinal de igal duplo (e.g. if (x == 10) ), que um operador de comparao, verifica se x igual a 10 ou no. A ltima sentea s verdadeira se x for igual a 10, mas a anterior sempre ser veraddeira. Isto ocorre por que a linguagem C (na qual o Arduino baseado) atribui um valor sentena (x=10) do seguinte modo: 10 colocado na varivel x (lembre o sinal de igual simples um operador de designao), ento x agora contm 10. Ento o condicional 'if' atribui um valor a 10, que ser sempre verdadeiro (TRUE), desede que nmeros diferentes de zero so sempre equiparados verdadeiro. Consequentemente, if (x = 10) ser sempre verdadeiro, que no o que pretendemos quando usamos um 'if'. Adcionalmente o valor 10 ser guardado na varivel x que tambm no o que pretendemos. if tambm pode ser usado como parte de uma estrutura de controle ramificada atravs da construo if..else.

Pgina | 6

if / elseif/else permite um controle maior sobre o fluxo de cdigo do que a sentena if bsica, tornando possvel que mltiplos testes sejam agrupados. Por exemplo, uma entrada analgica poderia ser verificada e uma ao especfica seria tomada se o valor de input fosse menor que 500 e outra ao seria tomada se o input fosse 500 ou mais. O cdigo seria assim: if (pinFiveInput < 500) { // ao A } else { // ao B } else pode preceder outro teste if , e assim mltiplos testes, mutuamente exclusivos, podem ser realizados ao mesmo tempo. Cada teste precede o prximo at que um teste com vavlor verdadeiro encontrado. Quando um teste com valor verdadeiro encontrado o seu bloco de cdigo associado execuatod e ento o programa salta para a sequencia aps todo o bloco if/else. Se a nenhum teste atribuido o valor verdadeiro o bloco que estiver no else sozinho executado, se houver algum. Note que um bloco else if pode ser usado com ou sem um bloco else final. Um nmero ilimitado destes ramos else if permitido. if (pinFiveInput < 500) { // faa a coisa A } else if (pinFiveInput >= 1000) { // faa a coisa B } else { // faa a coisa C } Outro modo de fazer testes de ramificaes mutuamente exclusivas atravs da sentena switch case.

Pgina | 7

sentena forDescrio A sentena for utilizada para repetir um bloco de cdigo delimitado por chaves. Um contador com incremento normalmente usado para controlar e finalizar o loop. A sentena for util para quanquer operao repetitiva, e frequentemente usada com arrays para operar em conjuntos de dados ou de pinos. H trs partes no cabealho do for: for (inicializao; condio; incremento) { //sentena(s); } A inicializao ocorre primeiro e apenas uma vez. Cada vez que o circuto executado a condio verificada; se for verdadeira o bloco de cdigo e o incremento so executados, e ento a condio testada novamente. Quando a condio se torna falsa o circuto termina. Exemplo // Aumentar o brilho de um LED usando um pino PWM int PWMpin = 10; // um LED em srie com um resisotr de 1k void setup() { // nenhum setup necessrio } void loop() { for (int i=0; i 40 && x < 120){ continue; } digitalWrite(PWMpin, x); delay(50); } // criar saltos de execuo

returnFinaliza uma funo e retorna um valor, se necessrio. Sintaxe: return; return valor; // ambas formas so vlidas Parmetros valor: alguma varivel ou constante Exemplos: Uma funo para comparar o valor de um sensor com um limite int checkSensor(){ if (analogRead(0) > 400) { return 1; else{ return 0; } } A palavra-chave return til para testar uma seo de cdigo sem ter que transformar em "comentrio" um grande e possivelmente defeituoso bloco de cdigo. void loop(){ // aqui, uma brilhante idia de programao return; // restante do bloco de cdigo no funcional // este cdigo nunca ser executado }

Pgina | 11

gotoTransfere o fluxo do programa para um outro ponto etiquetado Sintaxe label: goto etiqueta; // envia o fluxo do programa para etiqueta Dica O uso do goto desencorajado em programao C e inclusive alguns autores afirmam que o goto nunca realmente necessrio, mas usado com cautela pode simplificar alguns programas. A razo pela qual muitos programadores desaprovam seu uso que com o uso indiscriminado fcil de se criar um programa com um fluxo indefinido e muito difcil de ser depurado. No entanto, h casos em que o goto pode ser til e simplificar o cdigo. Uma destas situaes provocar uma sada de um grupo de loops aglutinados ou de blocos lgicos if com uma determinada condio.

Exemplo for(byte r = 0; r < 255; r++){ for(byte g = 255; g > -1; g--){ for(byte b = 0; b < 255; b++){ if (analogRead(0) > 250){ goto bailout;} // more statements ... } } } bailout:

Pgina | 12

; ponto e vrgulaUsada para terminar uma sentena. Exemplo int a = 13; Dica Esquecer de finalizar uma linha com ponto e vrgula causa um erro de compilao. O texto sobre o erro pode ser bvio e se referir a um ponto e vrgula faltando, ou no. Se ocorrer um erro de compilao impenetrvel ou aparenetemente ilgico uma das primeiras coisas a checar um ponto e vrgula faltando na vizinhana, precedendo a linha indicada pelo compilador.

{} ChavesChaves so uma parte essencial da linguagem de programao C. Elas so usadas em muitas construes diferentes, descritas abaixo, e isto pode algumas vezes ser confuso para iniciantes. Uma chave abrindo "{" deve sempre ser seguida por uma fechando "}". Frequentemente nos referimos a esta condio como equilibrio entre as chaves. A IDE (integrated development environment ou ambiente de desenvolvimento integrado) do Arduino inclui uma caracterstica prtica para checar o equilibrio das chaves. Apenas com o selecionar de uma chave ou clicar no ponto imediatamente posterior faz com que sua companheira lgica seja destacada. No presente momento esta caracterstica um pouco defeituosa e a IDE frequentemente encontrar (incorretamente) uma chave em um bloco de texto que tenha sido comentado. Programadores principiantes e programadores vindos das linguagens C e do BASIC frequentemente consideram o uso das chaves confuso ou desalentador. Afinal as mesmas chaves substituem a sentena RETURN em uma subrotina(funo), a sentena ENDIF em uma condicional e a sentena NEXT em um FOR. Por que o uso das chaves to variado, uma boa prtica de programao digitar o fecha-chaves "}" logo aps digitar o abre-chaves "{" quando estiver fazendo uma construo que as requer. Inserte ento alguns "ENTER" entre as chaves e comece a digitar o cdigo. Agindo assim suas chaves nunca ficaro desequilibradas. Chaves desequilibradas causam erros de comilao bastante enigmticos e que podem ser difceis de rastrear em um programa longo. Por causa de seus usos variados, as chaves so tambm incrivelmente importantes para a sintaxe de um programa e mover uma chave uma ou duas linhas pode alterar completamente o seu significado.

Pgina | 13

Os principais usos das chaves Funes void myfunction(datatype argument){ sentena(s) } Loops while (expresso booleana) { sentena(s) } do { sentena(s) } while (expresso booleana); for (inicializao; condio de trmino; expresso de incremento) { sentena(s) } Sentenas condicionais if (expresso booleana) { sentena(s) } else if (expresso booleana) { sentena(s) } else { sentena(s) }

Pgina | 14

ComentriosComentrios so linhas no programa que so usados para informar a voc mesmo ou outras pessoas sobre o modo como o progama trabalha. Elas so ignoradas pelo compilador e no so exportadas para o processador e portanto no ocupam a memria do chip ATmega. O nico propsito dos comentrios so ajudar a entender (ou relembrar) como o programa funciona. H dois modos diferentes de marcar uma linha como um comentrio. Exemplo x = 5; // Esta uma linha simples de comentrio. Qualquer coisa depois das barras um comentrio // at o fim da linha /* este um bloco de comentrio - usado para "comentar" blocos inteiros de cdigo if (gwb == 0){ // no h problema em uma linha simples dentro de um bloco de comentrio x = 3; } // no esquea de fechar o bloco de comentrio, eles tm que ser equilibrados */ Dica Quando estiver experimentando com o cdigo "comentar" partes do programa um modo conveniente de remover linhas que podem conter problemas. Este procedimento mantm as linhas no cdigo mas as trasnforma em comentrios de modo que o compilador as ignora. Isto pode ser especialmente til quando tentamos localizar um problema, ou quando um programa apresenta erros de compilao cujas explicaes so obscuras ou inteis. /* mas outro bloco de comentrio invlido */

Pgina | 15

#define#define um componente muito til da linguagem C que permite ao programador dar um nome a uma constatnte antes que o programa seja compilado. Constantes definidas no Arduino no ocupam espao em memria no chip. O compilador substitui referancias a estas constantes pelo valor definido no momento da compilao. Isto pode causar alguns efeitos indesejveis se, por exemplo, um nome de constante que tenha sido defindo por um #define incluido em alguma outra constante ou nome de varivel. Neste caso o texto deve ser substituido pelo valor (ou texto) do #define. Em general, a palavra chave const prefervel para definir constatntes e deve ser usada ao invs de #deine. A sintaxe do #define na linguagem Arduino a mesma da linguagem C: Sintaxe #define nomeDeConstante valor Verifique que o # necessrio. Exemplo #define ledPin 3 // O compilador vai substituir quanquer meno a ledPin pelo valor 3 no momento da compilao. Dica No h ponto e vrgula aps a declarao #define. Se voc incluir um o compilador vai lanar erros crticos no final do programa. #define ledPin 3; // isto um erro

Do mesmo modo o compilador gerar erros se aps o #define houver um =. #define ledPin = 3 // isto tambm um erro

Pgina | 16

#include#include usado para incluir outras bibliotecas no seu programa. Isto permite ao programador acessar um grande nmero de bibliotecas padro da linguagem C (grupos de funes pr-definidas), e tambm bibliotecas desenvolvidas especificamente para o Arduino. A pgina principal de referncia para as bibliotecas C AVR (AVR a referncia aos chips Atmel nos quais o Arduino est baseado) est aqui. Verifique que #include, de modo similar ao #define, no leva ponto e vrgula no final. Exemplo Este exemplo inclui uma biblioteca que utilizada para armazenar dados na memria flash ao invs de na ram. Isto economiza espao na ram para as necessidades de memria dinmica e torna o uso de grandes tabelas mais prtico. #include prog_uint16_t myConstants[] PROGMEM = {0, 21140, 702 , 9128, 0, 25764, 8456, 0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500};

= operador de designao (sinal de igual simples)Armazena o valor do que est direita do sinal de igual na varivel que est esquerda. O sinal de igual simples na linguagem de programao C chamdo operador de designao. Ele tem um significado diferente daquele utilizado em lgebra, no qual indica uma equao ou iguladade. O operador de designao indica ao microcontrolador para calcular o valor da expresso direita do sinal de igual e armazenar este valor na varivel que est esquerda. Exemplo int sensVal; // declera uma variavel do tipo inteiro com o nome de sensVal // armazena o valor da voltagem (digitalizado) no pino senVal = analogRead(0); analgico 0 em sensVal Dicas de programao A varivel esquerda necessita ser capaz de reter o valor que se quer armazenar. Se ela no for grande o suficiente o valor armazenado pode ser incorreto. No confunda o operador de designao [ = ] (sinal de igual simples) com o operador de comparao [ == ] (sinal de igual duplo), que calcula quando duas expresses so iguais ou no.

Pgina | 17

Adio, subtrao, multiplicao e divisoDescrio Estes operadores retornam a soma, diferena, profuto, ou quciente(respectivamente) de dois operandos. A operao feita usando o tipo de dado dos operadores, assim, por exemplo 9/4 resulta em 2, desde que 9 e 4 so inteiros. Isto tambm significa que uma operao pode extrapolar se o resultado for maior do que o que pode ser armazenado no tipo de dado. (e.g. adicionado 1 a um int com o valor de 32.767 resulta gives -32.768). Se os operandos forem de tipos de dados diferentes o tipo maior usado no clculo. Se um dos operandos for do tipo float ou do tipo double, ento a matemtica de ponto flutuante ser usada para o clculo. Exemplos y = y + 3; x = x - 7; i = j * 6; r = r / 5; Sintaxe result = value1 + value2; result = value1 - value2; result = value1 * value2; result = value1 / value2; Parmetros: value1: qualquer varivel ou constante value2: qualquer varivel ou constante Dicas de programao

y y y y y

Saiba que constantes inteiras so consideradas int, portanto alguns cculos com constantes podem extrapolar (e.g. 60 * 1000 resultar em um nmero negativo). Escolha tamanhos de variveis que sejam grandes o suficiente para reter os maiores resultados possveis dos clculos. Conhea o ponto em que sua varivel pode "dar a volta" e tambm o que ocorre no sentido contrrioe.g. (0 - 1) ou (0 - 32768). Para matemtica que necessita de fraes use variveis do tipo float, mas tenha em conta seus pontos negativos: tamanho maior e menor velocidade de computao. Use o operador de modelagem para converter diretamente um tipo de varivel em outro e.g. (int)meuFloat.

Pgina | 18

% (resto da diviso)Descrio Calcula o resto da diviso quando um inteiro dividido por outro. til para manter uma varivel dentro de um patamer especfico (e.g. o tamanho de um array). Sintaxe resultado = dividendo % divisor Parmetros dividendo: o nmero que ser dividido divisor: o nmero a dividir por Retorna o restante Exemplo x = 7 % 5; // x agora comtm 2 x = 9 % 5; // x agora comtm 4 x = 5 % 5; // x agora comtm 0 x = 4 % 5; // x agora comtm 4 Cdigo de exemplo /* atualizar os valores de um array um de cada vez em um bloco */ int values[10]; int i = 0; void setup() {} void loop() { values[i] = analogRead(0); i = (i + 1) % 10; // operador de resto de diviso atualiza a varivel } Dica O operador de resto da diviso no funciona com variveis tipo float.

Pgina | 19

if (condicional) e ==, !=, (operadores de comparao)if, que usado juntamente com um operador de comparao, verifica quando uma condio satisfeita, como por exemplo um input acima de um determinado valor. O formato para uma verificao if : if (algumaVariavel > 50) { // faa alguma coisa } O programa checa se algumaVariavel (colocar acentos em nomes de variveis no uma boa idia) maior que 50. Se for, o programa realiza uma ao especfica. Colocado de outra maneira se a sentena que est dentro dos parntesis verdadeira o cdigo que est dentro das chaves roda; caso contrrio o programa salta este bloco de cdigo. As chaves podem ser omitidas aps uma sentena if se s houver uma nica linha de cdigo (definida pelo ponto e vrgula) que ser executado de modo condicional: if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) {digitalWrite(LEDpin, HIGH);} // todos so corretos A sentena que est sendo verificada necessita o uso de pelo menos um dos operadores: Operadores de comparao: x == y (x igual a y) x != y (x no igual a y) x < y (x menor que y) x > y (x maior que y) x = y (x maior ou igual a y) Cuidado: Tenha precauo com o uso acidental de apenas um sinal de igual (e.g. if (x = 10) ). O sinal de igual simples um operador de designao e coloca o valor 10 na varivel x. Ao contrrio o sinal de igal duplo (e.g. if (x == 10) ), que um operador de comparao, verifica se x igual a 10 ou no. A ltima sentea s verdadeira se x for igual a 10, mas a anterior sempre ser veraddeira. Isto ocorre por que a linguagem C (na qual o Arduino baseado) atribui um valor sentena (x=10) do seguinte modo: 10 colocado na varivel x (lembre o sinal de igual simples um operador de designao), ento x agora contm 10. Ento o condicional 'if' atribui um valor a 10, que ser sempre verdadeiro (TRUE), desede que nmeros diferentes de zero so sempre equiparados verdadeiro. Consequentemente, if (x = 10) ser sempre verdadeiro, que no o que pretendemos quando usamos um 'if'. Adcionalmente o valor 10 ser guardado na varivel x que tambm no o que pretendemos. if tambm pode ser usado como parte de uma estrutura de controle ramificada atravs da construo if..else

Pgina | 20

Operadores BooleanosEstes operadores podem ser usados dentro da condio em uma sentena if. && ("E" lgico) Verdadeiro apenas se os dois operandos forem verdadeiros, ou seja a primeira condio "e" a segunda forem verdadeiras, e.g. if (digitalRead(2) == 1 && digitalRead(3) == 1) { // ler dois interruptores // ... } verdadeiro apenas se os dois interruptores estiverem fechados. || ("OU" lgico) Verdadeiro se algum dos operandos for verdadeiro, ou seja se a primeira "ou" a segunda condio for verdadeira e.g. if (x > 0 || y > 0) { // ... } verdadeiro apenas se x ou y forem maiores que 0.

! (negao)Verdadeiro apenas se o operando for falso e.g. if (!x) { // ... } verdadeiro apenas se x for falso (i.e. se x for igual a 0). Cuidado Certifique-se de no confundir o operador booleano "E" representado por "&&" e o operador lgico de bits "E" representado apenas por "&". Eles so animais completamente diferentes. Do mesmo modo no confunda o booleano "OU" representado por "||" e o operador lgico de bits "|". O operador lgico de bits "NO" representado por um "~" no se parece com o operador booleano "!", mas mesmo assim tenha certeza de estar usando o que voc deseja. Exemplos if (a >= 10 && a


Top Related