Donde guardar y como llamar a librerias [SOLUCIONADO]

Hola, aunque el titulo del post parezca sencillo, seguid leyendo please.

Tengo entendido que se puede almacenar una libreria tanto en la carpeta de arduino/libraries como en la propia carpeta del sketch con el que se quiere usar.
Mi duda es, si quiero usar la libreria que esta dentro de la carpeta del sketch, como tengo que almacenarla? y como tengo que llamarla?

He visto que hay dos formas de llamar a una libreria, con <> y con "", sabeis cual es la diferencia?

#include "libreria.h"
#include <avr/wdt.h>

Lo que me gustaria hacer es tener una libreria en la carpeta arduino22/libraries, y una copia de esa misma libreria pero modificada en la carpeta del sketch. luego en el programa le especifico si quiero utilizar una u otra.

No he encontrado dicha información en el playground ni en ningún sitio.
Gracias!!

¿Y poniendolo asi?

#include </arduino-022/mi carpeta/mi libreria/lib.h>

En formato unix?

o quizas formato windows #include "c:\arduino-022\mi carpeta\mi libreria\lib.h"

has probado a ver si funciona?

Yo, hasta legar a casa no puedo confirmartelo.

lo que me gustaria es por ejemplo tengo un programa que usa la libreria EEPROM. pero tambien tengo una libreria EEPROM modificada para otro programa en particular
entonces en los sketch normales usare

#include <EEPROM.h>

en cambio en el otro programa que necesito la libreria modificada, esta estara dentro de la carpeta del sketch

#include <?¿?¿?¿?¿EEPROM.h>

el tema es si se puede tener exactamente la misma libreria en cuanto a nombre (pero modificada por dentro) y como llamar a cada una
graciassss

Prueba lo que te he dicho Sergegsx a ver si va...

#include <EEPROM.h>

por esta otra:
#include "c:\arduino-022\carpeta de tu sketch\EEPROM.h"

Para saber si la coge, quitas un momento la libreria eeprom de su sitio y la pones en la carpeta de tu sketch, si va... luego pnes la otra y vuelves a probar...

ok, pero la carpeta de mi sketch esta en una carpeta en "Mis Documentos" y bajo tropecientas carpetas.
creo que debe haber una forma de escribir en corto la carpeta del sketch, tiene que ser una dirección relativa, ya que asi puedes compilarlo si cambias de carpeta el sketch.
no crees?

Creo que <> busca primero dentro de la carpeta de arduino y "" dentro de la carpeta del sketch, el problema es que no forma parte del estándar de C, por lo que cada compilador lo implementa como le viene en gana.

chiva:
Creo que <> busca primero dentro de la carpeta de arduino y "" dentro de la carpeta del sketch, el problema es que no forma parte del estándar de C, por lo que cada compilador lo implementa como le viene en gana.

he definido una variable dentro de las librerias, una con un cero y otra con un uno.
#define DONDE 1 // libreria dentro de arduino22
#define DONDE 0 // libreria dentro de sketch

y cuando ejecuto el programa imprimo la variable.
Siempre me imprime un uno aunque cambie <> por ""

No tengo un Arduino aquí, pero me he abierto el sketch de blink, he creado otro tab que le he llamado myvar.h.
Dentro de ese myvar.h he creado #define mypin 13.
En el sketch he puesto #include "myvar.h" y todo marcha bien....

Mira el ejemplo que hice de TVOut para que veas capturas de pantalla de lo que hablo => Tinkering with Electronics...: Libreria TVout

Saludos

Igor muchas gracias, de ese modo ya se que funciona, y efectivamente hay que usar ""
la duda es si se puede tener una carpeta llamada libraries dentro del sketch y llamar a una libreria dandole prioridad sobre la MISMA libreria que este en la carpeta de arduino libraries

por cierto, estoy enganchado ahora mismo al CANBUS de mi coche...a ver que cositas saco nuevas... :wink:

Si dais con una solución me encantaría.

Por lo que he visto, el entorno de desarrollo no usa makefiles (por lo menos no lo he encontrado). Por lo que he visto, para evitar que la gente ande enredando con Makefiles, el entorno construye una lista de los directorios que hay en libraries, añade como objetos a compilar los que se encuentran en cores -> arduino y añade las librería librerías referenciadas, pone los caminos de búsqueda de includes, concatena todos los ficheros que se pusieron en las pestañas, y comienza a compilar y lincar, ... En resumen, es un proceso interno completamente.

Está bien para simplificar la vida a la gente, pero quita muchos grados de libertad y hay que seguir las reglas del juego.

Yo lo que hago es crearme un directorio con la librería que estoy escribiendo y la edito allí. Alternativamente, la escribo en el directorio del sketch y antes de compilar la copio al directorio de la librería. No es la mejor forma pero ... Lo que no va a funcionar es tener dos ".h" con el mismo nombre por la forma que tiene el entorno de añadir los paths de compilación.

Yo me estoy pensando pasar a Eclipse.

Acabo de probar menu Sketch/Add file... selecciono el .h que quiero,en concreto he copiado Servo.h y Servo.cpp en la carpeta de mi sketch, y he añadido un #define propio.... He añadido en el sketch principal #include "Servo.h", y me compila a la perfección!! Por supuesto, en ese sketch principal hago uso de la constante que he definido en el Servo.h.

:wink:

Habeis creado material de primera. Gran post

Pues Sergegsx, mira a ver si has hecho mal algo, quizás puede que influya el SO, aunque siendo el mismo compilador no lo creo, pero quien sabe

ese mismo sketch lo tienes tambien en la carpeta libraries de arduino22 ??
porque a mi no me funciona y no se que estoy haciendo mal.

Explico, tengo la libreria de CANBUS tanto en la carpeta libraries de arduino22 como dentro de mi sketch

c:\arduino22\libraries\CAN
...____Proyecto_ArduinoCarBlackBox____CODIGO FUENTE\ArduinoCarBlackBox_v3\CAN

he definido lo siguiente en el archivo CAN.h

#define CANBUS_VERSION 1

es decir justo aqui

#ifndef CAN_H
#define CAN_H



#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>

#include "pinout.h"

#define CANBUS_VERSION 1

//----------------------------------------------------------------------------
// CLASS
//----------------------------------------------------------------------------

obviamente en la misma libreria pero en el sketch le he dado otro valor al define, pero siempre coge el de la carpeta arduino22/libraries

he probando tanto <> como ""

Yo probe copiando el .cpp y .h dentro de la carpeta del sketch. No hice otra subcarpeta dentro.

En ubuntu y en mac, hay que crear una carpeta que se llame libraries, y dentro creas una carpeta con el nombre de la libreria, dentro guardas los archivos que necesites( .h y .cpp)

bueno pues esto parece que ya esta claro, y los resultados no son los que yo buscaba pero bueno.

  1. para que se compile la libreria que esta dentro del sketch tienen que estar los archivos en la misma carpeta del sketch, (no deben estar en otra carpeta dentro de la carpeta sketch)
  2. para que lea la libreria de dentro del sketch hay que usar "" en lugar de <>
  3. si tienes exactamente la misma libreria en arduino22/libraries y la carpeta del sketch, te dara error tipo " multiple definition of".

resultado, que lo que yo queria hacer de tener una misma libreria en dos sitios distintos con el fin de hacer pequeñas modificaciones a la que se encuentra en la carpeta del sketch, y luego llamar desde el sketch a la que yo quiera, no se puede.

c:\arduino22\libraries\CAN
...\____Proyecto_ArduinoCarBlackBox\____CODIGO FUENTE\ArduinoCarBlackBox_v3\CAN

si la libreria esta dentro de la carpeta sketch, esta misma libreria no puede existir en arduino22/libraries

Gracias a todos por la ayuda y los comentarios !!