Crear librerias para Arduino [SOLUCIONADO]

Hola,

Estoy escribiendo una libreria para Arduino YNO R3.

Para ello estoy siguiendo el libro "Arduino: Manual de programacion", en concreto el capitulo:
"Como escribir una libreria para Arduino". Donde dice que son necesarios dos archivos para crear
una libreria "Morse.h" y "Morse.cpp" (por ejemplo)

Pero me surgen varias dudas:
¿Donde se escribe el texo de estos archivos? ¿en el bloc de notas, en la IDE de Arduino? ¿en algun programa especial?. Cuando tengo tecleados ya los dos archivos h y cpp ¿como doy la extension .h y .cpp a esos dos archivos?.

En el manual tambien se habla de crear una carpeta con el nombre de la libreria ("Morse" por ajemplo)dentro del subdirectorio "libraries" de Arduino y copiar o mover los archivos "Morse.h" y "Morse.cpp".
Pero desde donde copio o pego esos dos archivos que tengo tecleados.

Puede que sean preguntas muy simples, pero en lo que llevo leido de manual no menciona nada de eso.

Gracias por la ayuda.

Hola,

Si te desenvuelves en inglés en el playground de arduino esté muy bien explicado.

Saludos

Hola.
Tanto el fichero .h como el .cpp los puedes crear pinchando en la flecha (triangulito) que hay en la parte superior derecha del editor. Ahí seleccionas "Nueva pestaña", y te pedirá nombre (y extensión del nuevo código).

Hola noter.
Gracias por la ayuda.
Cuando dices editor, ¿te refieres a la IDE de Arduino?
Gracias

Sí, claro. Como no dices con qué estás trabajando he dado por supuesto que usas el IDE.

Hola de nuevo noter.

Gracias por la ayuda.

Ya lo he visto. Y lo he hecho. Le he dado al triangulito y he dado el nombre y la extension Morse.h y a aceptar.

Ahora ¿tecleo ahí el codigo? y despues de teclearlo ¿que hago lo guardo con el mismo nombre Morse.h?

Gracias de nuevo.

Todos los archivos que crees en pestañas, se guardarán en la misma carpeta del proyecto con sus respectivas extensiones.
Por ejemplo, crea un sketch que se llame morse.ino, luego agregas las pestañas morse.cpp y morse.h con sus códigos. En el morse.ino puedes hacer un ejemplo para de paso comprobar que tu librería funciona. De momento el include lo haces con "comillas", pues está todo en la misma carpeta (morse). Después, puedes quitar tu morse.ino y la carpeta ya sería la librería. Sólo te queda ponerla junto a tus otras librerías y ya la puedes llamar con #include <morse.h>. En cuanto al morse.ino, lo puedes renombrar, y meterlo en una subcarpeta con su mismo nombre, y quedaría como un ejemplo de tu librería.

Gracias noter

Lo probaré mañana, hoy estoy liado.
Todas estas cosas ni las he visto en ningún sitio.
A ver si soy capaz de por lo menos montar la estructura de la librería.
.
Ya te cuento

Hola noter.

He seguido tus instrucciones, pero no se si lo entiendo bien.

Para crear el sketch Morse.ino he abierto el IDE y le he dado a salvar con el nombre Morse.ino despues he creado las pestañas Morse.h y Morse.cpp con sus codigos.

Despues en el sketch Morse.ino he tecleado un programa para comprobar que funciona la libreria.
El include lo he tecleado así: "#include" <Morse.h> no se te refieres a eso.

Luego he abierto la carpeta Morse.ino y he sacado el archivo Morse.ino. Y la carpeta Morse.ino con Morse.h y Morse.cpp en su interior la he movido a la carpeta Libraries.

Lo que dices de renombrar el archivo Morse.ino no lo entiendo, ¿lo dejo como Morse a secas?
¿Tengo que meterlo en una carpeta que se llame igual que el archivo?

Disculpa si esta questiones son muy basicas pero muchas simples de estas impiden que funcionen estas cosas.

Gracias.

Para testar, pobló así:
#include "morse.h"
Si te funciona con las librerías, es decir, ya están listas, puedes renombrar morse.ino a ejemplo.ino y moverlo a una subcarpeta llamada igual (ejemplo) entonces puedes mover la carpeta morse con su subcarpeta ejemplo al directorio de librerías, y debería aparecerte en el menú de archivo la librería morse con tu sketch ejemplo.

Gracias por la paciencia noter.

Mañana lo pruebo.

Saludos

ortoedro:
Gracias por la paciencia noter.

Mañana lo pruebo.

Saludos

Ortoedro ¿no te importaria enviarme el morse.h .ino .ccp para hecharle un vistazo? es por si me sirviese para un proyecto de radiobaliza a demanda o silenciosa. mi correo ea1get@gmail.com

Hola noter

Gracias de nuevo

Te envio los archivos Morse.ino Morse.h y Morse.cpp para que los eches un vistazo, si no te importa;
Ya que al dar a verificar me da el siguiente error:

Arduino:1.6.3 (Windows XP), Placa:"Arduino Uno"

C:\Archivos de programa\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Archivos de programa\Arduino\hardware\arduino\avr\cores\arduino -IC:\Archivos de programa\Arduino\hardware\arduino\avr\variants\standard C:\DOCUME~1\COMPAQ~1\CONFIG~1\Temp\build2000901975079652715.tmp\Morse.cpp -o C:\DOCUME~1\COMPAQ~1\CONFIG~1\Temp\build2000901975079652715.tmp\Morse.cpp.o

C:\DOCUME~1\COMPAQ~1\CONFIG~1\Temp\build2000901975079652715.tmp\Morse.cpp:5:22: fatal error: WProgram.h: No such file or directory

#include "WProgram.h"

^

compilation terminated.

Error de compilación

Archivo Morse.ino

#include <Morse.h>

Morse morse(13);

void setup() {}

void loop()
{
morse.dot(); morse.dot(); morse.dot();
morse.dash(); morse.dash(); morse.dash();
morse.dot(); morse.dot(); morse.dot();
delay(3000);
}

Archivo Morse.h

/*
Morse.h - Library for flashing Morse code.
*/
#ifndef Morse_h
#define Morse_h
#include "WConstants.h"

class Morse
{
public: Morse(int pin); void dot();
void dash();
private:
int _pin;
};

#endif

Archivo Morse.cpp

/*
Morse.cpp - Library for flashing Morse code.
*/

#include "WProgram.h"
#include "Morse.h"

Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}

void Morse::dot()
{
digitalWrite(_pin, HIGH); delay(250);
digitalWrite(_pin, LOW); delay(250);
}

void Morse::dash()
{
digitalWrite(_pin, HIGH); delay(1000);
digitalWrite(_pin, LOW); delay(250);
}

Gracias y saludos.

Hola ealget.

Como puedes ver, tengo problemas a la hora de crear la libreria Morse.

Los archivos los tienes en mi anterior reply o si quieres en el siguiente enlace de Arduino Playground.

http://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix2

Que tengas suerte.

Saludos.

Quien usa

#include "WProgram.h"

en estos días? Eso era compatibilidad de programas viejos .pde
no hace falta para nada

Hola.
Por favor, cuando pegues un código, antes de pegar pincha en el primer icono de los que tienes sobre el editor </> y así lo pegarás entre etiquetas code, que lo hacen más vistoso y utilizable directamente, tal que así:

Morse.cpp

/*
Morse.cpp - Library for flashing Morse code.
*/
#include "Morse.h"
#include <Arduino.h>
Morse::Morse(int pin)
{
   pinMode(pin, OUTPUT);
   _pin = pin;
}

void Morse::dot()
{
   digitalWrite(_pin, HIGH); delay(250);
   digitalWrite(_pin, LOW); delay(250);
}

void Morse::dash()
{
   digitalWrite(_pin, HIGH); delay(1000);
   digitalWrite(_pin, LOW); delay(250);
}

Como verás lo único que he cambiado es Wprogram.h por Arduino.h, que es el que se suele utilizar en las versiones más modernas del IDE, y simplifica las cosas. Si te compila, puedes cambiar el nombre de Morse.ino a (por ejemplo) basico.ino y meterlo dentro de una subcarpeta llamada basico. Entonces, mueve toda la carpeta a la de librerías, y al abrir de nuevo el IDE, en el menú archivo->ejemplos te aparecerá tu librería y dentro de ella basico.
Saludos.

Hola noter

Gracias por decirme la forma de pegar código y por el cambio que has hecho.

En cuanto llegue a casa lo pruebo

Saludos

Hola noter.

Ya estoy otra vez aqu¨.

He cambiado por <Arduino.h> y le he dado a verificar y me ha salido el siguente

WConstants.h: No such file or directory.

Siguiendo el ejemplo de WProgram he buscado por ahí y he encontrado esto refrente a WConstans.h :

Borrar la linea:

#include "WConstants.h"

y añadir en el archivo .h lo siguiente

#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

De esta manera el codigo se compilará y le hará compatible con Arduino 0023 y las versiones 1.0.

Segun decia en la pagina que he mirado.

Y ya ha compilado.

Pero ahora no entiendo esto que mencionas :

" Si te compila, puedes cambiar el nombre de Morse.ino a (por ejemplo) basico.ino y meterlo dentro de una subcarpeta llamada basico. Entonces, mueve toda la carpeta a la de librerías, y al abrir de nuevo el IDE, en el menú archivo->ejemplos te aparecerá tu librería y dentro de ella basico."

Lo que yo he hecho y no se si estara bien es (tus instrucciones las he entendio de esta manera):

Dentro que la carpeta Morse.ino tenía el archivo Morse.ino que he renombrado a Basico.ino.
Dentro de esa Morse.ino he creado una subcarpeta Basico donde he metido Basico.ino.
y despues toda la carpeta Morse.ino (con la carpeta Basico y los archivos Morse.h y Morse.cpp)
la he movido a las capeta Libraries.

Pero despues de abrir la IDE en el menu archivo->ejemplos no está la libreria.

No se si estoy haciendo bien lo de las carpetas y subcarpetas.

Y una pregunta más ¿por que la extension .ino? Me imagino que viene de Arduino.

¿Se te ocurre algo?

Gracias de nuevo por la paciencia

Las instrucciones las has entendido perfectamente. El cambio no es inmediato (hay que reiniciar el IDE), pero he hecho exactamente lo mismo:

libraries
     Morse
          Morse.h
          Morse.cpp
          Basico
               Basico.ino

Y en el menú Archivo, me aparece en ejemplos una línea llamada Morse, que al desplegar tiene como ejemplo Basico. Mi versión de IDE es la 1.6.0.
Hay dos ubicaciones de librerías. Una en la propia carpeta donde está instalado el ide (en mi caso /arduino-1.6.0/libraries) y otra en la carpeta de sketch por defecto (en mi caso /Arduino_Projects/libraries). En ambas aparece el menú perfectamente.
En cuanto a WProgram.h o Wconstants.h, sencillamente las considero obsoletas y no las uso. En su lugar sólo hago referencia a Arduino.h; pero la opción de precompilador que mencionas es perfectamente válida (#if ARDUINO >= 100).

Hola noter.

Mi arbol de directorios de Morse es mismo que el tuyo:

libraries
Morse
Morse.h
Morse.cpp
Basico
Basico.ino

Y esta guardada en la ubicacion por defecto. Aun asi no aparece Morse en Archiv/Ejemplos, despues de reiniciar el IDE.

Pero si abro Basico.ino y lo cargo en el Arduino, funciona perfectamente.

He probado a copiar la carpeta Morse en la otra ubicuacion de las librerias de Arduino (Archivos de programa/arduino/Libraries) y despues de reiniciar el IDE tampoco aparece Morse en Archivo/ejemplos.

Y al cargarlo de nuevo enle Arduino, funciona bien, pero enla zona de mensajes del IDE, me dice que
el Morse de Archivos de programa/arduino/Libraries no lo usa.

Saludos