Como crear una libreria

Hola a todos. Llevo días peleándome en crear una librería y no hay manera. A ver si alguno me podéis echar una mano.

Mi código es

//ejempLibreria.ino
boolean Q1;   //variable simbolica para salida en pin3
boolean I1;     //variable simbolica para salida en pin2
void setup() 
{                
  pinMode(3,OUTPUT);   //configura pins como salidas
  pinMode(2,INPUT);    //configura pins como entradas
}
void loop() 
{ 
 readInput();
     Q1=I1;
 writeOutput();
}
void readInput()
  {
    I1=digitalRead(2);
  }
void writeOutput()
  {
    digitalWrite(3,Q1);
  }

Mi intención es enviar las funciones readInput() y writeOutput() a la librería.
Sigo la indicaciones de un tutorial de la web pero no lo consigo.
Me parece que el problema lo tengo con las variables I1 y Q1. No tengo claro donde debo declararlas.

Gracias de antemano.
Jaume

Las librerías son algo complejas, yo solo he conseguido hacer una y basándome en otra.

Yo te recomiendo, que es lo que hago yo, distribuir el código en "pestañas", funciones, etc... te adjunto una imagen para que veas a que me refiero

Un saludo!

Gracias Rodrigo. Yo estoy haciendo lo mismo, pero quería "profesionalizarme" un poco pero no hay manera.
Bueno, seguiré probando!!

Saludos!!

Jaume

Hola,
Tienes buenos tutoriales,
http://arduino.cc/it/Hacking/LibraryTutorial
http://arduino.cc/playground/Code/Library

Hola curro92, tienes razón, pero no encuentro ningun tutorial que explique como es una función en una librería que devuelva un valor (o varios) al sketch principal. Siempre son ejemplos de librerías que "hacen" cosas sin retorno.

Jaume

Hola jnogues:

Hablas de que no te sale el código de una librería, pero pones el código de un programa.
Para programar una librería lo primero que tienes que hacer es crear un directorio con el nombre de la librería dentro del directorio del Arduino "libraries", dentro de este directorio tienes que crear dos archivos con el nombre de la librería, uno con extensión h con las declaraciones y otro con extensión cpp con el código, luego crear una aplicación en otro directorio desde el cual llamarla y probarla.

//ejempLibreria.h

#ifndef ejempLibreria_h
#define ejempLibreria_h

#include <Arduino.h>

class MiClaseClass
{
  int PIN_OUT;
  int PIN_IN;
  private:
  public:
  void MiClaseClass( int entrada, int salida );
  boolean readInput();
  void writeOutput( boolean Valor );
};

extern MiClaseClass MiClase;

#endif
//ejempLibreria.cpp

#include "ejempLibreria.h"

MiClaseClass::MiClaseClassClass( int entrada, int salida )
{             
  PIN_OUT = salida;
  PIN_IN = entrada;   
  pinMode(salida,OUTPUT);   //configura pins como salidas
  pinMode(entrada,INPUT);    //configura pins como entradas
}

boolean MiClaseClass::readInput()
{
  return = digitalRead( PIN_IN);
}

void MiClaseClass::writeOutput( boolean Valor );
{
  digitalWrite(PIN_OUT, Valor);
}
//Programadeprueba.ino

#include "ejempLibreria.h"

MiClaseClass MiObjet( 3, 2 ); //declaramos el objeto de la libreria pasandoles los pines de entrada y salida.

boolean Q1;   //variable simbolica para salida en pin3
boolean I1;     //variable simbolica para salida en pin2
void setup() 
{                
  pinMode(3,OUTPUT);   //configura pins como salidas
  pinMode(2,INPUT);    //configura pins como entradas
}
void loop() 
{ 
  I1 = MiObjet.readInput();
  Q1=I1;
  MiObjet.writeOutput(Q1);
}

El código lo e escrito al vuelo y no lo e podido probar, pero estoy casi seguro que te copilara bien.

Saludos

Muchas gracias Dukatus!!

Mañana lo pruebo!

Jaume

Hola,
soy nuevo en esto de arduino, ya he programado en otras plataformas. He leído varios tutoriales de como hacer librerías, y en todos habla del contenido de la librería. Mi pregunta es: con que editor escribís la librería?? con el IDE de arduino no se puede no? porque al guardar no puedo guardar los archivos como .cpp o .h. Supongo que es una pregunta de novato...
Gracias

No se como lo harán pero para crear archivos en esos formatos prueba con codeblock que es opensource.

Gracias ionhs! :slight_smile:

Yo uso editores externos (ejemplo Notepad++ para windows, gedit, o el que sea...),que te recocen C, te agrupan cuando tienes bloques if,while, etc, puedes remplazar variables en varios archivos a la vez, etc.....

Luego en el IDE de Arduino, en preferences,activas la opcion de usar editor externo:

De esta forma, cuando abres tu proyecto, una vez seleccionado te lo abre en gris de fondo, solo usas el IDE para compilar y enviar al micro. Todos los cambios que hagas con el editor externo, al guardar el archivo, es lo que usara el IDE para compilar.

Yo personalmente uso un Mac y para escribir las librerias uso Xcode. Ultimamente, me he montado todo el chiringuito con eclipse. Funciona mejor que el cutre editor del entorno.

Para compilar, si no uso eclipse, sigo las mismas pautas que Igor.

Una libreria, la puedes escribir tanto en C como en c++. En C, simplemente tienes que sacar el factor comun de las funciones que quieras usar. Piensa en terminos genericos. En el .h, simplemente declara las funciones que quieras exportar y protege el fichero de cabecera para que no se incluya multiples veces con: #ifndef, #define, #endif

En C++, el ejemplo que te han puesto esta muy bien explicado. Simplemente ocupa algo mas de memoria que su homologo en C y es un pelin más lento por cómo se crea un objeto y se enlazan sus métodos. Ojo, que me gusta más C++, pero es mejor tener la mente abierta y buscar la solución que se adapte mejor a tus necesidades.

+1 para proyectos medianamente grandes yo use eclipse que esta fenomenal.

y también uso el setup de Igor con Notepad++ que tiene auto-completar para funciones de C y las funciones que tu creas.