Sie sind auf Seite 1von 29

arduino programao caderno Arduino Caderno de Programao Escrito e compilado por Brian W.

Evans Com informaes ou inspirao tomada de: http://www.arduino.cc http://www.wiring.org.co http://www.arduino.cc/en/Booklet/HomePage http://cslibrary.stanford.edu/101/ Material, incluindo escrito por : Paul Badger Massimo Banzi Hernando Barragn David Cuartielles Tom Igoe Daniel Jolliffe Todd Kurt David Mellis e outros publicado em: Primeira Edio agosto 2007 Segunda Edio setembro 2008 12c bao Esta obra est licenciada sob a Creative Commons Atribuio- Compartilhamento pela mesma licena 2.5 . Para ver uma cpia desta licena, visite:

http://creativecommons.org/licenses/by-sa/2.5/ Ou envie uma carta para: Creative Commons 171 Second Street , Suite 300 San Francisco , Califrnia, 94105 , EUA contedo estrutura estrutura 7 setup () 7 loop ( ) 7 funes 8 {} Chaves 8 , Vrgula 9 / * ... * / Comentrios bloco 9 / / Linha comenta 9 variveis variveis 10 declarao da varivel 10 escopo de variveis 11 tipos de dados byte 12 int 12 longo 12 flutuador 12 13 matrizes aritmtica aritmtica 14

composto atribuies 14 operadores de comparao 15 operadores lgicos 15 constantes constantes de 16 true / false 16 alto / baixo 16 input / output 16 controle de fluxo se 17 if ... else 18 para 19 enquanto 20 fazer ... enquanto 20 Digital I / O pinMode ( pin , mode) 21 digitalRead (pino ) 22 digitalWrite ( pin , value) 22 E / S analgica analogRead (pino ) 23 analogWrite (pino , valor ) 23 tempo delay ( ms ) 24 millis ( ) 24 matemtica min ( x , y ) 24 max ( x , y ) 24

acaso randomSeed (semente) 25 random ( min, max) 25 serial Serial.begin ( taxa ) 26 Serial.println ( dados ) 26 apndice sada digital 29 entrada digital 30 alta corrente de sada 31 sada PWM 32 entrada potencimetro 33 entrada resistor varivel 34 sada servo 35 prefcio Isto serve como um computador porttil , fcil de utilizar referncia programao conveniente para a estrutura de comando e de sintaxe bsica do microcontrolador Arduino . Para mant-lo simples , certas excluses foram feitas que fazem essa referncia de um novato melhor usado como uma fonte secundria ao lado de outros sites , livros , oficinas, ou classes . Esta deciso levou a uma ligeira nfase no uso do Arduino para fins autnomos e , por exemplo, exclui os usos mais complexos de arrays ou formas avanadas de comunicao serial. Comeando com a estrutura bsica do C derivado linguagem de programao do Arduino , este notebook continua a descrever a sintaxe dos elementos mais comuns da lngua e ilustra o seu uso com exemplos e fragmentos de cdigo . Isto inclui muitas funes da biblioteca central seguido por um apndice com esquemas de amostragem e os programas de arranque . O formato geral complementa O'Sullivan e Igoe da Computao , sempre que possvel Fsica. Para uma introduo ao Arduino e design interativo , consulte Banzi de Introduo ao Arduino , tambm conhecido como o Arduino Booklet . Para os corajosos poucos interessado nos meandros da programao em C, Kernighan e Ritchie The C Programming Language , segunda edio , bem como do Prinz e Crawford C em poucas palavras , fornecer algumas dicas sobre a sintaxe programao original . Acima de tudo, este notebook no teria sido possvel sem a grande comunidade de fabricantes de massa e corte de material original pode ser encontrada no site do Arduino , playground, e um frum em http://www.arduino.cc .

estrutura | 7 estrutura A estrutura bsica da linguagem de programao Arduino relativamente simples e executado em pelo menos duas partes . Estas duas peas necessrias , ou funes , coloque blocos de instrues . void setup () { declaraes ; } void loop () { declaraes ; } Onde setup () a preparao , loop ( ) a execuo . Ambas as funes so necessrios para que o programa funcione . A funo de configurao deve seguir a declarao de todas as variveis no incio do programa. a primeira funo a ser executada no programa, executado apenas uma vez, e usado para definir pinMode ou inicializar a comunicao serial. A funo loop segue prximo e inclui o cdigo a ser executado de forma contnua - leitura de entradas , provocando sadas , etc Esta funo o ncleo de todos os programas do Arduino e faz a maior parte do trabalho . setup () A funo setup () chamado uma vez quando o programa comea . Use-o para inicializar modos de pino , ou comear a srie. Deve ser includo em um programa, mesmo se no houver instrues a serem executadas . void setup () { pinMode ( pin , OUTPUT ) / / define o ' pin' como sada } loop ( )

