Criando suas próprias bibliotecas para Arduino

bibliotecas para Arduino
Este post faz parte da série Primeiros Passos com Arduino

A plataforma Arduino trouxe a facilidade de criar projetos com microcontroladores, principalmente para iniciantes, devido à abstração de código de baixo nível. Quando você utiliza uma função para escrita ou leitura de um sinal digital, você não precisa se preocupar com a correta manipulação dos registradores internos do microcontrolador que está utilizando em seu projeto. Essa abstração apresenta vantagens, como a portabilidade de código, e desvantagens, como, por exemplo, o possível aumento do código de programa gerado e o consequente atraso para manipulação de sinais.

Outra vantagem de se utilizar bibliotecas é a abstração de hardware, uma vez que você pode manipular o hardware com métodos mais próximos à nossa linguagem.

Nesse tutorial vamos apresentar como criar uma biblioteca para Arduino para manipular um pino de saída de forma mais alto nível.

As bibliotecas para Arduino são feitas em C++. Inicialmente deve-se criar uma pasta com o mesmo nome que vai ser chamada a biblioteca.

A pasta examples conterá os exemplos que apareceram na IDE do Arduino. O Arquivo keywords.txt servirá para as palavras da biblioteca mudarem de cor na IDE. Os arquivos Saida.h e Saida.cpp conterão os códigos da biblioteca. Vamos começar a estruturar nossa biblioteca Saida.

Inicialmente vamos pensar nas ações que uma saída digital poderá demonstrar:

  • ligar;
  • desligar;
  • inverter o seu estado.

Agora temos que editar o arquivo Saida.h, que é o arquivo de cabeçalho da nossa biblioteca. Primeiro vamos inserir as seguintes diretivas de compilação:

#ifndef SAIDA_H
#define SAIDA_H



#endif

Essas diretivas não deixarão as declarações/definições da biblioteca serem inseridas mais de uma vez em um projeto.

Para ter acesso às funções do Arduino, é necessário fazer uso da biblioteca Arduino, inserindo o arquivo de cabeçalho Arduino.h:

#ifndef SAIDA_H
#define SAIDA_H

#include <Arduino.h>



#endif

Agora vamos criar a classe Saida:

#ifndef SAIDA_H
#define SAIDA_H

#include <Arduino.h>

class Saida
{
public:
   Saida(int pin);
   void  liga();
   void  desliga();
   void  inverte();

private:
   int pino;
};

#endif

Como pode ser observado, a classe Saida possui um construtor que recebe como parâmetro o pino correspondente a saída. Possui também 3 métodos públicos que poderão ser acessados por quem for utilizar a biblioteca e um atributo privado que só poderá ser acessado dentro da classe.

Vamos agora para a codificação dos métodos da classe no arquivo Saida.cpp:

#include"Saida.h"

Saida::Saida(int pin)
{
   pinMode(pin, OUTPUT);
   pino = pin;
}

void Saida::liga()
{
   digitalWrite(pino,HIGH);
}

void Saida::desliga()
{
   digitalWrite(pino,LOW);
}

void Saida::inverte()
{
   digitalWrite(pino, !digitalRead(pino));
}

O construtor Saida::Saida(int pin) configura o pino passado como parâmetro como saída e depois atribui o seu valor à variável privada pino, de modo que esse pino possa ser utilizado pelos métodos da classe futuramente.

Os métodos demonstram as ações que os seus nomes propõem, fazendo uso das funções da biblioteca Arduino.

O arquivo keywords.txt deve ficar da seguinte forma:

Saida KEYWORD1
liga KEYWORD2
desliga KEYWORD2
inverte KEYWORD2

O nome da classe deve estar na linha de KEYWORD1 e os métodos serão KEYWORD2.

Agora que nossa biblioteca está pronta, basta adicionar a pasta libraries no diretório do Arduino e vamos criar dois exemplos para testes. Esses exemplos devem ser salvos na pasta examples da nossa biblioteca.

O primeiro exemplo é SaidaBlink, que consiste em piscar um led em intervalos de 1 segundo:

#include <Saida.h>

// Instancia um objeto chamado LED no pino 13
Saida LED(13);

void setup(){
}

void loop()
{
 LED.liga();       // liga o led
 delay(1000);      // aguarda 1 segundo
 LED.desliga();    // desliga o Led
 delay(1000);      // aguarda 1 segundo
}

No segundo exemplo é criada uma saída chamada rele, que inverte seu estado quando uma tecla for pressionada:

#include <Saida.h>



// Cria um rele passando como parâmetro o pino no qual está ligado

Saida rele(8);
const byte tecla = 2;

// Configura arduino

void setup()
{  
 pinMode(tecla, INPUT);
}


// Loop principal
void loop()
{
 if (digitalRead(tecla) == LOW)
 {
   while (digitalRead(tecla)  == LOW); // Aguada tecla ser liberada
   rele.inverte();
 }
}

Bibliotecas para Arduino – Conclusão

O exemplo apresentado para criação de bibliotecas foi bem simples e servirá de base para que você possa criar as suas próprias bibliotecas, ou caso você queira entender como uma biblioteca é criada. Você pode adicionar outros métodos a essa biblioteca e testar com o seu hardware, por exemplo, um método que retorne o estado atual de uma saída, etc.

Saiba mais

Arduino – O documentário

Arduino UNO

Referências

Download da biblioteca

https://arduino.cc/en/Hacking/LibraryTutorial

https://www.inkling.com/read/arduino-cookbook-michael-margolis-2nd/chapter-16/recipe-16-4

Primeiros Passos com Arduino

Arduino – Comunicação Serial
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
18 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Ivan
Ivan
19/04/2018 23:22

Muito legal o site.

Edvaldo Melo
Edvaldo Melo
16/04/2018 18:40

Olá! Muito bom seu conteúdo, certeza de ajudar bastante os iniciantes em projetos eletrônicos. Abraço.

Marlon Zanardi
Marlon Zanardi
05/03/2018 11:23

Olá, estou criando uma biblioteca para utilizar o display LCD.

Estou utilizando no mesmo sketch, Display.cpp e Display.h, funções simples funcionam, mas ao tentar adicionar #include na minha biblioteca do display, acontece que ele retorna a mensagem “No such file or directory”, e preciso dela para criar a instância do lcd, como faço? alguém consegue me ajudar?

Atenciosamente
Marlon Zanardi

Jr Alves
Jr Alves
21/12/2014 17:52

Aqui ta dano esse erro:

This report would have more information with

“Show verbose output during compilation”

enabled in File > Preferences.

Arduino: 1.0.6 (Windows NT (unknown)), Board: “Arduino Uno”

funcoes:10: error: ‘Saida’ does not name a type

funcoes.ino: In function ‘void loop()’:

funcoes:18: error: ‘LED’ was not declared in this scope

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Jr Alves
26/12/2014 13:56

Olá Jr,
Não está encontrando a biblioteca Saida.h.
Você incluiu a biblioteca a pasta libraries?
Faça o download no link disponível e copie para pasta libraries do arduino.

Abraço

Henrique
19/06/2014 05:15

belo artigo =)

Eric
Eric
13/06/2014 10:29

Olá. Não sei se é meu navegador, mas não consegui ler nada que está nos campos de programação.

Eric
Eric
Reply to  Eric
13/06/2014 10:58

Atualizando, era sim meu navegador.
Por alguma razão ele vive sumindo com conteúdos de sites.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Eric
13/06/2014 12:47

Ok Eric, qualquer coisa só postar aqui. Abraços

Myller Mattedi
Myller Mattedi
16/03/2017 15:49

Muito Obrigado!!
Aprendi direitinho 🙂

Home » Hardware » Placas de desenvolvimento » Criando suas próprias bibliotecas para Arduino

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: