Aprenda a programar o Arduino – Parte 3

Estamos chegando à terceira Parte desse tutorial, hoje começaremos a trabalhar com o arduino ligado a algum hardware e advinha … vamos piscar leds….

Antes de ligarmos qualquer coisa no Arduíno é interessante sabermos um pouco sobre suas características elétricas, aqui vai o datasheet do Arduino Mega 1280 para outros modelos  basta procurar no http://arduino.cc.

Então sabemos que o máximo de corrente que o arduino pode suportar em cada pino é de cerca de 40mA.  Os datasheets que encontrei informam que para uma voltagem de 5v os leds de 5mm  trabalham em média com 40mA.

Não necessariamente a porta do seu arduíno irá queimar se você ligar por exemplo 2 leds em uma mesma porta mas isso não e recomendavel a não ser que você queira correr riscos.

O Led e um componente polarizado portanto não deve ser ligado invertido pois pode queimar. Veja a figura abaixo extraída da wikipedia ensinando a polarizar o Led.

LED
Anodo e Catodo do LED

Portanto o Anodo, com a “perna maior” tem de ir numa porta de IO e o Catodo, deve ir numa porta de GND. (Veremos que isso não é obrigatório mais adiante…).

A montagem é bem simples e você pode conferir na foto abaixo

Arduino Blink
Arduino Blink

O Catodo, deve ser ligado ao pino GND e o Anodo ao Pino 13

Então lets coding!!!!

void setup()
{
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}

void loop()
{
}

Acabamos de ligar o led.

O comando pinMode recebe um valor inteiro, que deve ser igual ao numero da porta (estão impressos no circuito do arduino), e uma flag que informa se ele e de saída (Output), ou entrada (Input), no Arduino Mega 1280

Portas PWM e Digital
Portas PWM e Digital

as portas PWM* e Digital utilizam o comando digitalWrite que tambem recebe dois parametros o primeiro e um numero inteiro que é o numero da porta e o segundo e se ela esta alta ou baixa (0 ou 1).

Esse programa tambem pode ser reescrito da seguinte forma:

void setup()
{
pinMode(13, OUTPUT);
digitalWrite(13, 1);
}

void loop()
{
}

Podemos passar a informação da porta por uma variavel:

int pino = 13;
void setup() {
pinMode(pino, OUTPUT);
digitalWrite(pino, HIGH);
}

void loop()
{
}

E claro sempre podemos otimizar o código eliminando o sinal e colocando como uma constante alterando a linha:

int pino = 13;

Para:

const unsigned int pino = 13;

Agora vamos brincar criando um objeto chamado led.

class led  {
private:
int pino;
int estado;
public:
void desliga_led();
void liga_led();
void set_pino(int);
};

void led::set_pino(int i) {
pino = i;
pinMode(pino, OUTPUT);
}

void led::desliga_led(){
estado=0;
digitalWrite(pino,estado);
}
void led::liga_led(){
estado=1;
digitalWrite(pino,estado);
}

void setup() {
led l1;
l1.set_pino(13);
l1.liga_led();
}

void loop(){ }

Aos não iniciados em programação orientada a objetos eu sugiro uma pausa pro café tirar os sapatos, relaxar e ler o seguinte link:

http://www.dca.fee.unicamp.br/cursos/POOCPP/node3.html

Vamos começar a analisar o código:

  class led  {
private:
int pino;
int estado;
public:
void desliga_led();
void liga_led();
void set_pino(int);
};

O trecho destacado em cima, define como a classe vai ser. Quais são os seus metodos e variaveis. Nele vemos duas distinçoes claras private: e public: , tudo que estiver dentro de private, só pode ser alterado ou manipulado por algo que esteja dentro da classe. Tudo que esta dentro de public pode ser acessado externamente.

No nosso exemplo declaramos as variáveis pino e estado como variáveis privadas, ou seja só podem ser acessadas por métodos que estiverem dentro da classe.

Já na divisão public declaramos os metodos desliga_led() liga_led() e set_pino() mas não programamos essas ffunçoes veja que até o momento não haviamos programado de fato essas funções.

void led::set_pino(int i) {
pino = i;
pinMode(pino, OUTPUT);
}

No trecho acima vimos a função set_pino, o leitor poderá perceber, que estamos configurando o pino i como saída, esse i vai ser passado outra parte do código quando chamarmos a função.As outras funções seguem um padrão semelhante.

O que fizemos na verdade é criar um método para cada tarefa. O que a príncipio parece muito difícil e de pouca utilidade visto que o mesmo código somente aumentou de tamanho e não de utilidade, mas veremos adiante o quanto isso pode ser útil. Mas atente que ao utilizar esse tipo de programação seu código ocupara mais espaço em físico.

Criando nossa própria biblioteca para um LED

P*** o cara vai ensinar a criar uma biblioteca, e ainda nem explicou direito como funciona um if!? No Arduíno a programação e voltada para interação com o ambiente. Simplesmente com seus comandos básicos isso se torna muito dificil, já existem diversas bibliotecas criadas para o Arduíno, elas extedem as funções dele para  trabalhar com cartões SD, Motores, Blue Tooth, Sim Cards.. ou seja uma infinidade de coisas. Porém muita gente ao dar #include não sabe nem o que esta fazendo, na parte 4 deste tutorial eu pretendo explicar o funcionamento de um cartão de memória e criarmos algumas aplicações interessantes com ele, portando e interessante que o leitor entenda como funciona uma biblioteca de funçoes, até mesmo para localizar seus métodos sem conhecer ela a fundo ou ter de recorrer a alguma documentação.