Depois de chamar a funo setup () , a funo loop ( ) faz exatamente o que seu nome sugere, e loops consecutivamente , permitindo que o programa para mudar , responder e controlar a placa Arduino . void loop () { digitalWrite ( pin , HIGH) ; ' pin' / / voltas em delay ( 1000) ; / / pausa por um segundo digitalWrite ( pin , LOW ); ' pin' / / Desliga delay ( 1000) ; / / pausa por um segundo } funes Uma funo um bloco de cdigo que tem um nome e um bloco de instrues que so executadas quando a funo chamada . As funes void setup () e void loop () j foram discutidas e outras funes built-in ser discutido mais tarde . As funes personalizadas podem ser escritas para realizar tarefas repetitivas e reduzir a desordem em um programa. As funes so declarados pela primeira declarando o tipo de funo . Este o tipo de valor a ser retornado pela funo , como 'int' para uma funo de tipo inteiro. Se nenhum valor deve ser devolvido o tipo de funo seria nula . Aps tipo , declarar o nome dado funo e entre parnteses qualquer parmetro que est sendo passado para a funo. digite functionName ( parmetros ) { declaraes ; } A seguinte funo delayVal tipo inteiro () usado para definir um valor de atraso em um programa de ler o valor de um potencimetro. Primeiro, ele declara uma varivel local v , v define o valor do potencimetro que d um nmero entre 0-1023 , depois divide esse valor por 4 para um valor final entre 0-255 , e finalmente retorna esse valor de volta para o programa principal . int delayVal ( ) { int v; / / cria varivel 'v' temporrio v = analogRead (pote ) / / valor do potencimetro ler

v / 4 = / / converte 0-1023 a 0-255 voltar v; / / retorna valor final } {} Chaves Chaves ( tambm referida como apenas " chaves " ou " chaves ") definem o incio eo fim de blocos de funes e blocos de instruo , como a void loop () e os para e se declaraes. tipo de funo () { declaraes ; } Uma chave de abertura { deve ser sempre seguido por uma chave de fechamento } . Isso muitas vezes referido como as chaves sendo equilibrado . Suspensrios desequilibradas muitas vezes pode levar a erros de compilador , impenetrveis enigmticas que s vezes pode ser difcil de rastrear em um grande programa. O ambiente Arduino inclui um recurso conveniente para verificar o saldo de chaves. Basta selecionar uma cinta , ou mesmo clique no ponto de insero imediatamente aps uma cinta, e seu companheiro lgico ser destacado. 8 | estrutura , ponto e vrgula Um ponto e vrgula deve ser usada para acabar com uma declarao e elementos separados do programa. Um ponto e vrgula tambm usada para separar elementos em um loop for . int x = 13 / / declara varivel 'x' como o inteiro 13 Nota: Esquecendo-se de acabar com uma linha em um ponto e vrgula ir resultar em um erro do compilador. O texto de erro pode ser bvia, e se referem a um ponto e vrgula faltando, ou talvez no . Se um erro do compilador impenetrvel ou aparentemente ilgico surge, uma das primeiras coisas a verificar um ponto e vrgula em falta , perto da linha onde o compilador reclamou. Comentrios / * ... * / bloco Bloqueie comentrios ou comentrios multi- linha , so reas de texto ignorados pelo programa e so utilizados para grandes descries de texto de cdigo ou comentrios que ajudam os outros a entender as partes do programa . Eles comeam com / * e terminam com * / e pode abranger vrias linhas . / * Isto um comentrio de bloco fechado

no se esquea do comentrio de fechamento eles tm que ser equilibrado ! */ Como os comentrios so ignorados pelo programa e no ter espao de memria que deve ser utilizada com generosidade e tambm pode ser usado para "comentar " blocos de cdigo para fins de depurao . Nota: Embora seja possvel para incluir comentrios de linha nica dentro de um bloco de comentrio , colocando um segundo bloco de comentrio no permitido. Comentrios / / linha nica linha comenta comeam com / / e termina com a seguinte linha de cdigo. Como blocos de comentrios , eles sero ignorados pelo programa e no ter espao de memria . / / Esta uma nica linha de comentrio Comentrios de linha nica so muitas vezes utilizados depois de uma declarao vlida para fornecer mais informaes sobre o que a declarao realiza ou para fornecer um lembrete futuro. estrutura | 9 10 | variveis variveis Uma varivel uma forma de nomear e armazenar um valor numrico para uso posterior pelo programa. Como o seu xar sugere, as variveis so nmeros que podem ser continuamente alteradas ao contrrio de constantes cujo valor nunca muda. Uma varivel dever ser declarada e, opcionalmente, o valor atribudo a necessidade de ser armazenado . O cdigo a seguir declara uma varivel chamada inputVariable e , em seguida, atribui o valor obtido no pino de entrada analgica 2: int inputVariable = 0; / / declara uma varivel e / / Atribui o valor de 0 inputVariable = analogRead (2); varivel / / set para o valor de / / Pino analgico 2 ' InputVariable ' a prpria varivel. A primeira linha declara que ele ir conter um int , short para o nmero inteiro. A segunda linha define a varivel com o valor no pino analgico 2. Isso faz com que o valor de pino 2 acessveis em outras partes do cdigo . Uma vez que uma varivel foi atribudo , ou re- atribudo , voc pode testar o seu valor para ver se ele atende certas condies, ou voc pode usar o seu valor diretamente. Como exemplo

para ilustrar trs operaes teis com variveis, os seguintes testes de cdigo se o inputVariable inferior a 100 , se for verdade que atribui o valor 100 a inputVariable , em seguida, define um atraso baseado em inputVariable que agora um mnimo de 100: if ( inputVariable <100) / / testa varivel , se inferior a 100 { inputVariable = 100 / / se verdadeiro atribui valor de 100 } delay ( inputVariable ) / / utiliza como varivel atraso Nota: As variveis devem receber nomes descritivos , para tornar o cdigo mais legvel. Nomes de variveis como tiltSensor ou boto ajudar o programador e qualquer outra pessoa que leia o cdigo para entender o que a varivel representa. Os nomes das variveis como var ou valor , por outro lado , pouco fazem para tornar o cdigo legvel e s so utilizados aqui como exemplos . Uma varivel pode ser chamado de qualquer palavra que no j uma das palavras-chave na linguagem Arduino . declarao da varivel Todas as variveis tm de ser declarado antes que eles possam ser utilizados . Declarar uma varivel significa definir seu tipo de valor , como em int, long , float, etc , estabelecendo um nome especificado e, opcionalmente, a atribuio de um valor inicial. Isso s precisa ser feito uma vez em um programa, mas o valor pode ser alterado a qualquer momento usando a aritmtica e vrias atribuies . O exemplo a seguir declara que inputVariable um int, ou tipo inteiro , e que seu valor inicial igual a zero . Isso chamado de atribuio simples . int inputVariable = 0 ; Uma varivel pode ser declarada em vrios locais ao longo do programa e onde esta definio ocorre determina quais partes do programa pode usar a varivel . escopo de variveis Uma varivel pode ser declarada no incio do programa , antes void setup () , localmente dentro de funes, e , por vezes, dentro de um bloco de declarao , como para loops. Quando a varivel declarada determina o alcance varivel , ou a capacidade de certas partes de um programa para fazer uso da varivel . Uma varivel global aquele que pode ser visto e utilizado por cada funo e instruo de um programa . Esta varivel declarado , no incio do programa , antes da configurao da funo (). Uma varivel local aquela que definida dentro de uma funo ou como parte de um loop for . Ele s visvel e s pode ser usado dentro da funo em que foi declarada. Por

conseguinte, possvel ter duas ou mais variveis do mesmo nome , em diferentes partes do mesmo programa , que contm valores diferentes . A garantia de que apenas uma funo tem acesso a suas variveis simplifica o programa e reduz o potencial de erros de programao . O exemplo a seguir mostra como declarar alguns tipos diferentes de variveis e demonstra a visibilidade de cada varivel : valor int / / 'valor' visvel / / Para qualquer funo void setup () { / / Nenhuma configurao necessria } void loop () { for (int i = 0; i < 20 ;) / / ' i' s visvel {/ / Dentro do loop for i++; } flutuar f / / 'f' s visvel } / / Loop dentro variveis | 11 12 | tipos de dados byte Byte armazena um valor numrico de 8 bits , sem casas decimais. Eles tm uma gama de 0-255 . byte someVariable = 180 / / declara ' someVariable ' / / Como um tipo byte int Inteiros so o tipo de dados primrio para o armazenamento de nmeros sem pontos decimais e armazenar um valor de 16 bits com uma gama de 32.767 para 32.768 .

int someVariable = 1500 / / declara ' someVariable ' / / Como um tipo integer Nota: variveis Integer vai rolar se forado passado os limites mximos ou valores mnimos de uma atribuio ou comparao. Por exemplo, se x = 32767 e uma declarao posterior adiciona 1 para x, x = x + 1 ou x + +, x , ento, capotamento e igual -32.768 . longo Prolongado tipo de dados de tamanho para inteiros longos , sem pontos decimais , armazenados em um valor de 32 bits com um intervalo de 2147483647 a -2147483648 . longo someVariable = 90000 / / declara ' someVariable ' / / Como um tipo long flutuador Um tipo de dados para nmeros de ponto flutuante , ou nmeros que tm um ponto decimal. Nmeros de ponto flutuante tm maior resoluo do que nmeros inteiros e so armazenados como um valor de 32 bits com um intervalo de 38 a 3,4028235 3,4028235 +38. flutuar someVariable = 3.14 / / declara ' someVariable ' / / Como um tipo de ponto flutuante Nota: Os nmeros de ponto flutuante no so exatas , e podem produzir resultados estranhos quando comparados. Matemtica de ponto flutuante tambm muito mais lento do que matemtica inteiro na realizao de clculos , por isso deve ser evitado , se possvel. matrizes Uma matriz um conjunto de valores que so acessados com um nmero de ndice . Qualquer valor na matriz pode ser chamado chamando o nome da matriz eo nmero de ndice do valor. Arrays so indexados a zero , com o primeiro valor na matriz comeando no nmero de ndice 0 . Uma matriz precisa de ser declarada e, opcionalmente, os valores atribudos antes que eles possam ser utilizados . int Matriz [ ] = { valor0 , valor1, valor2 ...} Da mesma forma , possvel declarar uma matriz , declarando o tipo eo tamanho da matriz e, posteriormente, atribuir valores a uma posio de ndice : int Matriz [ 5] / / declara inteiro conjunto w / 6 posies Matriz [ 3] = 10; / / atribui o quarto ndice o valor 10 Para recuperar um valor de uma matriz, atribuir uma varivel para a posio array e ndice : x = Matriz [ 3] / / x agora igual a 10

As matrizes so muitas vezes utilizados em loops , onde o incremento do contador tambm utilizado como o ndice de posio para cada valor de matriz . O exemplo a seguir usa uma matriz para piscar um LED. Usando um loop for , o contador comea em 0, escreve o valor contido na posio de ndice 0 no flicker array [ ] , neste caso 180, para o pino PWM 10 , faz uma pausa para 200ms , ento se move para a prxima posio de ndice. int ledPin = 10 / / LED no pino 10 byte de cintilao [ ] = { 180 , 30 , 255 , 200 , 10 , 90 , 150 , 60 } ; / / Acima conjunto de 8 void setup () / / valores diferentes { pinMode ( ledPin , OUTPUT); pin / / configura SADA } void loop () { for (int i = 0; i < 7; i + +) / / loop igual ao nmero {/ / De valores na matriz analogWrite ( ledPin , cintilao [i] ); valor do ndice / / gravao delay (200) ; 200ms / / pausa } } tipos de dados | 13 14 | aritmtica aritmtica Operadores aritmticos incluem adio, subtrao , multiplicao e diviso. Eles retornam a soma , diferena , produto ou quociente (respectivamente) de dois operandos. y = y + 3; x = x - 7; i = j * 6; r=r/5;

A operao realizada utilizando o tipo de dados dos operandos , por isso , por exemplo , 9/ 4 resultados em 2 em vez de 2,25 desde 9 e 4 so inteiros e so incapazes de usar pontos decimais. Isto tambm significa que a operao pode transbordar se o resultado maior do que o que pode ser armazenado no tipo de dados . Se os operandos so de diferentes tipos , o tipo maior usado para o clculo . Por exemplo , se um dos nmeros ( operandos) so do tipo de flutuador e a outra do tipo inteiro , ponto flutuante matemtica vai ser usado para o clculo . Escolha tamanhos variveis que so grandes o suficiente para manter os maiores resultados de seus clculos. Saiba em que ponto a varivel vai rolar e tambm o que acontece no outro sentido , por exemplo (0 - 1) OU ( 0-32768 ) . Para matemtica que requer fraes , use variveis de flutuao , mas esteja ciente de suas desvantagens: velocidades de grande porte e de computao lento. Nota: Use o operador de converso , por exemplo, (int) myFloat para converter um tipo de varivel para outro em tempo real. Por exemplo , i = ( int ) 3,6 ir definir i igual a 3 . atribuies compostos Atribuies compostos combinam uma operao aritmtica com uma atribuio de varivel . Estes so comumente encontrados em loops , conforme descrito mais tarde. As atribuies de compostos mais comuns incluem: x + + / / o mesmo que x = x + 1 , ou incrementos de x por um x - / / o mesmo que x = x - 1, ou diminui x por -1 x + y = / / o mesmo que x = x + y , ou incrementos de x por y + x - = y / / o mesmo que x = x - y, x ou diminui por -y x * = y / / o mesmo que x = x * y , ou multiplica x por y x / y = / / o mesmo que x = x / y , ou divide x por y Nota: Por exemplo, x * = 3 triplicaria o valor antigo de x e re- atribuir o valor resultante para x . operadores de comparao Comparaes de uma varivel ou constante contra outro so muitas vezes utilizados em if para testar se uma condio especificada for verdadeira. Nos exemplos encontrados nas pginas seguintes , ? utilizado para indicar qualquer uma das seguintes condies : 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 menor ou igual a y x > = y / / x maior do que ou igual a y operadores lgicos Os operadores lgicos so geralmente uma maneira de comparar duas expresses e retornar VERDADEIRO ou FALSO, dependendo do operador. Existem trs operadores lgicos , AND, OR e NOT , que so muitas vezes utilizados em if : E lgico : if ( x > 0 && x < 5) / / true somente se ambos / / Expresses so verdadeiras Lgico OR: if ( x > 0 | | y> 0) / / true se qualquer / / Expresso verdadeira NOT lgica: if (! x > 0) / / true somente se / / Expresso falsa aritmtica | 15 16 | constantes constantes A linguagem Arduino tem alguns valores pr-definidos , que so chamadas constantes. Eles so usados para tornar os programas mais fceis de ler . Constantes so classificados em grupos . true / false Estes so constantes booleanas que definem nveis lgicos . FALSE facilmente definido como 0 (zero ), enquanto TRUE muitas vezes definido como 1, mas tambm pode ser qualquer outra coisa , exceto zero. Assim, em um sentido booleano , -1 , 2 e -200 so todos tambm definido como TRUE. if ( b == TRUE); { doSomething ; } alta / baixa

Essas constantes definem nveis de pino alto ou baixo e so usados durante a leitura ou a escrita para os pinos digitais. ALTA definida como nvel lgico 1 , ON, ou 5 volts enquanto LOW nvel lgico 0 , OFF ou 0 volts. digitalWrite (13, HIGH); input / output Constantes usadas com a funo pinMode () para definir o modo de um pino digital como entrada ou sada . pinMode (13, OUTPUT); se if testar se uma determinada condio for alcanada, como um valor analgico de ser acima de um determinado nmero, e executa todas as declaraes dentro dos colchetes , se a afirmao verdadeira . Se for falso o programa pula o comunicado. O formato para um caso de teste : if ( someVariable ? valor ) { doSomething ; } O exemplo acima compara algumaVariavel para outro valor , o que pode ser uma varivel ou constante . Se a comparao , ou condio entre parnteses for verdadeira, os comandos dentro dos colchetes so executados. Se no , o programa salta sobre eles e continua aps os suportes . Nota : Cuidado do uso acidental ' = ' , tal como no caso ( x = 10 ) , enquanto tecnicamente vlida , define a varivel de x para o valor de 10 e , como resultado sempre verdadeira . Em vez disso, use '==' , como em if ( x == 10), que s testa se x acontece para igualar o valor 10 ou no. Pense em '=' como " igual a" oposio a '==' ser " igual a" . controle de fluxo | 17 if ... else if ... else permite ' ou-ou ' decises a serem tomadas . Por exemplo, se voc quiser testar uma entrada digital, e fazer uma coisa se a entrada foi HIGH ou em vez fazer outra coisa se a entrada era baixa , voc escreveria que desta forma: if ( InputPin == HIGH) { doThingA ; }

outro { doThingB ; } mais tambm pode preceder outro se teste, de modo que mltipla, testes mutuamente exclusivos pode ser executado ao mesmo tempo . ainda possvel ter um nmero ilimitado de esses ramos outro lugar. Lembre-se , porm, apenas um conjunto de declaraes ser executada de acordo com os testes de condio : if ( InputPin <500 ) { doThingA ; } else if ( InputPin > = 1000) { doThingB ; } outro { doThingC ; } Nota: Um comando if simplesmente testa se a condio dentro do parntese verdadeira ou falsa . Esta indicao pode ser qualquer instruo vlida C , como no primeiro exemplo , se ( InputPin == ALTA ) . Neste exemplo, a instruo if somente verifica para ver se de fato a entrada especificada est no nvel lgico alto , ou 5 v 18 | controle de fluxo para A instruo for usado para repetir um bloco de instrues entre chaves de um determinado nmero de vezes . Um contador de incremento freqentemente usado para aumentar e terminar o loop. H trs partes, separadas por ponto e vrgula (;) , para o cabealho para loop: for ( inicializao; condio ; expresso) {

doSomething ; } A inicializao de uma varivel local, ou o contador de incremento, acontece a primeira e nica vez. Cada vez atravs do loop, a seguinte condio testada. Se a condio for verdade, as seguintes declaraes e expresso so executados e a condio testada novamente. Quando a condio se torna falsa , o loop termina. O exemplo a seguir inicia o inteiro i em 0, testa para ver se eu ainda menor do que 20 e se for verdade, incrementos i em 1 e executa as instrues entre : for (int i = 0; i < 20; i + +) / / declara i , os testes se menos {/ / De 20, incrementos i por 1 digitalWrite (13, HIGH); / / vira pin 13 na delay ( 250 ) / / faz uma pausa por 1 /4 segundo digitalWrite (13, LOW) ; / / vira pin 13 off delay ( 250 ) / / faz uma pausa por 1 /4 segundo } Nota: A C loop for muito mais flexvel do que loops encontrados em algumas outras linguagens de computador , incluindo BASIC. Qualquer um ou todos os trs elementos de cabealho pode ser omitida , embora sejam necessrias a ponto e vrgula . Tambm as declaraes para a inicializao , condio e expresso pode ser quaisquer declaraes vlidas C e as variveis independentes . Estes tipos de incomum para declaraes podem fornecer solues para alguns problemas de programao raras. controle de fluxo | 19 enquanto while ir repetir continuamente e infinitamente , at que a expresso dentro dos parnteses se torna falsa . Algo precisa mudar a varivel testada , ou o loop while nunca vai sair. Isso poderia ser em seu cdigo , como uma varivel incrementado , ou uma condio externa , tais como teste de um sensor. while ( ? valor someVariable ) { doSomething ; }

Os testes a seguir exemplo, se ' someVariable ' inferior a 200 e se for verdade executa os comandos dentro dos colchetes e continuar at looping ' someVariable ' no mais menos de 200. enquanto ( SomeVariable <200 ) / / testa se a menos de 200 { declaraes / / executa fechados; doSomething someVariable + + / / Incrementa a varivel em 1 } do ... while O circuito do um lao inferior impulsionada que funciona da mesma maneira que o circuito , enquanto , com a excepo de que a condio testada no final do ciclo, de modo a fazer circular ir sempre executar pelo menos uma vez . fazer { doSomething ; } While ( valor someVariable ? ); O exemplo a seguir atribui readSensors () para a varivel ' x', faz uma pausa por 50 milsimos de segundo, em seguida, faz um loop indefinidamente at que 'x' no mais menos de 100: fazer { x = readSensors () / / atribui o valor de / / ReadSensors ( ) ax delay ( 50 ) / / faz uma pausa de 50 milissegundos } Enquanto ( x < 100 ) / / lacetes se x inferior a 100 20 | controle de fluxo E / S Digital | 21 pinMode ( pin , mode) Usado em void setup () para configurar um pino especificado se comportar tanto como uma entrada ou uma sada . pinMode ( pin , OUTPUT); ' pin' / / configura a sada

Pinos digitais do Arduino padro para entradas , para que eles no precisam ser explicitamente declarados como entradas com pinMode (). Pinos configurados como entrada esto a ser dito em um estado de alta impedncia . Existem tambm resistncias de pull-up 20K conveniente construdas no chip Atmega que pode ser acessado a partir de software. Estes resistores pull-up internos so acessados da seguinte forma : pinMode ( pin , INPUT ); / / set ' pin ' para entrada digitalWrite ( pin , HIGH) ; / / ligue resistores de pull-up Resistores Pullup seria normalmente utilizado para conectar insumos como switches. Observe no exemplo acima que no converte o pino para uma sada , apenas um mtodo para ativar os internos pull-ups . Pinos configurados como OUTPUT esto a ser dito em um estado de baixa impedncia e pode fornecer 40 mA ( miliamperes ) de corrente para outros dispositivos / circuitos . Este corrente suficiente para brilhantemente luz um LED ( no se esquea do resistor em srie ) , mas no o suficiente atual para executar a maioria dos rels, solenides, ou motores . Curto-circuitos nos pinos do Arduino e corrente excessiva pode danificar ou destruir o pino de sada , ou danificar todo o chip Atmega . Muitas vezes, uma boa idia para conectar um pino de sada para um dispositivo externo em srie com um resistor de 470 ou 1k . digitalRead (pino ) L o valor de um pino digital especificado com o resultado de alto ou baixo . O pino pode ser especificado como uma varivel ou constante ( 0-13 ) . valor = digitalRead (Pin ), ' valor' / / configura igual a / / O pino de entrada digitalWrite ( pin , value) Sadas ou nvel lgico HIGH ou LOW em ( liga ou desliga ) um pino digital especificado. O pino pode ser especificado como uma varivel ou constante ( 0-13 ) . digitalWrite ( pin , HIGH) ; ' pin' / / configura a alta O exemplo a seguir l um boto ligado a uma entrada digital e acende um LED conectado a uma sada digital quando o boto foi pressionado : int levou = 13 / / conectar LED ao pino 13 int pin = 7; / / conecta boto ao pino 7 int valor = 0; / / varivel para armazenar o valor de leitura void setup ()

{ pinMode (liderada , OUTPUT) ; / / configura o pino 13 como sada pinMode ( pin , INPUT ) / / define o pino 7 como entrada } void loop () { valor = digitalRead (pino ); ' valor' / / configura igual a / / O pino de entrada digitalWrite ( led, value); / / configura ' levou ' para o } / / O valor do boto 22 | E / S Digital E / S analgica | 23 analogRead (pino ) L o valor de um pino analgico especificado com uma resoluo de 10 bits. Esta funo s funciona com o analgico em pinos (0-5) . Os valores inteiros resultantes variam de 0 a 1023. valor = analogRead (pino ); / / configura ' valor' igual a ' pin' Nota: pinos analgicos , ao contrrio os digitais , no precisam ser declarados pela primeira vez como entrada ou OUTPUT. analogWrite (pino , valor ) Grava um valor pseudo- analgica usando hardware habilitado modulao de largura de pulso (PWM) para um pino de sada marcado PWM . Em Arduinos mais recentes com o chip ATmega168 , essa funo funciona nos pinos 3, 5, 6, 9 , 10 e 11. Arduinos mais velhos com uma ATmega8 suportam apenas pinos 9, 10 e 11. O valor pode ser especificado como uma varivel ou constante com um valor entre 0-255 . analogWrite (pino , valor ); / / escreve ' valor' para analgico ' pin' Um valor de 0 gera uma sada constante de 0 volts no pino especificado , um valor de 255 gera uma sada constante de 5 volts no pino especificado . Para valores entre 0 e 255 , o pino alterna rapidamente entre 0 e 5 volts - quanto maior for o valor, mais frequentemente o pino ALTO ( 5 volts ) . Por exemplo , um valor de 64 0 volts ser de trs quartos do tempo , e 5 volts quarto do tempo , um valor de 128 ser em metade do tempo 0 e 255 da metade do tempo , e um valor de 192 vai ser 0 volts quarto do tempo e 5 volts trs quartos do tempo.

Porque esta uma funo de hardware, o pino ir gerar uma onda constante aps uma chamada para analogWrite em segundo plano at a prxima chamada para analogWrite ( ou uma chamada para digitalRead ou digitalWrite no mesmo pino ) . Nota: pinos analgicos , ao contrrio os digitais , no precisam ser declarados pela primeira vez como entrada ou OUTPUT. O exemplo a seguir l um valor analgico de um pino de entrada analgico , converte o valor de diviso por quatro , e gera um sinal PWM para um pino de PWM : int levou = 10 / / LED com 220 resistor no pino 10 int pin = 0; / / potencimetro no pino analgico 0 valor int / / valor para a leitura void setup () { } / / nenhuma configurao necessria void loop () { valor = analogRead (pino ); / / configura ' valor' igual a ' pin' valor / = 4 / / converte para 0-1023 0-255 analogWrite (liderada , value) ; sinal PWM / / imprime a levou } delay ( ms ) Pausa um programa para a quantidade de tempo , conforme especificado em milissegundos , onde 1000 igual a 1 segundo. delay (1000 ) / / aguarda um segundo millis () Retorna o nmero de milissegundos desde a placa Arduino comeou a executar o programa atual como um valor a longo sem sinal. valor = millis (); / / configura ' valor' igual a millis () Nota: Este nmero vai transbordar (reset de volta para zero), depois de cerca de 9 horas. min ( x , y ) Calcula o mnimo de dois nmeros de qualquer tipo de dados e devolve o nmero menor . valor = min (valor, 100 ) / / sets ' valor ' para o menor dos / / ' Valor' ou 100 , garantindo que

/ / Ele nunca fica acima de 100. max ( x , y ) Calcula o mximo de dois nmeros de qualquer tipo de dados e retorna o nmero maior. valor = max (valor, 100 ) / / sets ' valor ' para o maior dos / / ' Valor' ou 100 , garantindo que / / Ele de pelo menos 100 . 24 | tempo e matemtica randomSeed (semente) Define um valor , ou semente, como o ponto de partida para a funo random () . randomSeed (valor) ; / / configura ' valor' como a semente aleatria Como o Arduino capaz de criar um nmero verdadeiramente aleatrio , randomSeed permite que voc coloque uma varivel , constante ou outra funo para a funo aleatria , o que ajuda a gerar mais nmeros aleatrios "aleatrios" . H uma variedade de diferentes sementes , ou funes , que podem ser usados nesta funo , incluindo millis ( ) ou mesmo analogRead ( ) para ler o rudo elctrico por meio de um pino analgico . random ( max) random ( min, max) A funo de reproduo aleatria permite que voc retorne nmeros pseudo-aleatrios dentro de um intervalo especificado pelos valores mnimo e mximo . valor = random (100, 200); ' valor' / / sets a um aleatrio / / Nmero entre 100-200 Nota : Utilize este depois de usar o randomSeed () funo. O exemplo a seguir cria um valor aleatrio entre 0-255 e emite um sinal PWM em um pino PWM igual ao valor aleatrio : int randNumber / / varivel para armazenar o valor aleatrio int levou = 10 / / LED com 220 resistor no pino 10 void setup () { } / / nenhuma configurao necessria void loop () { randomSeed ( millis ()) / / define millis () como semente

randNumber = random (255 ) / / nmero aleatrio 0-255 analogWrite (liderada , randNumber ); sinal PWM / / imprime delay (500 ) / / pausas para meio segundo } aleatrio | 25 Serial.begin ( taxa ) Abre a porta serial e define a taxa de transmisso para a transmisso de dados serial. A taxa de transmisso tpico para se comunicar com o computador de 9600 , embora outras velocidades so suportadas. void setup () { Serial.begin (9600 ) / / abre a porta serial } / / Define a taxa de dados de 9600 bps Nota: Ao utilizar a comunicao serial, pinos digitais 0 (RX ) e 1 ( TX ) no podem ser usados ao mesmo tempo. Serial.println ( dados ) Imprime os dados para a porta serial , seguido por um retorno de carro automtico e alimentao de linha . Este comando assume a mesma forma que Serial.print (), mas mais fcil para a leitura de dados no Monitor de srie . Serial.println ( analogValue ) / / envia o valor de / / ' AnalogValue ' Nota: Para mais informaes sobre as diversas permutaes da Serial.println () e Serial.print () funes por favor consulte o site do Arduino . O seguinte exemplo simples faz uma leitura de Pin0 analgico e envia esses dados para o computador de cada 1 segundo. void setup () { Serial.begin (9600 ) / / define serial para 9600 bps } void loop ()

{ Serial.println ( analogRead (0) ) / / envia valor analgico delay (1000 ) / / faz uma pausa durante 1 segundo } 26 | srie

apndice sada digital Este o programa bsico 'Ol mundo ' usado para simplesmente transformar algo ligado ou desligado. Neste exemplo , um diodo emissor de luz ligado ao pin13 , e piscar a cada segundo . A resistncia pode ser omitido neste pino uma vez que o Arduino tem um construdo dentro int ledPin = 13 / / LED no pino digital 13 void setup () / / executado uma vez { pinMode ( ledPin , OUTPUT ) / / define o pino 13 como sada } void loop () / / executar uma e outra vez { digitalWrite ( ledPin , HIGH) ; / / transforma o LED delay (1000 ) / / faz uma pausa durante 1 segundo digitalWrite ( ledPin , LOW ); / / transforma o LED desligado delay (1000 ) / / faz uma pausa durante 1 segundo } Apndice | 29 entrada digital Esta a forma mais simples de entrada com apenas dois estados possveis : ligado ou desligado. Este exemplo l um simples interruptor ou boto conectado a pin2 . Quando a chave fechada o pino de entrada ler ALTA e ligar um LED. int ledPin = 13 ; pin / / sada para o LED

int inPin = 2 / / pino de entrada (para um switch) void setup () { pinMode ( ledPin , OUTPUT); / / declara LED como sada pinMode ( inPin , INPUT ); / / switch declarar como entrada } void loop () { if ( digitalRead ( inPin ) == HIGH) / / verifica se a entrada for ALTA { digitalWrite ( ledPin , HIGH) ; / / transforma o LED delay ( 1000) ; / / pause por 1 segundo digitalWrite ( ledPin , LOW ); / / transforma o LED desligado delay ( 1000) ; / / pause por 1 segundo } } 30 | apndice alta corrente de sada Por vezes, necessrio para controlar mais do que 40 mA a partir do Arduino . Neste caso, um transistor MOSFET ou poderia ser utilizado para exibir altas cargas de corrente . O exemplo a seguir transforma rapidamente dentro e fora do MOSFET 5 vezes a cada segundo. Nota : O esquema mostra um diodo de motor e de proteco, mas as outras cargas indutivas no pode ser utilizado sem o diodo . int outPin = 5 / / pino de sada para o MOSFET void setup () { pinMode ( outPin , OUTPUT ) / / define pin5 como sada } void loop ()

{ for (int i = 0; i < = 5; i + +) / / loops de 5 vezes { digitalWrite ( outPin , HIGH) ; / / transforma em MOSFET delay ( 250); / / pausa 1 /4 segundo digitalWrite ( outPin , LOW ); / / transforma MOSFET off delay ( 250); / / pausa 1 /4 segundo } delay (1000 ) / / faz uma pausa um segundo } apndice | 31 sada PWM Pulsewidth Modulation ( PWM) uma maneira de falsificar uma sada analgica pulsando a sada . Isto poderia ser usado para diminuir e iluminar um LED ou mais tarde para controlar um servo-motor . O exemplo a seguir lentamente clareia e escurece um LED usando loops . int ledPin = 9; / / pin PWM para o LED void setup () { } / / nenhuma configurao necessria void loop () { for (int i = 0; i < = 255 ; i + +) / / Valor de ascendente para i { analogWrite ( ledPin , i); / / configura Brightess nvel para i delay (100); / / pausas para 100ms } for (int i = 255; i> = 0; i - ) / / descendente valor para i { analogWrite ( ledPin , i); / / configura Brightess nvel para i delay (100); / / pausas para 100ms

} } 32 | apndice entrada potencimetro Usando um potencimetro e um de analgico para digital converso do Arduino (ADC) pinos , possvel ler os valores analgicos 0-1024 . O exemplo a seguir usa um potencimetro para controlar a taxa de um LED de piscar. int potPin = 0 / / pino de entrada para o potencimetro int ledPin = 13 ; pin / / sada para o LED void setup () { pinMode ( ledPin , OUTPUT); / / declara ledPin como OUTPUT } void loop () { digitalWrite ( ledPin , HIGH) ; / / transforma em ledPin delay ( analogRead ( potPin ) ); programa / / pausa digitalWrite ( ledPin , LOW ); / / transforma ledPin off delay ( analogRead ( potPin ) ); programa / / pausa } Apndice | 33 entrada resistor varivel Os resistores variveis incluem sensores CdS luz, termistores , sensores de cabo flexvel, e assim por diante . Este exemplo faz uso de uma funo de ler o valor analgico e definir um tempo de atraso . Isto controla a velocidade com que um LED ilumina e escurece . int ledPin = 9; / / pin PWM para o LED int analogPin = 0; / / resistor varivel no pino analgico 0 void setup () { } / / nenhuma configurao necessria void loop () {

for (int i = 0; i < = 255 ; i + +) / / Valor de ascendente para i { analogWrite ( ledPin , i); / / configura Brightess nvel para i delay ( delayVal () ) / / recebe o valor do tempo e pausas } for (int i = 255; i> = 0; i - ) / / descendente valor para i { analogWrite ( ledPin , i); / / configura Brightess nvel para i delay ( delayVal () ) / / recebe o valor do tempo e pausas } } int delayVal ( ) { int v; / / cria varivel temporria v = analogRead ( analogPin ) / / ler o valor analgico v / = 8; / / converter para 0-1024 0-128 voltar v / / retorna valor final 34 } | apndice sada do servo Servos do passatempo so um tipo de motor auto-suficiente que pode mover-se em um arco de 180 . Tudo que necessrio um pulso enviado a cada 20ms . Este exemplo usa uma funo servoPulse para mover o servo de 10 -170 e vice-versa . int servoPin = 2; / / servo conectado ao pino digital 2 int MeuAngulo / / ngulo do servo aproximadamente 0-180 / / varivel de funo servoPulse ; int pulsewidth void setup () { pinMode ( servoPin , OUTPUT ) / / define o pino 2 como sada

} servoPulse void ( int servoPin , int MeuAngulo ) { pulsewidth = ( MeuAngulo * 10) + 600 / / determina atraso digitalWrite ( servoPin , HIGH) ; / / configura servo alta delayMicroseconds ( Largura de Pulso ) / / microssegundo pausa digitalWrite ( servoPin , LOW ); / / configura servo baixo } void loop () { / / Servo comea em 10 e roda de 170 graus for ( MeuAngulo = 10; MeuAngulo < = 170 ; MeuAngulo + +) { servoPulse ( servoPin , MeuAngulo ) / / enviar pino eo ngulo delay ( 20 ) / / ciclo de atualizao } / / Servo comea em 170 graus e gira a 10 graus for ( MeuAngulo = 170 ; MeuAngulo > = 10; MeuAngulo -) { servoPulse ( servoPin , MeuAngulo ) / / enviar pino eo ngulo delay ( 20 ) / / ciclo de atualizao } } apndice | 35 Google Tradutor para empresas:Google Toolkit de traduo para appsTradutor de sitesGlobal Market Finder Desativar traduo instantneaSobre o Google TradutorCelularPrivacidadeAjudaEnv

Das könnte Ihnen auch gefallen