Você está na página 1de 10

Bem Vindo Segurana em Primeiro Lugar Equipe Robtica Arduino Papis de Parede Robtica Open Core ( ROC ) Olimpada

Brasileira de Robtica ( OBR ) Robtica Educacional ( REd ) Kits e Experincia dos Leitores ( KEL )

Arduino Programao ( Atualizado em 14 de set. )


Written By: Kemper - Sep 1211
0 4

Select Language

Mdulo: Arduino Aula: Arduino Bsico I Ttulo: Programao Esta aula tem o objetivo de introduzir os primeiros conceitos de programao para C usando C++ para Arduino e Wiring. Introduo: Com o advento da internet, o acesso a informao foi facilitado, porm, isto gerou uma srie de profissionais seguidores de receita de bolo, onde a falta de teoria tem se tornado um grande problema, pois, muitos profissionais no tiveram que fazer fora para adquirir conhecimento e s fazem melar o mercado com mo de obra barata e sem qualidade, tirando o po de muitos profissionais srios que no tm conseguido pagar

suas contas. Pensando nisso, estas aulas vo segui um carter mais terico e menos prtico, com todo o conhecimento necessrio para se formar um bom programador Arduino. Antes de tudo, perceba que programao de qualidade uma arte matemtica e vai muito alm de simplesmente fazer um cdigo funcionar. Cada plataforma tem suas caractersticas e necessidades, cabendo ao desenvolvedor a obrigao de conhecer a sua plataforma a fundo. No caso dos C, onde o tempo de execuo e utilizao de memria so essenciais, a arte da programao levada ao seu extremo, e em muitos casos, um bom programador pode reduzir os custos do equipamento final reduzindo a necessidade de perifricos e expanses externas. Para quem no tem prtica, a regra prtica da indstria diz que todo produto produzido em lotes de mil unidades cada, e por consequncia, cada dlar economizado geram mil dlares de lucro a mais por lote produzido. Bits e Bytes: Como falado anteriormente, todo C tem uma capacidade limitada de memria, tanto para dados, memria tipo RAM, quanto para cdigo, memria tipo ROM. Por isto, extremamente importante entender como os dados so arquivados na memria para se poder otimizar o espao de memria o mximo possvel. Mas, antes de falarmos de dados, temos que entender o conceito de nmero binrio, bit e byte, pois eles so uma consequncia natural de todo circuito digital, sendo o nmero binrio, base 2, a forma matemtica mais direta de se representar um dado digital, e a base 16, hexadecimal, a forma mais fcil para seres humanos compreenderem o dado representado. Como falado em aulas anteriores, todo circuito digital s capaz de processar dois valores, 0 e 1, ou circuito desligado e ligado, o que nos d um bit e sua consequncia direta, nmeros binrios, base 2, uma base onde o nmero decimal 5 ser representado por 101 e o nmero decimal 10 ser representado por 1010. Por sua vez, circuitos podem ter suas sadas agrupadas de acordo com a necessidade, por isto, foi convencionado que o agrupamento de 8 bits seria chamado de byte. Ou seja, bit a menor unidade capaz de representar uma informao digital, e byte o agrupamento dos bits em grupos de oito, no importando se a arquitetura feita para trabalhar com 8 bits, 16 bits, 32 bits ou mais, o byte sempre ter 8 bits. Bases Numricas: Lembrando a teoria bsica dos nmeros, a base 10 chamada assim por conter 10 algarismos, 0 a 9. Sendo 9 o maior valor representado nessa base, e como no h a possibilidade de se representar o prximo valor, o dgito menos significativo reiniciado ao seu menor valor e mais um dgito adicionado, permitindo-se assim representar nmeros maiores do que a base, como seria o caso de 10, 11, 12 e assim por diante. Agora imagine um nmero de trs dgitos, 512 por exemplo. Trs dgitos podem conter quaisquer valores entre 0 e 999, ou mil combinaes, no nosso caso temos: 5*102 + 1*101 + 2*100 = = 5*100 + 1*10+2*1 = 500+10+2

= 512 Como d para perceber, a teoria bsica dos nmeros diz que um nmero formado da seguinte forma: valor * basedgito n-1+valor * basedgito 2+valor * basedgito 1+valor * basedgito 0 Aplicando-se a mesma teoria a base 2, temos: 101b = 1*22 + 0*21 + 1*20 101b = 4 + 0 + 1 101b = 5 decimal. Porm, representar nmeros apenas com 0 e 1 no uma forma muito prtica para o crebro humano, por isto, muitas vezes ser usada a representao hexadecimal, base 16. A nica coisa que muda na base 16 o fato de haverem 16 algarismos para representar um nmero, onde so usados os nmeros 0 a 9 e as letras A a F. E como na base 10, os valores de 0 a 9, na base 16 os valores vo de 0 a 15, sendo o 10, 11, 12, 13, 14 e 15 representados pelas letras A, B, C, D, E e F respectivamente. Veja a tabela abaixo para entender:
Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binrio 0000b 0001b 0010b 0011b 0100b 0101b 0110b 0111b 1000b 1001b 1010b 1011b 1100b 1101b 1110b 1111b Hexadecimal 0h 1h 2h 3h 4h 5h 6h 7h 8h 9h Ah Bh Ch Dh Eh Fh

Como voc deve ter percebido, os nmeros so representados por sequncias de bits, e extremamente importante entender esta representao para se entender o espao ocupado na memria por um dado qualquer, pois, muitos dos C AVR usados no Arduino tm apenas 128 bytes de dados para a memria RAM, por isto, no prossiga se no entender esta parte do assunto. Entendendo a Memria e os Tipos:

Antes de falarmos mais a fundo sobre os tipos, vamos entender melhor o conceito de dados digitais e ver como isto influencia a organizao da memria interna de um C. Imagine a seguinte linha de cdigo, no incio do programa: unsigned int contador = 255; Ela tem duas finalidades, a primeira dizer ao C para reservar dois bytes e escrever o valor 255, a segunda informar ao compilador para reconhecer o rtulo contador como sendo o endereo reservado ao grupo de bytes. Partindo do princpio que a memria interna estava totalmente vazia, o compilador deve reservar os dois primeiros endereos para a varivel do tipo unsigned int, como na representao da memria abaixo: bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Val. Dec. Val. Hex. Endereo Rtulo 1 1 1 1 1 1 1 1 255 FF 0 Contador ( baixo ) 0 x x 0 x x 0 x x 0 x x 0 x x 0 x x 0 x x 0 x x 0 x x 0 x x 1 2 3 Contador ( alto ) [livre] [livre]

Uma varivel do tipo unsigned int pode arquivar nmeros entre 0 e 65,535, ou, 0 e 216-1, e como 216 ocupam dois bytes, o compilador vai reservar este espao e o manter reservado durante toda a execuo do programa. Agora imagine o valor mximo da varivel contador como nunca ultrapassando o valor decimal 20, no nosso programa imaginrio. Como o menor espao de memria existente no Arduino um byte, 8 bits, e um byte pode arquivar valores entre 0 e 255, ou 0 e 28-1, fica claro o fato de no necessitarmos escolher uma varivel do tipo unsigned int, por desperdiar um byte a mais, que nunca vai ser usado, alm da execuo do programa necessitar tratar dois bytes a cada interao da varivel contador, em vez de tratar um nico byte e ganhar tempo na execuo do programa. Variveis e Tipos Bsicos de Dados: Todo programa tem a necessidade de arquivar e alterar dados temporrios, chamados de variveis, durante a execuo do programa, cabendo ao programador informar ao compilador que necessita arquivar dados e qual o tipo de informao a ser arquivada em cada dado. Para isto, ele deve seguir a seguinte sintaxe: tipo_do_dado rtudo_do_dado; sendo opcional inicializar o valor desejado da seguinte forma: tipo_do_dado rtudo_do_dado = valor_do_dado; Exemplo:
i n tc o n t a d o r ; l o n gt e m p o ;

u n s i g n e di n tc o n t a d o r _ a s c e n d e n t e=0 ;

No exemplo acima, int representa uma varivel do tipo nmero inteiro e contador representa o rtulo pelo qual o programador vai reconhecer a varivel. Na prtica, quando o programador declara uma varivel, ele est dizendo ao compilador para arquivar um espao em memria e aplicando um nome a este espao. As regras so: Os tipos possveis so predeterminados pelo framework Wiring e pela linguagem C; Aps a declarao de tipo deve haver um ou mais espaos separando o rtulo da varivel de seu tipo; O rtulo poder conter letras sem acento, nmeros e underline ( _ ); O rtulo deve comear obrigatoriamente por letra, no sendo aceito nmeros no primeiro caractere; Underline no primeiro caractere no acarretar erro de compilao, mas, variveis inicializadas com um ou dois undeline so reservados pelo compilador e podem dar erro no programa depois de compilado; Alguns compiladores aceitam at 64 caracteres e ignoram os caracteres excedentes; O compilador diferencia letras maisculas e minsculas, sendo contador diferente de Contador; Os principais tipos so: void: Este no necessariamente um tipo, mas, serve para indicar que uma funo no retornar nenhum valor; int: Ocupa dois bytes e aceita receber nmeros inteiros entre -32,768 e 32,767, ou -215 e 215-1. Sendo os bits 14 a 0 usados para arquivar o nmero. O bit 15, o mais significativo, usado para arquivar o sinal, 0 para positivo e 1 para negativo. Exemplo: int pino_do_led = 13; Sintaxe: int rtulo = valor [ opcional ]; Neste ponto, vale salientar a consequncia de se usar o bit mais significativo como sinal. Imagine uma varivel com o valor 32,767 decimal, ou 0111 1111 1111 1111b como no exemplo abaixo.
i n tc o n t a d o r=3 2 7 6 7 ; c o n t a d o r=c o n t a d o r+1 ;

Contador tem o binrio 0111 1111 1111 1111b ocupando dois bytes, porm, ao se somar 1, teremos o binrio 1000 0000 0000 0000b, ou -32,768 decimal. O mesmo ocorre para -32,768. Veja o exemplo:

i n tc o n t a d o r=3 2 7 6 8 ; c o n t a d o r=v a r i a v e l-1 ;

Contador tem o valor -32,786, ou 1000 0000 0000 0000b e ao se subtrair 1, contador passa a ter o valor 0111 1111 1111 1111b ou +32,767. unsigned int: Ocupa dois bytes e pode receber valores entre 0 e 65,535, ou seja, valores entre 0 e 216-1. Porm, ao contrrio de int, no h a necessidade de se ocupar um bit para sinal, e todos os bits so usado para o nmero. Mas, vale salientar um efeito parecido com o ocorrido em int. Veja o exemplo:
u n s i g n e di n tc o n t a d o r=0 ; c o n t a d o r=c o n t a d o r-1 ;

No exemplo acima, contador contm o binrio 0000 0000 0000 0000b e ao se subtrair 1, passa a ter o valor 1111 1111 1111 1111b, ou 65,535. O mesmo vale se o valor de contador for 65,535 e for adicionado 1. O valor contido vai rodar e passar a ser 0. Neste caso, perceba que existe um espao de memria determinado para cada tipo de dado e sempre que o dado arquivado neste espao for maior do que o espao reservado, a parte mais significativa vai ser perdida ficando apenas a parte menos significativa de mesmo tamanho do espao determinado para o tipo. long: Ocupa quatro bytes e pode conter valores entre -2,147,483,648 e 2,147,483,647, ou, -231 e 231-1. E assim como ocorre com int, o bit mais significativo usado para sinal. unsigned long: Ocupa quatro bytes e pode contar valores entre 0 e 4,294,967,295, ou 0 e 232-1. O que vale salientar o fato de ocorrerem os mesmo problemas de int e unsignet int quando trabalhamos com os valores da borda mxima e mnima. boolean: O tipo boolean deveria representar valores binrios, podendo receber true ou false , porm, a linguagem C diz que o tipo booleano ocupa um byte inteiro para representar um nico bit, e portanto no deve ser usado, uma vez que o uso de operaes lgicas podem fazer um byte representar 8 bits distintos de forma muito mais eficiente, do ponto de vista do consumo de memria. byte: O tipo byte, como o nome diz, ocupa um nico byte e serve para arquivar nmeros inteiros sem sinal com valores entre 0 e 255, ou 0 e 28-1. char:

Ocupa um nico byte e serve para arquivar letras. A grande caracterstica de char o fato dele arquivar letras na forma de nmeros, conforme a tabela ASCII, e deve ser usado com aspas simples. Apenas perceba o fato de char ser um tipo com sinal, onde o bit mais significativo usado como sinal de positivo, 0, e negativo, 1. Por isto, os valores armazenados vo de -128 a +127, ou -27 e 27-1. Exemplo: char letra = A; // valor 65 decimal. unsigned char: unsigned char um tipo equivalente ao tipo byte e pode arquivar valores entre 0 e 255, ou 0 e 28. A dica o fato do grupo Arduino recomendar o uso de byte em vez de unsigned char. word: word um tipo meio fora de padro, pois, ele no leva o modificador unsigned mesmo sendo um tipo sem sinal. Na prtica, como ele ocupa dois bytes, ele uma cpia de unsigned int. long: Ocupa quatro bytes e pode arquivar nmeros entre -2,147,483,648 a 2,147,483,647, ou -231 e 231-1. Exemplo: long velocidadeDaLuz = 186000L; L representa um nmero longo e ser visto mais adiante. unsigned long: Ocupa quatro bytes e pode ocupar meros entre 0 e 4,294,967,295, ou 0 e 232-1. float e double: float e double so nmeros de ponto flutuante, os no inteiros, porm, na linguagem C / C++ comum, o double mais preciso do que o float, mas, como o Arduino uma plataforma de 8 bits com pouca memria, ambos os tipos ocupam 4 bytes e tm preciso de 6 a 7 dgitos decimais. Os valores vo de -3.4028235E+38 a 3.4028235E+38, onde E+n representa 10n. Na prtica, eles so usados para ler os dados das entradas analgicas e devem ser usados com muita cautela apenas quando necessrio, pois, ocupam muita memria RAM e exigem um algoritmo muito mais complexo para serem calculados, o que leva muito mais tempo e ocupa muito mais memria de cdigo. Uma outra caracterstica desse tipo de nmero o fato deles no serem precisos e em clculos simples tipo 2.0 + 3.0 a resposta nem sempre vai ser 5.0. Na prtica, pode dar 4.9999 ou 5.0001. Exemplo: float fracao = 1.2345; // float deve obrigatoriamente conter ponto, onde, 3 do tipo int e 3.0 do tipo float ou double. Comentrios sobre tipos:

Uma caracterstica das linguagens C / C++ fato do comportamento dos tipos mudarem de acordo com a capacidade da plataforma, ou seja, no Arduino, o tipo int tem 2 bytes, mas, em uma plataforma maior, o tipo int pode ter 4 ou 8 bytes aceitando nmeros muito maiores. Esta uma caracterstica da linguagem para poupar recursos do equipamento e devido a pouca memria interna do Arduino existe uma distoro entre os tipos unsigned int e word, onde os dois tipos so iguais. Posted in Arduino, Equipe Robtica, Microcontrolador, Robtica Open Core | No Comments You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply
You must be logged in to post a comment.
Search...

Leia-me
Vivemos em uma sociedade mais preocupada em pagar pela salvao de suas almas em igrejas do que apoiar a educao de seus filhos em uma escola de qualidade. Por isto, manter um trabalho social encarregado de levar aulas de qualidade e gratuitas a crianas carentes um trabalho caro e rduo que necessita de sua ajuda. No momento, o trabalho encontra-se ameaado por falta de recursos financeiros e no conta com ajuda de instituies ou patrocinadores. O nosso trabalho: Mantemos na escola estadual Apolnio Sales, no bairro do Ibura em Recife-PE aulas de Matemtica com o Professor Fernando Martins das 9h as 11h, Arduino com C++ das 12h as 15:30h e Robtica com Lego com o Professos Lelino Pontes das 13h as 16h. Como a escola atende a crianas de uma comunidade carente e as aulas acontecem apenas aos sbados, os alunos ganharam kits Arduino, sensores e todo o material necessrio, ao nosso alcance, para poderem estudar, o que inclui os textos contidos nesse blog, e nosso suporte durante a semana. Este vdeo, tambm d uma boa idia do que fazemos. Nele podemos ver o Lelino Pontes ( 4:25 da time line ) falando do nosso trabalho.

Por isto, a cada R$30,00 doados, voc ganhar uma caneca do nosso site e ajudar a manter este site e um projeto social que leva Matemtica, Eletrnica, Arduino e Robtica a adolescentes carentes do bairro do Ibura.

Obrigado, Kemper helmut.kemper@gmail.com

Agradecimento ao Grupo esprita Critas de Piedade, na pessoa do Sr. Jorge Orengo e Esposa, pelo apoio ao projeto e pela contribuio financeira ( R$80,00 ) ajudando com o nosso lanche.

Cursos on-line
Lista de cursos e sites teis aos leitores, que de vez em quando eu uso como referncia nos meus projetos. Vdeo aulas de C++ com Qt, C++, C# e HTML - Bryan Esta uma pgina do Youtube com aulas muito organizadas e que valem a pena pata todos os iniciantes e intermedirios em Qt. Desenvolvimento iOS - Instituto Politcnico de Leiria Curso sobre desenvolvimento de aplicaes para iOS 4 (iPhone, iPad, iPod Touch) criado especificamente para o iTunes U, tendo mais de 8 horas de contedos em vdeo. Comeando com uma introduo linguagem Objective-C, passando pela criao de interfaces grficas, e abordando um conjunto de funcionalidades especficas dos dispositivos, sem esquecer a submisso App Store. Programming Abstractions - Julie Zelenski This course is the natural successor to Programming Methodology and covers such advanced programming topics as recursion, algorithmic analysis, and data abstraction using the C++ programming language, which is similar to both C and Java. If you've taken the Computer Science AP exam and done well (scored 4 or 5) or earned a good grade in a college course, Programming Abstractions may be an appropriate course for you to start [more]

Grupo de e-mail
Para facilitar a comunicao entre os leitores do livro, foi criado o grupo "Muito alm do Arduino", um grupo aberto a todos os que queiram participar. Para mais informaes, visite a pgina do grupo no Google e participe.

Ajude o site a crescer


Para que o trabalho do site possa crescer, necessitamos de sua ajuda.

Por favor, coloque um link nosso no seu site e sempre que gostar de algo compartilhe um link no seu facebook ou twitter, eles nos ajudam a crescer junto ao Google Search e isto muito importante para que possamos arrumar patrocinadores.

Divulgue seu material


Caso voc queira divulgar seu material relacionado eletrnica, basta enviar uma amostra, e se o material for bom, eu escrevo um artigo sobre ele no site.

Anuncie vagas de emprego e cursos


Caso voc tenha vagas de emprego para o pessoal de informtica ou informaes de cursos, basta entrar em contato e divulgamos no mesmo dia. O contato pode ser via meu e-mail pessoal, helmut.kemper@gmail.com, ou comentrio no site

Segurana em Primeiro Lugar


Caro leitor, eletricidade coisa sria e a leitura do texto de segurana obrigatria antes de se usar o contedo contido neste Blog. Compreenda ainda que voc assume todo e qualquer risco de choque eltrico ou de queima de materiais eltricos, eletrnicos ou discretos.

Moderao
Todos os comentrios so moderados e no aceito spam, principalmente de pseudo agncias web que necessitam se aproveitar do trabalho alheio para poder aparecer.

Pginas
Bem Vindo Segurana em Primeiro Lugar Equipe Robtica Arduino Papis de Parede Robtica Open Core ( ROC ) Olimpada Brasileira de Robtica ( OBR ) Robtica Educacional ( REd ) Kits e Experincia dos Leitores ( KEL ) 2013 Kemper.com.br theme by adazing web design