Então let’s go.

Eu utilizei o Notepad++ mas você pode usar o que quiser, notepad, wordpad, geany, devc++, eclipse c,vi… Ou qualquer outro editor.

Primeiro devemos criar um arquivo de header que no nosso caso vai se chamar amcled.h esse arquivo deve conter o codigo abaixo

#ifndef amcled_h
#define amcled_h

#include “Arduino.h”

class led
{
private:
int pino;
int estado;
public:
void desliga_led();
void liga_led();
void set_pino(int);
void blk(int);
};
#endif

Depois devemos criar um arquivo chamado amcled.cpp

#include “Arduino.h”
#include “amcled.h”

void led::set_pino(int i)
{
pino = i;
pinMode(pino, OUTPUT);
}

void led::desliga_led(){
estado=0;
digitalWrite(pino,estado);
}
void led::liga_led(){
estado=1;
digitalWrite(pino,estado);
}
void led::blk(int time){
liga_led();
delay(time);
desliga_led();
delay(time);
}

Você precisa agora criar um arquivo que vai destacar os comandos que você criou ao digita-los (colocar eles em laranja na IDE do arduino). esse arquivo deve se chamar keywords.txt

desliga_led KEYWORD1
liga_led    KEYWORD2
set_pino    KEYWORD3
blk            KEYWORD4

Agora você deve criar uma pasta chamada amcled dentro da pasta libraries do Arduino conforme abaixo, e colar dentro dela todos os arquivos que criamos:

Biblioteca de Led
Biblioteca de Led

Depois disso só precisamos abrie e fechar a IDE do arduíno e já poderemos usar a nossa biblioteca.

Biblioteca amcled pronta para o uso
Biblioteca amcled pronta para o uso

 

Agora vamos reescrever o último programa que fizemos utilizando a nossa biblioteca:

#include <amcled.h>
void setup() {
led l1;
l1.set_pino(13);
l1.liga_led();
}

void loop(){ }

Ainda pode parecer que o código ficou maior que o primeiro mas vamos prosseguir para o exemplo do led Blink do site do Aduino disponivel em:

 /*
* Created 1 June 2005
* copyleft 2005 DojoDave <http://www.0j0.org>
* http://arduino.berlios.de
*
* based on an orginal by H. Barragan for the Wiring i/o board
*/

int ledPin = 13;

void setup()
{
pinMode(ledPin, OUTPUT);
}

void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

O programa acima faz com que o led pisque a cada 1s, pois ele alterna o estado do pino 13 utilizando digitalWrite. Veja eles reescrito com a nossa lib.

/*
* Criado em 18 de Fevereiro de 2012
* copyleft 2012 – Copie e distribua =]
* http://amcollucci.com.br
*
* based on an orginal by H. Barragan for the Wiring i/o board
*/
#include <amcled.h>

led l1;
void setup()
{
l1.set_pino(13);
}

void loop()
{
l1.liga_led();
delay(1000);
l1.desliga_led();
delay(1000);
}

 

Nada muito diferente não é?

Então veja o seguinte codigo: =]

#include <amcled.h>

led l1;
void setup(){
l1.set_pino(13);
}
void loop(){
l1.blk(1000);
}

 

Bom acho que consegui apresentar com sucesso o Led Blink com delay, da maneira mais completa que pude. Durante os proximos tutoriais pretendo avançar ainda mais em alguns itens que toquei durante essa parte.

 

Então até a próxima

*Obs.:Os pinos PWM possuem ainda outras características.

 

3 ideias sobre “Aprenda a programar o Arduino – Parte 3”

  1. Boa tarde… Tentei criar a lib mas sem exito…

    In file included from sketch_apr11a.cpp:1:
    C:\Program Files (x86)\arduino-1.0\libraries\amcled/amcled.h:4:14: error: #include expects “FILENAME” or

    Podia-me ajudar?

  2. Se você copiou e colou o codigo, verifique se as aspas duplas estao corretas. Depois de copiar um texto da web a ide normalmente interpreta como se fossem duas aspas simples.

    Ve se funciona e me fala.

  3. Anthony parabéns pelos post, amei encontrar teu blog, gostaria de saber mais sobre as bibliotecas , e assim acho que se tu voltar teu blog para usuários mais avançados e uma excelente escolha, pois não tem blogs assim, gostei muito você desfragmentou o código e esmiuçou a explicação.
    Gostaria de saber duas coisas, como juntar os dados da serial, por exemplo… Eu digito para uma variável receber um valor e ela guarda apenas a ultima perdendo as outras, ex: 123, digito e apenas o 3 e guardado. Como junto eles, e gostaria que postasse algo sobre as bibliotecas de como gerar esses arquivos, e sobre a interface SPI do arduino

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Please type the characters of this captcha image in the input box

Por favor, digite os caracteres desta imagem na caixa de entrada