Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Creando librerías en Arduino #1: Introducción y cabeceras [ITMK Blog]

  • 3 Respuestas
  • 3104 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« en: Febrero 15, 2015, 08:04:45 pm »
¿Qué es una librería? No, no es ese lugar en donde se venden libros, nos referimos a otra cosa. Una librería o biblioteca, en cuanto a informática se refiere, es un conjunto de implementaciones (según wikipedia; a decir verdad, no termino de encontrar las palabras para explicarlo por mi mismo), que están hechas para ser usadas por otros. Las librerías están hechas para ser usadas por otros programas, no son autónomas.

Por ejemplo, yo puedo crear una librería para controlar determinado sensor (Si hablamos específicamente del Arduino), o una para, por ejemplo, consultar el clima, etc...
Eso sí, debe haber un programa, que interaccione con la librería y muestre los datos.

En este pequeño tutorial, aprenderemos a crearlas y utilizarlas...

Ahora bien, las bases de una librería orientada a objetos en Arduino (y en C++ inclusive), son tres.
  • Cabecera (header)
  • Código (la clase en sí)
  • Keywords (palabras clave)
(Si no tienes ni idea sobre qué es el paradigma de orientación a objetos, se podría resumir en ésto: Uno tiene objetos, que simulan el mundo real, por ejemplo. Los objetos tienen métodos y propiedades. Imagina un objeto Coche, un método (función), sería por ejemplo conducir, y una propiedad (variable), podría ser la patente. Además, un objeto puede heredar todo eso de otro. Puedo crear una variante específica del objeto Coche, para adaptarlo a lo necesario. Una Clase, es el modelo de un objeto, su definición. Una instancia, es el modelo ya funcional, con el que puedo interactuar. Si no te quedó claro, puedes googlearlo :P)

La cabecera, es el archivo que se encarga de definir la estructura de la clase. Le dice al compilador qué métodos y propiedades tiene, etc...
El código, la clase en sí misma, es eso, métodos, propiedades, etc...
Recuerda: la definición en la cabecera debe ser exactamente igual a la estructura de la clase, sino el compilador lanzará error.

Keywords, las palabras clave que le dicen a la IDE, qué resaltar con color (So cute, eh? ^^)

En esta entrada nos vamos a centrar en la cabecera.

Creamos una carpeta para nuestra librería, y añadimos un archivo con el mismo nombre, con extensión .h. Si nuestra librería se llama chat, tenemos que crear chat.h.

Comencemos entonces, ésta, es la estructura básica de una cabecera:

Código: C++
  1. #ifndef LED_H
  2.         #define LED_H
  3.         #include <Arduino.h>
  4.        
  5.         class Led
  6.         {
  7.                 private:
  8.                         int Pin;
  9.                 public:
  10.                         Led(int P);
  11.  
  12.                         void Encender();
  13.                         void Apagar();
  14.         };
  15.        
  16. #endif

Las dos primeras líneas son llamadas cláusula de inclusión, evitan que incluyamos la misma cabecera dos veces. En PHP sería require_once en lugar de simplemente require.
Dicen, si no está definida la cabecera LED_H, ejecutar todo el código hasta #endif.
La segunda línea, se encarga de definir la constante LED_H, la cual indica que la cabecera ya se ha incluido. 
La tercera, incluye todo eso que nosotros usamos normalmente, las funciones, digitalWrite, analogRead. Sí, por si no lo notaste, todo eso también está contenido en una librería :P

En la quinta línea se define la clase Led.
En la séptima, definimos propiedades y métodos privados.
¿Qué significa esto? Si algo se define como privado, solo será accesible desde la misma clase, si es público, el programa podrá también acceder a ésta.
La propiedad Pin, es decir, el pin en donde está conectado el led, será privado, puesto que, ¿es necesario que el programa lo sepa, siendo el mismo programa quien lo define?...

:O ¿Cómo lo hace? Acá entran en juego los constructores...

Dentro de public, tenemos el método Led, con un parámetro llamado P, de tipo int (entero).
¿Notaron que aquel método tiene el mismo nombre que la clase? Ahap, eso es un constructor. Cuando nosotros instanciamos la clase, si hay un constructor presente, debemos pasarle los parámetros correspondientes, en este caso, el número de pin (el parámetro P). En el constructor, nosotros podemos tomar aquel número, y ponerlo en una propiedad de la clase, para usar esos datos luego, por ejemplo, en Pin.

Luego, tenemos el método Encender, que como pueden ver, no lleva parámetros. ¿Por qué? Si podríamos pasarle el número de pin... No, ese método actúa sobre el objeto Led, es decir, vamos a utilizar la propiedad Pin, para saber qué encender. Pero... ¿Qué es ese void ahí? Es el tipo de dato. Una función puede retornar (o no), algún dato. Una función que sume dos números, debe devolver un dato entero (int), por ejemplo. Si no queremos retornar ningún dato, será void.
El método Encender, no debería devolvernos nada, ¿no?.

Lo mismo para el método Apagar.

En las líneas siguientes se cierra la clase, y en la última, se cierra la cláusula de inclusión. ¿Recuerdan eso de "ejecutar todo el código hasta #endif."? Bueno, a eso se refiere.

Si LED_H no está definido, definirlo y crear la clase.

Eso es todo! Esa es la estructura básica de la header de una clase. En la próxima entrada veremos la clase como tal...

Saludos!
-fermino-

Fuente (mi blog :P): http://itmk-labs.blogspot.com.ar/2015/02/creando-librerias-en-arduino-1.html
« Última modificación: Febrero 18, 2015, 11:00:55 pm por fermino »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5477
  • Actividad:
    13.33%
  • Reputación 35
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Febrero 15, 2015, 11:05:19 pm »
Grande ferminooo!!!
Ya me dieron ganas de ponerme a jugar con mi arduino otra vez!
Muchisimas gracias por el aporte bro!!

Saludos!
ANTRAX


Desconectado Gabriela

  • *
  • Co Admin
  • Mensajes: 903
  • Actividad:
    0%
  • Reputación 18
    • Ver Perfil
    • Email
« Respuesta #2 en: Febrero 16, 2015, 01:37:30 am »

Fermi, tu narración es prístina, como el agua.

Súmale lo que aportas al conocimiento en sí, "grande", como te dice Antrax, es el adjetivo que te va de maravillas.

Gracias por ayudarnos a seguir creciendo!

Gabi.

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #3 en: Febrero 16, 2015, 12:56:09 pm »
Fermi, tu narración es prístina, como el agua.

Ya me hiciste googlear :v

 

¿Te gustó el post? COMPARTILO!



Arduino + Snap4Arduino "Hola Mundo"

Iniciado por Riojas

Respuestas: 1
Vistas: 2699
Último mensaje Febrero 19, 2017, 09:31:50 pm
por rreedd
Arduino + Snap4Arduino "Juego PONG" [Parte2]

Iniciado por Riojas

Respuestas: 0
Vistas: 1774
Último mensaje Marzo 03, 2017, 07:07:08 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Parte1]

Iniciado por Riojas

Respuestas: 0
Vistas: 2052
Último mensaje Febrero 24, 2017, 04:59:07 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Final]

Iniciado por Riojas

Respuestas: 0
Vistas: 1560
Último mensaje Marzo 15, 2017, 02:33:08 pm
por Riojas
Entornos Gráficos para la Programación: Plataforma Open Hardware Arduino

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2565
Último mensaje Junio 30, 2012, 06:47:30 pm
por ANTRAX