Autor Tema: Mis primeras librerias en arduino  (Leído 3520 veces)

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

Desconectado estepian

  • PIC10
  • *
  • Mensajes: 3
Mis primeras librerias en arduino
« en: 10 de Febrero de 2015, 07:55:52 »
Hola, mi nombre es Germán Esteban, estudiante de ing. Electrónica y estoy empezando a crear mis propias librerías.
Sin embargo tengo una gran duda la cual explico a continuación.

Estoy tratando de crear una librería que cuando la llame le envié dos datos, haga los cálculos correspondientes y me regrese el valor calculado
pero no se como hacer para que me regrese dicho valor.

He tratado de hacerlo de forma similar a cuando se crea una función en el mismo sketch pero no funciona.

Les agradezco mucho algún consejo.

Saludos.
 :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Mis primeras librerias en arduino
« Respuesta #1 en: 10 de Febrero de 2015, 11:53:50 »
Citar
int max(int num1, int num2)
{
   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result;
}

Eso retorna el maximo de 2 numeros. Lo que retorna es un int
El uso:

int Variable = max(17,5);

en Variable el resultado es 17.


Y la otra es pasarle el puntero asi lo mdifica...

Citar
void max(int num1, int num2, int* Variable)
{
 
   if (num1 > num2)
      *Variable = num1;
   else
      *Variable = num2;

}

Se usaria:

int Variable;
max(17,5,&Variable);

Para multiples valores o con punteros o con estructuras.
« Última modificación: 10 de Febrero de 2015, 12:00:21 por KILLERJC »

Desconectado estepian

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeras librerias en arduino
« Respuesta #2 en: 11 de Febrero de 2015, 07:08:57 »
Citar
int max(int num1, int num2)
{
   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result;
}

Eso retorna el maximo de 2 numeros. Lo que retorna es un int
El uso:

int Variable = max(17,5);

en Variable el resultado es 17.


Y la otra es pasarle el puntero asi lo mdifica...

Citar
void max(int num1, int num2, int* Variable)
{
 
   if (num1 > num2)
      *Variable = num1;
   else
      *Variable = num2;

}

Se usaria:

int Variable;
max(17,5,&Variable);

Para multiples valores o con punteros o con estructuras.

Gracias por tu atencion KILLERJC, pero te agradeceria mil veces mas si me mostraras el primer ejemplo implementado en los archivos .h y .cpp

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Mis primeras librerias en arduino
« Respuesta #3 en: 11 de Febrero de 2015, 10:50:52 »
en el .h pones el prototipo

int max(int num1, int num2);

y en .cpp la funcion completa. y agregas el .h a este

Asi cuando queres agregar esta funcion a tu programa principal agregas unicamente el .h
El .cpp debe estar en una ubicacion valida para los includes, sino vas a tener que agregar el archivo o la direccion donde se encuentra asi el linker lo busca.

Es C creo que basico y temas del compilador que estes usando.

Desconectado estepian

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeras librerias en arduino
« Respuesta #4 en: 13 de Febrero de 2015, 08:55:57 »
en el .h pones el prototipo

int max(int num1, int num2);

y en .cpp la funcion completa. y agregas el .h a este

Asi cuando queres agregar esta funcion a tu programa principal agregas unicamente el .h
El .cpp debe estar en una ubicacion valida para los includes, sino vas a tener que agregar el archivo o la direccion donde se encuentra asi el linker lo busca.

Es C creo que basico y temas del compilador que estes usando.


De nuevo gracias! Tengo otra duda que se que puedes resolverme  :oops: !!!
La variable que retorna ¿se debe de declarar como publica?
¿Se escribe sin guion bajo en los 2 archivos de la libreria?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Mis primeras librerias en arduino
« Respuesta #5 en: 13 de Febrero de 2015, 09:34:47 »
En el caso que te di las variables que tenes son num1,num2 y result, estas son variables con scope en la funcion nomas
la que yo llame "Variable" puede ser global o no. Como puede ser algo que declaraste dentro del main asi el scope queda dentro de la funcion main, o puede ser global.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Mis primeras librerias en arduino
« Respuesta #6 en: 09 de Junio de 2015, 17:02:18 »
Creo que aqui estan confundiendo un poco los conceptos. Arduino generalemente se programa en c++ no en c. Podriamos decir q c++ es una extension de c. Por lo tanto cualquier cosa que hagas en c puede ser leida o compilada por c++. KILLERJC te dio una explicacion de como crear una libreria utilizando c no c++. Es decir, el sugiere lo siguiente:

max.h:

Código: C
  1. #ifndef max_h
  2. #define max_h
  3.  
  4. int max(int num1, int num2);
  5.  
  6. #endif

max.c (si no me equivoco deberia ser max.cpp):

Código: C
  1. int max(int num1, int num2)
  2. {
  3.    /* local variable declaration */
  4.    int result;
  5.  
  6.    if (num1 > num2)
  7.       result = num1;
  8.    else
  9.       result = num2;
  10.  
  11.    return result;
  12. }

ahora para convertir max.c a max.cpp lo unico que tienes que hacer es cambiar la extension y el compilador la leera igual. No estoy seguro si Arduino IDE compilara archivos *.c como si fuesen *.cpp.

La variable que retorna ¿se debe de declarar como publica?

Desde el punto de vista de c no existen variables publicas o privadas. En este caso la funcion esta siendo declarada como global por ende puede ser accedida desde cualquier lugar (metodo, funcion o clase). En c solo existen 2 tipos de varialbes: locales y globales.
  • Locales cuando son declaradas dentro de una funcion.
  • Globales cuando son declaradas fuera de una funcion.

En c++ si existen variables privadas y publicas:
  • Privadas: solo pueden ser accedidas por la clase a la q pertenecen.
  • Publicas: pueden ser accedidas desde cualquier otro lugar (metodo, clase o funcion)

¿Se escribe sin guion bajo en los 2 archivos de la libreria?
No, el guion bajo se usa generalmente para declarar variables privadas. Esto es opcional. Es decir, el guion bajo es meramente documentativo para decirle a otros desarrolladores cuando lean tu codigo que la variable es privada sin necesidad de q tengan que ir a ver el archivo *.h.

Si quieres crear una libreria en c++ mira este link:
http://www.arduino.cc/en/Hacking/LibraryTutorialhttp://www.arduino.cc/en/Hacking/LibraryTutorial
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA