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!!
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
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....
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...
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.
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.
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.
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)
para que lea la libreria de dentro del sketch hay que usar "" en lugar de <>
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.