Sie sind auf Seite 1von 19

INSTITUTO FEDERAL DE EDUCAO DE SO PAULO CAMPUS CUBATO

ROTEIRO DE AULAS DE MICROCONTROLADORES DISCIPLINA MICROCONTROLADORES APOSTILA 3 ARDUINO Organizado por Prof. Walter Borysow O QUE O ARDUINO? Arduino uma plataforma fsica de computao de cdigo aberto baseado numa simples placa microcontroladora, e um ambiente de desenvolvimento para escrever o cdigo para a placa. O Arduino pode ser usado para desenvolver objetos interativos, admitindo entradas de uma srie de sensores ou chaves, e controlando uma variedade de luzes, motores ou outras sadas fsicas. Projetos do Arduino podem ser independentes, ou podem se comunicar com software rodando em seu computador (como Flash, Processing, MaxMSP.). Os circuitos podem ser montados mo ou comprados pr-montados; o software de programao de cdigo-livre pode ser baixado de graa. (Fonte: O que Arduino? | Projeto 39 - projeto39.wordpress.com/o-arduino )

A linguagem de programao do Arduino essencialmente C/C++, compatvel com DEVC++, conforme a Lista de Instrues do Arduino abaixo apresentada. O ncleo microcontrolador um AtmelAVR, nas suas vrias verses megaAVR, conforme por exemplo o datasheet abaixo do ATmega 168/328. Porm existem verses de plataformas Arduino disponveis no mercado baseadas em PIC.

PINAGEM:
.

. .

Microcontrolador Voltagem operacional Voltagem de alimentao (recomendada) Voltagem de alimentao (limites) Pinos I/O digitais Pinos de entrada analgica Corrente contnua por pino I/O Corrente contnua para o pino 3.3V Memria flash SRAM EEPROM Velocidade de clock

ATmega328 5V 7-12V 6-20V 14 (dos quais 6 podem ser sadas PWM) 6 40 mA 50 mA 32 KB (2KB usados para o bootloader) 2 KB 1 KB 16 MHz
3

LED pino 13

I / O DIGITAL + PWM

Input ANALGICO Alimentao O Arduino pode ser alimentado pela conexo USB (cabo D) ou por qualquer fonte de alimentao externa. A fonte de alimentao selecionada automaticamente. A alimentao externa (no-USB) pode ser tanto de uma fonte ou de uma bateria. A fonte pode ser conectada com um plug de 2,1mm (centro positivo) no conector de alimentao. Cabos vindos de uma bateria podem ser inseridos nos pinos Gnd (terra) e Vin (entrada de voltagem) do conector de alimentao. A placa pode operar com uma alimentao externa de 6 a 20 volts. Entretanto, se a alimentao for inferior a 7 volts o pino 5V pode fornecer menos de 5 volts e a placa pode ficar instvel. Se a alimentao for superior a 12 volts o regulador de voltagem pode super-aquecer e avariar a placa. A alimentao recomendada de 7 a 12 volts. Os pinos de alimentao so: VIN. Entrada de alimentao para a placa Arduino quando uma fonte externa for utilizada. Voc pode fornecer alimentao por este pino ou, se usar o conector de alimentao, acessar a alimentao por este pino.

