Curso de Arduino - Linguagem Wiring (Baseada em C) para Arduino.odt

Embed Size (px)

Citation preview

curso de arduino

Linguagem C para ArduinoPara criarmos os programas a serem embarcado no Arduino, precisamos nos familiarizar com uma Linguagem de Programao voltada para o Micro Controlador do Arduino, est linguagem de programao baseada na Linguagem C e C++.Vamos as referncias gerais da linguagem utilizada:Os programas em Arduino podem ser divididos em trs partes principais:Estrutura;

Valores (variveis e constantes);

Funes.

ESTRUTURAvoid setup ()

void loop ()

Estruturas de controleif

if else

for

switch case

while

do... while

break

continue

return

goto

Elementos de sintaxe; (ponto e vrgula)

{} (chaves)

// (linha de comentrio) ou /* */ (bloco de comentrio)

#define

#include

Operadores aritmticos= (atribuio)

+ (adio)

- (subtrao)

* (multiplicao)

/ (diviso)

% (resto da diviso)

Operadores de comparao== (igual a)

!= (diferente de)

< (menor que)

> (maior que)

= (maior ou igual a)

Operadores booleanos&& (e)

|| (ou)

! (no)

Operadores de Ponteiros* Operador de referncia

& Referncia do operador

Operadores de bits& (operador de bits AND)

| (operador de bits OR)

^ (operador de bits XOR)

~ (operador de bits NOT)

> (desvio direita)

Operadores compostos++ (incrementar)

-- (decrementar)

+= (adio composta)

-= (subtrao composta)

*= (multiplicao composta)

/= (diviso composta)

%= (Mdulo composto)

&= (Bit a bit e composto)

|= (Bit a bit ou composto)

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.HIGH | LOW

INPUT | OUTPUT

LED_BUILTIN

true | false

Tipos de dados Variveis podem ser de vrios tipos:boolean

char

Byte

Int

unsigned int

long

unsigned long

short

float

double

string

array

void

Conversochar()

byte()

int()

long()

float()

Variveis de Escopo e QualificadoresVariveis de Escopo

static

volatile

const

Utilidadessizeof()

PROGMEM

FUNES:Entrada e sada digitalpinMode (pin, mode)

digitalWrite (pin, value)

digitalRead (pin)

Entrada e sada analgicaanalogReference (type)

analogRead (pin)

analogWrite (pin, value) PWM

Entrada e sada avanadatone ()

noTone ()

shiftOut (dataPin, clockPin, bitOrder, value)

shiftIn ()

pulseIn (pin, value)

Tempounsigned long millis()

unsigned long micros()

delay(ms)

delayMicroseconds(s)

Matemticamin (x, y)

max (x, y)

abs (x)

constrain (x, a, b)

map (value, fromLow, fromHigh, toLow, toHigh)

pow (base, exponent)

sq (x)

sqrt (x)

Trigonometriasin (rad)

cos (rad)

tan (rad)

Nmeros aleatriosrandomSeed (seed)

long random (max)

long random (min, max)

Comunicao serialUsado 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.Serial.begin (speed)

int Serial.available ()

int Serial.read ()

Serial.flush ()

Serial.print (data)

Serial.println (data)

RefernciaTabela ASCII

ESTRUTURAsetup()A funo setup() chamada quando um programa comea a rodar. Use esta funo para inicializar as suas 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 reiniciada.loop()Aps criar uma funo 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 envolvendo: setup() e loop():/** Blink - Acende e apaga um LED com intervalos de 1 segundo repetidamente.* Este cdigo de exemplo de domnio pblico.*/// O pino 13 tem um LED j conectado na maioria das placas Arduino.// Voc pode ou no conectar um diretamente na placa como na imagem.

int led = 13; // cria uma varivel do tipo inteiro com o nome led e valor 13// A funo setup roda uma nica vez quando a placa alimentada// ou quando o boto de reset pressionado

void setup() {pinMode(led, OUTPUT); // inicializa o pino digital como uma sada.}

void loop() { // a funo loop roda indefinidamente:digitalWrite(led, HIGH); // acende o LED (HIGH o nvel de voltagem da placa)delay(1000); // espera de 1 segundodigitalWrite(led, LOW); // apaga o LEDdelay(1000); // espera de 1 segundo}ESTRUTURAS DE CONTROLEif (condicional) e ==, !=, (operadores de comparao)O comando condicional if, que usado como um operador de comparao, verifica quando uma condio satisfeita, como, por exemplo, um input acima de um determinado valor. A sintaxe de uso para o comando if :if (algumaVariavel > 50)// faa alguma coisa}O programa checa se alguma Varivel (colocar acentos em nomes de variveis no uma boa ideia) 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 executado; 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 os exemplos acima so formas corretas de se utilizar o comando!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 igual duplo (e.g. if (x == 10)), que um operador de comparao, verifica se x igual a 10 ou no. A ltima sentena s verdadeira se x for igual a 10, mas a anterior sempre ser verdadeira.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), desde que nmeros diferentes de zero so sempre equiparados a verdadeiro. Consequentemente, if (x = 10) ser sempre verdadeiro, que no o que pretendemos quando usamos um if. Adicionalmente 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.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 (Condio Verdadeira)} else {// ao B (Condio Falsa)}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 valor verdadeiro encontrado. Quando um teste com valor verdadeiro encontrado o seu bloco de cdigo associado executado e ento o programa salta para a sequncia aps todo o bloco if/else. Se a nenhum teste atribudo 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}?: - Operador ternrioUma operao ternria ou 3-ria uma operao com trs operandos. Uma operao ternria uma funo com trs variveis de entrada. Em linguagem de programao representa uma expresso condicional.Sintaxe: ? : ;Essa expresso avalia para se a for verdadeira. Caso contrrio, avalia para a .O uso de um operador ternrio para representar uma expresso condicional foi antecipado pela linguagem ALGOL, que permitia construes se-ento-seno em expresses, como em:a := if x >= 0 then x else -x.Em Wiring: a = if x >= 0 x; else -x;, ou, a = (x >= 0 ? x : -x);O operador ternrio deve ser utilizado em situaes onde a operao condicional seja simplesmente uma validao de verdadeiro ou falso, onde somente teremos um nico retorno em qualquer que seja a condio.forA 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 til para qualquer 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) ou comando(s);}A inicializao ocorre primeiro e apenas uma vez. Cada vez que o circuito 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 circuito termina.Dica de programao: Na linguagem C o comando for muito mais flexvel do que em algumas outras linguagens de programao, incluindo BASIC. Qualquer dos elementos do cabealho pode ser omitido, embora os ";" (ponto e vrgula) sejam necessrios. Qualquer destes elementos tambm podem ser substitudos por qualquer sentena vlida em C com varveis no correlatas. Estes tipos no usuais de sentenas for as vezes podem ser a soluo para alguns problemas raros de programao.whileO while far com que o bloco de cdigo delimitado entre chaves se repita continua e indefinidamente at que a expresso entre parntesis () (condio) se torne falsa. Algo tem que provocar uma mudana no valor da varivel que est sendo verificada ou o cdigo vai sempre ficar dando voltas dentro do while. Isto poderia ser o incremento de uma varivel ou uma condio externa como o teste de um sensor.Syntax:while(expresso){// cdigo}ParmetrosExpresso ou Condio Uma sentena booleana em C que possa ser verificada como verdadeira ou falsa.

Exemplo:var = 0;while(var < 200) {// algum cdigo que se repete 200 vezesvar++;}do whileO do funciona da mesma maneira que o loop while, com a exceo de que a condio testada no final do bloco de cdigo. Enquanto no while, se a condio for falsa, o bloco de cdigo no ser executado, no do ele sempre ser executado pelo menos uma vez.do {// bloco de cdigo} while (condio);Exemplo:do {delay(50); // espera para que os sensores se estabilizemx = readSensors(); // verifica o sensor} while (x < 100);switch / caseDo mesmo modo que as sentenas if, as switch / case controlam o fluxo dos programas. switch/case permite ao programador construir uma lista de casos dentro de um bloco delimitado por chaves. O programa checa cada caso com a varivel de teste e executa o cdigo se encontrar um valor idntico.switch/case um pouco mais flexvel que uma estrutura if/else de modo que o programador pode determinar se a estrutura switch deve continuar checando por valores idnticos na lista dos casos aps encontrar um valor idntico. Se a sentena break no encontrada aps a execuo do bloco de cdigo selecionado por um dos casos, ento o programa vai continuar a checar por mais valores idnticos entre os casos restantes. Se uma sentena break encontrada o cdigo sai da estrutura do mesmo modo que em uma construo if/else if.Parmetros:var a varivel para a qual voc busca valores idnticos

default se nenhuma outra condio for satisfeita o cdigo que est no default executado

break sem o break a sentena switch vai continuar checando as outras sentenas case para qualquer outro possvel valor idntico. Se algum for encontrado ser executado do mesmo modo, o que pode no ser o que voc deseja. Break indica ao switch para parar de procurar por outros valores idnticos e sai da sentena switch.

Exemplo:switch (var) {case 1://faa alguma coisa quando var == 1break; // break is optionalcase 2://faa alguma coisa quando == 2break;default:// se nenhum valor for idntico, faa o default// default opcional}breakO comando break utilizado para sair de um bloco do, for, ou while (Lao de repetio), se sobrepondo condio normal de verificao. Tambm usado para sair de uma sentena switch.Exemplo:for (x = 0; x < 255; x ++){digitalWrite(PWMpin, x);sens = analogRead(sensorPin);if (sens > threshold){ // checar a deteco por um sensorx = 0;break;}delay(50);}continueO continue usado para saltar pores de cdigo em blocos do, for, ou while (Lao de repetio). Ele fora com que o cdigo avance at o teste da condio, saltando os demais.Exemplo:for (x = 0; x < 255; x ++) {if (x > 40 && x < 120){ // criar saltos de execuocontinue;}digitalWrite(PWMpin, x);delay(50);}returnFinaliza uma funo e retorna um valor, se necessrio.Sintaxe:return; (ou)return valor; // ambas formas so vlidasParmetros:valor: alguma varivel ou constanteExemplos: 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 ideia de programaoreturn;// restante do bloco de cdigo no funcional este cdigo nunca ser executado}gotoTransfere o fluxo do programa para um outro ponto etiquetado.Sintaxe:label: // Definio da etiqueta.goto label; // Envia o fluxo do programa para etiqueta definida.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;}// mais declaraes ou comandos...}}}bailout:ELEMENTOS DE SINTAXE; (ponto e vrgula)Usada para terminar ou finalizar uma sentena ou linha e ainda utilizado para separar os parmetros dentro da definio do comando for.Exemplo:int a = 13; (Trmino da linha de atribuio)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 aparentemente ilgico uma das primeiras coisas a checar um ponto e vrgula faltando na vizinhana, precedendo a linha indicada pelo compilador.{} (Chaves)Chaves so uma parte essencial da linguagem de programao Wiring e C. Elas so usadas em muitas construes diferentes, descritas abaixo, e isto pode algumas vezes ser confuso para iniciantes.Uma abertura de chave "{" deve sempre ser seguida por um fechamento de chave "}". Frequentemente nos referimos a esta condio como equilbrio entre as chaves. A IDE (integrated development environment ou ambiente de desenvolvimento integrado) do Arduino inclui uma caracterstica prtica para checar o uso das chaves. Apenas com o selecionar de uma chave ou clicar no ponto imediatamente posterior faz com que sua companheira lgica seja destacada.Programadores principiantes e programadores vindos das linguagens C e do BASIC frequentemente consideram o uso das chaves confuso. Afinal as mesmas chaves substituem a sentena RETURN em uma sub-rotina (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. Inserir ento alguns ENTER entre as chaves e comece a digitar o cdigo. Agindo assim suas chaves nunca ficaro desequilibradas.Chaves desequilibradas causam erros de compilao 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.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)}Nos casos de loops e sentenas condicionais, caso seja utilizada somente uma linha de comando referente ao loop ou sentena condicional, o uso de chaves {} dispensvel (no se precisa utilizar), porm importante ter conhecimento das definies operacionais, para evitar problemas de construo e compilao da aplicao.// e /* */ (Comentrios)Comentrios so linhas no programa que so usados para informar a voc mesmo ou outras pessoas ou programadores, sobre o modo como o programa foi constitudo e/ou 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 comentriox = 3;/* mas outro bloco de comentrio invlido */}// no esquea de fechar o bloco de comentrio, eles tm que ser equilibradosDica: 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 transforma 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.#define#define um componente muito til da linguagem Wiring e C que permite ao programador dar um nome a uma constante antes que o programa seja compilado. Constantes definidas no Arduino no ocupam espao em memria do chip. O compilador substitui referncias 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 definido por um #define includo em alguma outra constante ou nome de varivel. Neste caso o texto deve ser substitudo pelo valor (ou texto) do #define.Em general, a palavra-chave const prefervel para definir constantes e deve ser usada em vez de #define.A sintaxe do #define na linguagem Arduino a mesma da linguagem C:Sintaxe:#define Observar que o # necessrio.Exemplo:#define ledPin 3// O compilador vai substituir qualquer 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 erroDo mesmo modo o compilador gerar erros se aps o #define houver um =.#define ledPin = 3 // isto tambm um erroVer:const ( um qualificador de varivel que define a varivel como apenas para leitura, no podendo ser alterada durante a execuo da aplicao).

Constants (So Contantes Inteiras utilizadas diretamente no cdigo da aplicao).

#include#include usado para incluir outras bibliotecas no seu programa. Isto permite ao programador acessar um grande nmero de bibliotecas padro da linguagem Wiring ou C (grupos de funes pr-definidas), e tambm s 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 em vez de na memria ram. Isto economiza espao na memria 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};OPERADORES ARITMTICOS= (Atribuio)Operador de atribuio utilizado para guardar ou atribuir um determinado valor em uma varivel.+ (Adio)Operador de Adio (Valores numricos) ou Concatenao (Valores do tipo char ou string).- (Subtrao)Operador de Subtrao.* (Multiplicao)Operador de Multiplicao./ (Diviso)Operador de Diviso.% (Resto da diviso)Operador de Mdulo, retorna o valor do resto da diviso.OPERADORES DE COMPARAOSo os operadores utilizados para realizar operaes de comparaes lgicas entre variveis, valores e/ou estados gerados pelos pinos ou afins definidos na aplicao, so eles:== (igual a)Realiza da verificao de igualdade lgica, Ex.: x == y (x igual a y).!= (diferente de)Realiza da verificao de desigualdade ou diferena lgica, Ex.: x != y (x no igual a y).< (menor que)Realiza da verificao de menor que lgico, Ex.: x < y (x menor que y).> (maior que)Realiza da verificao de maior que lgico, Ex.: x > y (x maior que y).= y (x maior ou igual a y).OPERADORES BOOLEANOSOs operadores booleanos so palavras (reservadas) que tem como objetivo definir ou informam ao sistema como dever ser feita a combinao entre termos ou expresses de uma pesquisa, teste ou validao de dados e/ou informaes. && (e)Restringe a pesquisa, equivalendo a expresso: com todas as palavras. Os resultados devem conter um termo e o outro.|| (ou)Aplica a pesquisa, equivalendo a com qualquer uma das palavras. Os resultados recuperados devem conter um termo ou o outro.! (no)Exclui um dos termos da pesquisa, equivalendo a expresso sem a(s) palavras(s). Em alguns sistemas voc poder encontrar somente o NO ou o E NO.Os operadores booleanos podem tambm ser usados em expresses complexas, com mais de dois termos. Nestes casos recomendado o uso de ( e ) (parnteses), para realizar a separao dos termos a serem testados logicamente.Ex.: ( valA || valB ) && valC.OPERADORES DE PONTEIROSPonteiros so objetos ou variveis de apontamento de um tipo de dado que se refere a um endereo na memria RAM, acessando atravs do mesmo o contedo do endereo de memria diretamente, simplesmente a implementao do tipo de referncia. Esse endereo um endereo de memria ou simplesmente o ndice numrico da posio em memria de um determinado dado/informao. Atravs de ponteiros se pode utilizar praticamente reas de memria alm das definies de tipo e estrutura que so permitidas pelo processador.* (Operador de dereferncia) um operador unrio que utilizado para fazer a dereferncia, est a forma de referir o valor contido no endereo armazenado. Vale a ressaltar que o operador de dereferncia utiliza o smbolo *, que o mesmo utilizado para a multiplicao, porm no caso dos ponteiros a declarao do tipo ponteiro utiliza esse mesmo smbolo.Sintaxe: *;Ex.:int *pi; (ponteiro para tipo inteiro).char *pc; (ponteiro para tipo char caractere).& (Referncia do operador) (Operador de endereo)O operador de endereo ou referncia do operador utilizado para determinar o endereo de uma varvel na memria.Sintaxe: = &;Ex.:val1 = &ptr1;OPERADORES DE BITSOs operadores de bits podem manipular os bits de operandos integrais (operaes do tipo: byte, char, short, int e long), mas no os operandos de ponto flutuante, so eles os operadores:& (operador de bits AND) (E sobre bits)Os bits no resultado so configurados como 1 se os bits correspondentes nos dois operandos forem ambos 1.| (operador de bits OR) (OU inclusivo sobre bits)Os bits no resultado so configurados como 1 se, pelo menos, um dos bits correspondentes nos dois operandos for 1.^ (operador de bits XOR) (OU exclusivo sobre bits)Os bits no resultado so configurados como 1 se exatamente um dos bitis correspondentes nos dois operandos for 1.~ (operador de bits NOT) (complemento de bits)Todos os bits 0 so configurados como 1, e todos os bits 1 so configurados como 0.> (desvio direita) (deslocamento para a direita com sinal)Desloca os bits do primeiro operando direito pelo nmero de bits especificado pelo segundo operando. Se o primeiro operando for negativo, os 1 (uns) so preenchidos a partir da esquerda; caso contrrio, os o (zeros) so preenchidos a partir da esquerda.&= (de bits composto AND)Operador de atribuio sobre bits AND.|= (de bits composto OR)Operador de atribuio sobre bits OR inclusivo.OPERADORES COMPOSTOS++ (incrementar)Operador de incremento, pode ser utilizado pr-fixado ou ps-fixado.No incremento pr-fixado, primeiro realizado o incremento e depois retornado o novo valor.No incremento ps-fixado, primeiro retornado o valor depois realizado o incremento.Ex.:++i; (pr-fixado)i++; (ps-fixado)-- (decrementar)Operador de decremento, pode ser utilizado pr-fixado ou ps-fixado.No decremento pr-fixado, primeiro realizado o decremento e depois retornado o novo valor.No decremento ps-fixado, primeiro retornado o valor depois realizado o decremento.Ex.:++i; (pr-fixado)i++; (ps-fixado)+= (adio composta) uma forma abreviada de realizar uma adio.Ex.: val += 2; (O mesmo que val = val + 2;)-= (subtrao composta) uma forma abreviada de realizar uma subtrao.Ex.: val -= 2; (O mesmo que val = val - 2;)*= (multiplicao composta) uma forma abreviada de realizar uma multiplio.Ex.: val *= 2; (O mesmo que val = val * 2;)/= (diviso composta) uma forma abreviada de realizar uma diviso.Ex.: val /= 2; (O mesmo que val = val / 2;)%= (Mdulo composto) uma forma abreviada de realizar o retorno do mdulo da diviso.Ex.: val %= 2; (O mesmo que val = val % 2;)&= (Bit a bit E composto) uma forma abreviada de realizar uma operao bit a bit AND.Ex.: val &= val2; (O mesmo que val = val & val2;)|= (Bit a bit OU composto) uma forma abreviada de realizar uma operao bit a bit OR.Ex.: val |= val2; (O mesmo que val = val | val2;)VARIVEISVariveis so expresses que voc pode usar em programas para armazenar valores como a leitura de um sensor em um pino analgico.Uma varivel um objeto (uma posio, frequentemente localizada na memria) capaz de reter e representar um valor ou expresso. Enquanto as variveis s existem em tempo de execuo, elas so associadas a nomes, chamados identificadores, durante o tempo de desenvolvimento.Quando nos referimos varivel, do ponto de vista da programao de computadores, estamos tratando de uma regio de memria (do computador) previamente identificada cuja finalidade armazenar os dados ou informaes de um programa por um determinado espao de tempo. A memria do computador se organiza tal qual um armrio com vrias divises. Sendo cada diviso identificada por um endereo diferente em uma linguagem que o computador entende.O computador armazena os dados nessas divises, sendo que em cada diviso s possvel armazenar um dado e toda vez que o computador armazenar um dado em uma dessas divises, o dado que antes estava armazenado eliminado. O contedo pode ser alterado, mas somente um dado por vez pode ser armazenado naquela diviso.Para definio, declarao ou nomeao de variveis muito interessante se utilizar a Notao Hngara (Utilizada para definio de nomes de variveis, facilitando a identificao do tipo de varivel) ou CamelCase (Utilizada para definies de nomes de varveis compostas) que so definies a serem utilizadas para se nomear variveis, assim facilitando sua constituio. Durante as atividades utilizaremos uma mescla destas definies.Ex.: int pino1 = 1; // Definio da varivel pino1 para uso da posio 1 no Arduino.CONSTANTESConstantes so valores particulares com significados especficos.Em linguagens de programao, constantes so usadas em expresses para representar vrios tipos de valores. Na linguagem de programao Wiring e C existem regras rgidas para determinar como devem ser escritos estes valores. Normalmente so utilizados nomes de constantes em caixa alta (MAISCULAS) por conveno, para diferenciar das variveis.Constantes Booleanas: So duas constantes utilizadas true e false para representar estados ligados e desligados. True definido como valores maior ou igual a 1, definido que existe algum sinal. False definido com o valor 0, neste caso falta ou inexistncia de sinal.CONSTANTES PR-DEFINIDAS:As constantes HIGH e LOW so definidas para utilizao de pinos no Arduino sendo definidos como ligado (HIGH), no caso presena de tenso para alimentao (Acima de 3 V no pino de 5 V e acima de 2 V no pino de 3,3 V), ou desligado, falta de tenso para alimentao (LOW).As constantes INPUT e OUTPUT so definidas para utilizao de pinos de entrada e sada, conforme especificado na funo pinMode(), as definies dos pinos pela funo pinMode() realizada dentro da funo setup(), que referencia o comportamento de cada pino configurado.A constante LED_BUILTIN definida como o pino 13 (digital) que est diretamente ligado ao LED que est ligado a um resistor interno na placa do Arduino.Por fim as definies das constantes true e false que so utilizadas para informar nveis lgicos que so representados na codificao de aplicativos. Estas constantes no so escritas em caixa alta (MAISCULAS) e sim sempre em caixa baixa (MINUSCULAS). O valor para falso sempre definido como 0 (zero), j para true temos um valor maior ou igual a 1, porm valores como: -1, 2 e -200 so sempre definidos como verdadeiros.TIPOS DE DADOS (Variveis podem ser de vrios tipos)TipoTamanhoDescrio

boolean1 byte (8bits)Utilizada como flag de testes ou validaes dentro da codificao da aplicao. Somente realiza operaes com valores true ou false. Este tipo utiliza apenas 1 byte de memria.

char1 byte (8bits)Utilizado para registro de um nico caractere, podendo ser atribudo no momento da declarao ou atravs de um input. Este tipo utiliza apenas 1 byte de memria. Durante a atribuio pode se realizar o registro de um caractere literal (Ex.: val = 'A'; ou val = 'a';), como tambm se utilizando o decimal inteiro, octal ou hexadecimal do carcter a ser atribudo.

Byte1 byte (8bits)Utilizado para armazenar um nmero sem sinal de 1 byte ou 8 bits, um valor entre 0 (zero) e 255 (duzentos e cinquenta e cinco).

Int2 bytes (16bits)4 bytes (32bits) um tipo primitivo, utilizado para armazenar valores numricos de 2 bytes, de -32.768 a 32.767 ou de -215 a 215 - 1, ou de 4 bytes, de -2.147.483.648 a 2.147.483.647 ou -231 a 231 1. A quantidade de memria utilizada depender do microprocessador utilizado.

unsigned int2 bytes (16bits)4 bytes (32bits) um tipo de inteiro sem sinal, utilizado para armazenar valores inteiro a partir de 0 (zero). Utilizando em memria 2 bytes, de 0 a 65.535 ou 216 - 1, ou 4 bytes, de 0 a 4.294.967.295 ou 232 1. A quantidade de memria utilizada depender do microprocessador utilizado.

long4 bytes (32bits) um tipo de inteiro longo, utilizado para armazenar valores inteiros muito grandes, de -2.147.483.648 a 2.147.483.647 ou -231 a 231 1.

unsigned long4 bytes (32bits) um tipo de inteiro longo sem sinal, utilizado para armazenar valores inteiros muito grandes, de 0 a 4.294.967.295 ou 232 1.

short2 bytes (16bits) um tipo inteiro, utilizado para armazenar valores inteiros de -32.768 a 32.767 ou -215 a 215 1.

float4 bytes (32bits) um tipo de ponto flutuante, utilizado para armazenar valores com at 7 casas decimais e com sinal, podem armazenar valores de -3,4028235x1038 at 3,4028235x1038.

double4 bytes (32bits)8 bytes (64bits) um tipo de ponto flutuante de preciso dupla, utilizado para armazenar valores com at 15 casas decimais e com sinal, podem armazenar valores de -3,4028235x1038 at 3,4028235x1038. Dependendo do microprocessador que se esteja utilizando ser utilizado 4 ou 8 bytes. (Limitado ao micro ATMEGA utilizado).

string- utilizado para registro de cadeias de carteres o tamanho de uma string depender da quantidade de caracteres do tipo char que so utilizados mais um de fecho que ser \0 ou 0 que define o trmino da cadeia de caracteres, ou ainda pode ser definida por um vetor de caracteres durante a atribuio. Ainda temos o tipo Objeto String, porm este tipo (objeto) necessita de mais memria para definio de uma varivel.

array- utilizado para registro de uma matriz ou conjunto de variveis, sempre do mesmo tipo definido, para ter acesso a cada posio da matriz deve se realizar a identificao do ndice desejado a se acessado. Toda matriz sempre iniciada em 0 (zero). Observar que o tamanho definido na atribuio, ter como acesso ao ltimo elemento sempre o tamanho menos 1.

void-Utilizado apenas para definio de funes, indicando que a mesma no retorna nenhum valor aps o processamento.

CONVERSOchar()Realiza a converso de valor para o tipo char.Sintaxe: char(x); Onde x uma varivel de qualquer tipo.Ela retorna um char.byte()Realiza a converso de valor para o tipo byte.Sintaxe: byte(x); Onde x uma varivel de qualquer tipo.Ela retorna um byte.int()Realiza a converso de valor para o tipo int.Sintaxe: int(x); Onde x uma varivel de qualquer tipo.Ela retorna um int.long()Realiza a converso de valor para o tipo long.Sintaxe: long(x); Onde x uma varivel de qualquer tipo.Ela retorna um long.float()Realiza a converso de valor para o tipo float.Sintaxe: float(x); Onde x uma varivel de qualquer tipo.Ela retorna um float.Est funo de converso, estar limitada a preciso definido pelo microprocessador utilizado.Variveis de Escopo e QualificadoresVariveis de EscopoEstas variveis so definidas fora da funo principal ou qualquer outra, tambm conhecidas como variveis globais, elas podem ser utilizadas dentro do mdulo por qualquer funo que necessite dela sem que seja necessria uma definio ou atribuio, dependo do tipo e da utilizao aps a declarao a mesma dever ser atribuda para que o contedo seja pr-definido de forma correta evitando que algum valor aleatrio que se encontro na posio de memria a ser utilizada pela varivel no retorne para o processamento e gere resultado indevido.staticEste qualificador de variveis definido para ser utilizado dentro da funo que a criou, assim sendo no sendo possvel ser utilizada por outras funes. Este tipo de visibilidade permite que as variveis com este qualificador possam ser criadas com o mesmo nome em vrias funes, desde que todas sempre utilizem a qualificao do tipo static.volatileEste qualificador de variveis definido para ser utilizado para definir uma diretiva de compilao, realiza a definio da forma como acontecer a armazenagem da varivel, podendo ser na RAM ou em registradores. Ela pode ser definida como global, para uso em todas as funes da aplicao, em casos que a alterao do valor definido da varivel acontea dentro das funes deve se utilizar este qualificador. constEste qualificador define que a varivel no ser alterada durante a execuo da aplicao, este tipo definido como sendo apenas para leitura por conta do valor da varivel no poder ser alterado durante o tempo de execuo. No caso em que a varivel esteja em algum ponto ou parte do cdigo venha a ser alterado seu valor, durante o processo de compilao, ser apresentado uma mensagem de erro, por conta dessa alterao de valor. Em muitos casos o qualificador const melhor e mai utilizado do que #defineUtilidadessizeof()A funo sizeof() utilizada para definir a quantidade de memria necessria ou ser alocada para uma determinada varivel. Sintaxe: sizeof(varivel)Parmetros: Qualquer tipo de varivel ou matriz (por exemplo: int, float, byte, char)O operador sizeof() til para trabalhar com matrizes onde seja necessrio modificar o tamanho da matriz sem quebrar em outras partes da aplicao.PROGMEM uma palavra-chave (reservada) que define o modificador de varivel para armazenamento de dados em uma memria flash, em vez da memria principal do Arduino. Para utilizao deste modificador necessrio realizar o uso do elemento #include para o uso da biblioteca pgmspace.hSintaxe: const [] PROGMEM = {data0, data1, data3 ...};FUNES:Entrada e sada digitalpinMode (pin, mode)Funo utilizada para configurao de cada pino a ser utilizado no Arduino, permitindo a definio de cada pino como sendo de entrada ou sada.Sintaze: pinMode( , )Parmetros:pino Nmero do pino a ser definido para uso.modo Forma como o pino ser utilizado (INPUT, OUTPUT ou INPUT_PULLUP).Retorno: Est no retorna nenhum valor.digitalWrite (pin, value)Realiza a escrita (definio) no pino digital como sendo um valor ALTO (HIGH) ou BAIXO (LOW).

digitalRead (pin)

Entrada e sada analgicaanalogReference (type)

analogRead (pin)

analogWrite (pin, value) PWM

Entrada e sada avanadatone ()

noTone ()

shiftOut (dataPin, clockPin, bitOrder, value)

shiftIn ()

pulseIn (pin, value)