5V. A fonte de alimentao utilizada para o microcontrolador e para outros componentes da placa. Pode ser proveniente do pino Vin atravs de um regulador on-board ou ser fornecida pelo USB ou outra fonte de 5 volts (centro positivo). 3V3. Alimentao de 3,3 volts fornecida pelo chip FTDI. A corrente mxima de 50 mA. GND. Pino terra. Memria O ATmega328 tem 32 KB de memria flash para armazenar cdigo (dos quais 2 KB so utilizados pelo bootloader), alm de 2 KB de SRAM e 1 KB of EEPROM (que pode ser lida e escrita atravs da biblioteca EEPROM ). Entrada e Sada Cada um dos 14 pinos digitais da placa Arduino pode ser usado como entrada ou sada usando as funes de pinMode(),digitalWrite(), e digitalRead(). Eles operam com 5 volts. Cada pino pode fornecer ou receber um mximo de 40 mA e tem um resistor pull-up interno (desconectado por padro) de 20-50 kOhms. Alm disso, alguns pinos tm funes especializadas: Serial: 0 (RX) e 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais TTL. Estes pinos so conectados aos pinos correspondentes do chip serial FTDI USB-to-TTL. External Interrupts: 2 e3. Estes pinos podem ser configurados para disparar uma interrupo por um baixo valor, uma elevao ou falling edge ou uma mudana de valor. Veja a funo attachInterrupt() para mais detalhes. PWM: 3, 5, 6, 9, 10, e 11 marcados com #). Fornecem uma sada analgica PWM de 8-bit com a funo analogWrite(). SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estes pinos suportam comunicao SPI, que embora compatvel com o hardware, no est includa na linguagem do Arduino. LED: 13. H um LED j montado e conectado ao pino digital 13. Quando o pino est no valor HIGH, o LED acende; quando o valor est em LOW, ele apaga. O Arduino tem 6 entradas analgicas e cada uma delas tem uma resoluo de 10 bits (i.e. 1024 valores diferentes). Por padro, elas medem de 0 a 5 volts, embora seja possvel mudar o limite superior usando o pino AREF e um pouco de cdigo de baixo nvel. AREF. Referncia de voltagem para entradas analgicas. Usados com analogReference(). Reset. Envie o valor LOW para resetar o microcontrolador. Tipicamente utilizados para adicionar um boto de reset aos shields que bloqueiam o que h na placa. Veja tambm mapeando entre os pinos do Arduino e as portas do ATmega 68 e referncia do ATmega328 (Arduino UNO).

Comunicao Com o Arduino a comunicao com um computador, com outro Arduino ou com outros microcontroladores muito simplificada. O ATmega328 permite comunicao serial no padro UART TTL (5V), que est disponvel nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunicao serial atravs do USB e os drives FTDI (includo no software do Arduino) fornece uma porta COM virtual para o software no computador. O software Arduino inclui um monitor serial que permite que dados simples de texto sejam enviados placa Arduino. Os LEDs RX e TX da placa piscam quando os dados esto sendo transferidos ao computador pelo chip FTDI e a conexo USB (mas no quando h comunicao serial pelos pinos 0 e 1). A biblioteca SoftwareSerial permite comunicao serial por quaisquer dos pinos digitais. O ATmega328 tambm oferece suporte aos padres de comunicao I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; veja a documentao no site do Wiring para mais detalhes. Para usar a comunicao SPI veja a folha de informaes do ATmega328. Programao O Arduino pode ser programado com o software Arduino (download). Para mais detalhes veja referncia e tutoriais. O ATmega328 no Arduino vem pr-gravado com um bootloader que permite enviar novos programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo original STK500 (referncia, C header files). Voc tambm pode programar o ATmega328 atravs do ICSP (In-Circuit Serial Programming) header; veja instrues para mais detalhes. Reset automtico (Software) Algumas verses anteriores do Arduino requerem um reset fsico (pressionando o boto de reset na placa) antes de carregar um sketch. O Arduino projetado de modo a permitir que isto seja feito atravs do software que esteja rodando no computador conectado. O software Arduino usa esta caracterstica para permitir carregar o programa simplesmente pressionando o boto "upload" no ambiente Arduino. Proteo contra sobrecorrente USB O Arduino tem um polifusvel resetvel que protege a porta USB do seu computador contra curto-circuito e sobrecorrente. Apesar da maioria dos computadores possurem proteo interna prpria, o fusvel proporciona uma proteo extra. Se mais de 500mA foram aplicados na porta USB, o fusvel ir automaticamente interromper a conexo at que o curto ou a sobrecarga seja removida.

Fonte: www.poli.br/curso sobre Arduino

NOTA: Ao conectar a placa Arduino, solicitada a configurao da conexo USB, que deve ser o driver fornecido pelo fabricante da placa (arquivo .inf), e deve ser instalada na COM3. Exemplo de programa (pisca-led)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

// incio do cdigo byte LED = 13; void setup () { pinMode ( LED, OUTPUT ); } void loop () { digitalWrite ( LED, HIGH ); delay ( 500 ); digitalWrite ( LED, LOW ); delay ( 500 ); } // fim do cdigo

Na linha 2 do nosso cdigo, ns escrevemos byte LED = 13;. Isto informa ao compilador para separar um espao de um byte na memria, atribuir o rtulo LED a este espao, e em seguida escrever o valor decimal 13 no mesmo.
7

Outro programa: button -led e pisca-led


/* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached to pin 2. The circuit: * LED attached from pin 13 to ground * pushbutton attached to pin 2 from +5V * 10K resistor attached to pin 2 from ground * Note: on most Arduinos there is already an LED on the board

attached to pin 13.

created 2005 by DojoDave <http://www.0j0.org> modified 30 Aug 2011 by Tom Igoe This example code is in the public domain:http://www.arduino.cc/en/Tutorial/Button */ // constants won't change. They're used here to set pin numbers: const int buttonPin = 2; // the number of the pushbutton pin const int ledPin12 = 12; // the number of the LED pin // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // led da placa // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin12, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); pinMode(led, OUTPUT); // LED da placa } // O PROGRAMA PRINCIPAL UM LOOP void loop(){ // pisca o led da placa. digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(2000); // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin12, HIGH); } else { // turn LED off: digitalWrite(ledPin12, LOW); } }

O AMBIENTE DE DESENVOLVIMENTO ARDUINO

Conjunto de instrues C Arduino (compatvel com DEV-C++)


Fonte: Tutorial Arduino.pdf - www.isegi.unl.pt/docentes/vlobo/escola.../Tutorial%20 Arduino

Funes Base void setup()


Descrio: Esta funo apenas executada uma vez e normalmente utilizada para executar a inicializao de variveis, a inicializao da utilizao bibliotecas (no confundir com declarao de bibliotecas), a definio dos pinos (como input ou output), o incio do uso de comunicao srie, entre outros. Exemplo: (1) int botao=3; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3. (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) (.) (8) }

void loop()
Descrio: Esta fun~o faz um loop sucessivo (como o prprio nome indica), ou seja, todos os comandos existentes no interior desta funo so sucessivamente repetidos, o que pode permitir a leitura sucessiva de portas, a leitura sucessiva de parmetros provenientes de sensores externos e actuar de acordo com as condies estabelecidas, entre muitas outras aplicaes, bastando apenas ter criatividade. Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500){ // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) } Nota: As funes atrs descritas tm de ser necessariamente do tipo void, ou seja, no podem retornar qualquer valor depois da sua execuo.

10

Resumindo
As funes void setup()e void loop() so de carcter obrigatrio, ou seja, mesmo que no necessria a sua utilizao devero constar no cdigo utilizado. E apenas sero chamadas funes externas que constem na funo void loop(). Exemplo: Declarao de variveis globais; void setup(){ Instruo 1; Instruo 2; (.) } void loop(){ Instruo 6; Instruo 9; Funo1(); (.) }

Ciclo If.else
Descrio: utilizado para descrever uma condio, ou seja, quando uma varivel for: igual, maior, menor ou diferente (de acordo com a declarao efectuada) que um determinado valor executada uma determinada condio. Podem-se usar vrios ciclos if.else encadeados, de forma a verificar diversas condies. Sintaxe: if(condio){ Instruo 1; Instruo 2; (..) } else{ Instruo 3; Instruo 4; (..) } A utilizao da instruo else no ciclo if dispensvel, podendo apenas tomar a forma: if(condio){ Instruo 1; Instruo 2; (..) } A condio acima referida pode ser descrita das seguintes formas:

. 11

Ciclo for
Descrio: Esta instruo utilizada quando se quer efectuar uma instruo ou conjunto de instrues um determinado nmero de vezes. Um exemplo possvel de aplicao o preenchimento de um vector ( array), com dados provenientes de entradas analgicas. Sintaxe: for(inicializao; condio; incremento a efectuar){ Instruo 1; Instruo 2; (.) } A inicializao apenas efectuada uma vez, no incio do ciclo. Cada vez que o ciclo efectuado a condio testada. Caso a condio se verifique efectuado o incremento, caso a condio no se verifique o ciclo termina a sua execuo. A condio, referida anteriormente, declarada semelhana da condio utilizada no ciclo if. O exemplo abaixo mostra um exemplo de implementao do ciclo for, face s regras expostas acima. Exemplo: (1) int entrada_analogica=3,val,f[10],i; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de variveis do mesmo tipo com o nome val e i no inicializada, e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) for(i=0;i<=10;i++){ // Ciclo for que percorrido 11 vezes, i<=10 com i a comear no valor 0 (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val Arduino (9) f[i]=val; //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com 11 valores do pino analgico 3 (10) } (11) }

Ciclo switch / case


Descrio: normalmente utilizada para declarar uma lista de casos possveis, para uma determinada varivel, sendo verificado cada caso e apenas executado quando a varivel respeitar a condio declarada. Sintaxe: switch(varivel){ case 1: Instruo a executar quando varivel for 1 (varivel == 1) break; case 2: Instruo a executar quando varivel for 2 (varivel == 2) break; (..) default: Conjunto de instrues a executar se nenhuma das condies for verificada. A utilizao desta condio opcional. break; } necess|rio utilizar a instru~o break caso se pretenda sair do ciclo aps a condio ser verificada. Caso contrrio, vai continuar a ser executado o ciclo a partir da condio verificada. Exemplo: (1) int entrada_analogica=3,val; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val 12

(2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) switch(val){ // Ciclo switch, sendo val a varivel a testar (10)case 500: // condio de teste, se val == 500 (igual a 500) (11) digitalWrite(13,HIGH); // Se a condio da linha 10 se verificar, esta instruo executada (12) break; // Instruo que permite terminar o ciclo (13) default: // Se nenhuma das condies se verificar (o seu uso opcional) (14) digitalWrite(13,LOW); // Instruo que executada se a condio do ciclo switch no se verificar (15) } (16) }

Ciclo while
Descrio: normalmente utilizado para efectuar um loop sucessivo at uma determinada condio se verificar. Caso essa condio se deixe de verificar o ciclo termina. Em casos em que a condio no se verifica, estamos perante um ciclo infinito (semelhante { fun~o void loop()). Sintaxe: while(condio){ Instruo 1; Instruo 2; (..) } necessrio fazer com que a condio se torne falsa, caso se queira finalizar o ciclo para executar outras instrues. Pois caso contrrio o ciclo vai ser executado indefinidamente. Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de variveis do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) while(i<=10){ // ciclo while, com a condio i<=10 (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val; //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com valores provenientes do pino analgico 3 (10) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+ 1 (11) } (12) }

13

Ciclo do.while
Descrio: Bastante semelhante ao ciclo while, sendo a principal diferena o facto da condio ser testada apenas no fim do ciclo e no no incio do ciclo. Ou seja, mesmo que a condio seja falsa o ciclo vai ser sempre executado uma vez. Sintaxe: do{ Instruo 1; Instruo 2; (..) } while(condio); Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de uma varivel do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) do{ // Permite definir o inicio do ciclo (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val: //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com valores provenientes do pino analgico 3 (10) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+ 1 (11)} (12) while(i<=10); // Se a condio se verificar repete o ciclo, caso no se verifique o ciclo termina (13) }

Tipos de variveis disponveis


Varivel do Tipo Boolean
Descrio: Uma varivel deste tipo apenas pode tomar dois valores distintos - true ou false. Esta vari|vel reserva 1 Byte de memria para a sua utilizao. Sintaxe: boolean vari|vel = valor; Quando referido acima a valor, est|-se a referir a true ou false.

14

Varivel do tipo byte


Descrio: Armazena um nmero do tipo unsigned, compreendido entre 0 e 255. Ocupando, como o prprio nome indica, 1 Byte na memria (8 Bits). Sintaxe: byte varivel = valor; Exemplos: byte exemplo = B0000001; // Armazena o valor em binrio que corresponde ao valor 1 em decimal byte exemplo_2 = 1; // Semelhante ao exemplo anterior, mas armazenando o valor directamente em decimal

Varivel do tipo int vs unsigned int


Descrio: Este tipo de varivel (integer) permite guardar um valor inteiro de 2 bytes, ou seja, um nmero inteiro com valor compreendido entre -32768 e 32767. Podemos tambm declarar a varivel int, como sendo do tipo unsigned. Ao declarar uma varivel do tipo unsigned, deixamos de ter parte negativa passando a poder armazenar valores compreendidos entre 0 e 65535. Sintaxe: int varivel = valor; unsigned int varivel = valor; Exemplos: int exemplo = -150; // Declara um varivel do tipo int e atribui-lhe o valor de -150 unsigned int exemplo_1 = 65000; // Declara um varivel do tipo unsigned int e atribui-lhe o valor de 65000

Input/Output - digital
pinMode()
Descrio: Ao recorrer a esta instruo, possvel configurar o modo de comportamento de um determinado pino. Possibilitando assim defini-lo como input ou output, esta definio normalmente efectuada recorrendo funo void setup(). Sintaxe: pinMode(Nmero do pino, Modo); O Modo acima descrito pode ser definido da seguinte forma: INPUT OUTPUT Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) } 15

digitalWrite()
Descrio: Possibilita, nos pinos configurados como output atravs da instruo pinMode, estabelecer a sada dos respectivos pinos com o valor lgico 1 (HIGH 5 V) ou com o valor lgico 0 (LOW 0V) Sintaxe: digitalWrite(Nmero do pino, Modo); O Modo acima descrito, pode ser definido como: HIGH LOW Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }

digitalRead()
Descrio: Possibilita a leitura de uma entrada digital especfica, retornando um valor no formato integer (int). Se obtivermos um valor de retorno de 1, estamos perante uma leitura do tipo HIGH (valor lgico 1). Se tal no se verificar, e tivermos um valor de retorno igual a 0, estamos perante uma leitura do tipo LOW (valor lgico 0). Sintaxe: Varivel do tipo integer = digitalRead(Nmero do pino); Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=digitalRead(botao); // Permite a leitura do valor do pino 3 digital atribuindo o seu valor varivel val (9) if(val==1) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) else{ // Caso a condio do ciclo if no se verifique (13) digitalWrite(13,LOW); // Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) } (15) }

16

Input/Output - analgico
analogRead()
Descrio: Possibilita a leitura do valor analgico do pino especificado, com um conversor A/D possuindo uma resoluo de 10 bits. O que leva a que um valor compreendido entre 0 e 5 V, esteja compreendido entre os valores inteiros (int) 0 e 1023 (2,5 V = 512). Sintaxe: Varivel do tipo integer = analogRead(Nmero do pino); Obs. : Pinos analgicos so automaticamente definidos como entradas (A0 at A5) Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3analgico atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 50 0 = 50% do sinal analgico) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }

analogWrite() - PWM
Descrio: Possibilita a utilizao dos pinos PWM (Pulse Width Modulation) da placa Arduino. O sinal PWM mantm-se at ser modificado atravs de uma outra instruo que afecte esse pino, a frequncia do sinal PWM criado de 490 . Sintaxe: analogWrite(Nmero do pino, valor); Obs.= pinos marcados com # = 3,5,6,9,10,11. O valor referido anteriormente varia entre 0 (sempre desligado), at ao valor 255 (que representa um sinal de 5 V constante). Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao analgico inicializada com o valor de pino 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor , para guardar o valor analgico. (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 analgico atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) analogWrite(9,255); // Instruo com a mesma funo que digitalWrite( 9,HIGH) (11) } (12) else{ (13) analogWrite(9,0); // Instruo com a mesma funo que digitalWrite( 9,LOW) (14) } (15) } 17

PWM
A capacidade de utilizar Pulse Width Modulation (PWM), muito importante, pois permite obter uma tenso analgica a partir de um sinal digital, ou seja, de um sinal que apenas pode assumir o estado lgico 0 (0V) ou 1 (5 V). O conceito de PWM utilizado para referir sinal que possua uma frequncia constante e um duty cicle varivel. Se for necessrio modificar a frequncia, utilizar o comando delay(ms). O duty cicle definido pelo valor analogWrite(9,0) = pino PWM #9, duty cicle = 0, isto , sada zero, at 255, duty cicle mximo, 100%, tenso constante 5 V. Ex.= analogWrite(9,128) = duty cycle 50%. Ref.: livro Primeiros passos com o Arduino, de Massimo Banzi

. EXEMPLO DE CONTROLE DE ACENDIMENTO DO LED NO PINO 13 (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (12) else (13) digitalWrite(13,LOW); // Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) }

Tempo
delay (milisegundos)
Descrio: Possibilita efectuar uma pausa ao programa em execuo, por uma quantidade de milisegundos especificada. til para manter um estado durante uma certa quantidade de tempo. Sintaxe: delay(tempo que deseja efectuar a pausa ms); Exemplo: (1) int led_pin=13; // Declarao de uma varivel do tipo integer com o nome led_pin, sendo -lhe atribuda o valor 13 (2) void setup() { (4) pinMode(led_pin,OUTPUT); // Permite definir o pino 13 como OUTPUT (5) Serial.begin(9600); // Permite a inicializao da comunicao Srie (6) } (7) void loop(){ (8) digitalWrite(led_pin,HIGH); // atribudo ao pino digital 13 a condio HIGH (5 V) (9) delay(200); // efectuado um delay de 200 ms, antes de efectuar a prxima instruo 18

(10) digitalWrite(led_pin,LOW); // atribudo ao pino digital 13 a condio LOW (0 V) (11) delay(600); // efectuado um delay de 600 ms, antes de efectuar a prxima instruo, neste caso a funo void loop() recomea (12) }

delayMicroseconds (microsegundos)
Descrio: Possibilita efectuar uma pausa ao programa em execuo, por uma quantidade de microsegundos especificada. Sintaxe: delayMicroseconds(tempo que deseja efectuar a pausa s); Exemplo: (1) int led_pin=13; // Declarao de uma varivel do tipo integer com o nome led_pin, sendo -lhe atribuda o valor 13 (2) void setup() { (4) pinMode(led_pin,OUTPUT); // Permite definir o pino 13 como OUTPUT (5) Serial.begin(9600); // Permite a inicializao da comunicao Srie (6) } (7) void loop(){ (8) digitalWrite(led_pin,HIGH); // atribudo ao pino digital 13 a condio HIGH (5 V) (9) delayMicroseconds(200); // efectuado um delay de 200 s, antes de efectuar a prxima instruo (10) digitalWrite(led_pin,LOW); // atribudo ao pino digital 13 a condio LOW (0 V) (11) delayMicroseconds(600); // efectuado um delay de 600 s, antes de efectuar a prxima instruo, neste caso a funo void loop() recomea (12) }

19

Das könnte Ihnen auch gefallen