Bienvenido a los foros de FT81x Manía. Te invitamos a regístrate totalmente gratis. Disfruta de tu experiencia con un grandes amigos y Staff.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Thread Contributor: TFTLCDCygConsejos para aprender a usar la librería en el IDE arduino

#1
1
Better response on post Consejos para aprender a usar la librería en el IDE arduinoEl presente tema tiene la finalidad de que aportemos nuestros conocimientos de programación, ideas, atajos y en general cada granito de arena que nos permita ir mejorando los proyectos personales. La idea es que todos conozcamos mejor la librería y podamos sacarle el mejor partido.

Para mantener un orden o referencia básica debemos asignar un título a la herramienta conjunto de atajos que posteemos, así tendremos la posibilidad de que la búsqueda futura sea más sencilla.

Separación de un sketch en pestañas

Ejemplo que usaremos para demostrar el funcionamiento de esta técnica de optimización de código.

#include <GD23ZU.h>
//#include <GDCore7XXI.h>

void setup(){
 GD.begin(GD_STORAGE);
 MP();
}
void loop(){}

void MP(){
int ActivaCortina, DespXMP=(GD.w/2)-(480/2);  
int SaliraMP, DespX=-350;      
int VelDespX=0;
int movx, velocidadx;
 
 GD.cmd_loadimage(0, 0);
 GD.load("tree.jpg");
 
 while(1)
 {
  GD.ClearColorRGB(0x000055);
  GD.Clear();
  GD.get_inputs();

  GD.SaveContext();
    GD.Begin(BITMAPS);
    GD.Vertex2f(DespXMP*16, ((GD.h/2)-(272/2))*16);
   if(ActivaCortina==1){VelDespX=10; DespXMP=DespXMP-VelDespX; if(DespXMP<=-480){VelDespX=0; DespXMP=-480;}}
   if(ActivaCortina==2){VelDespX=10; DespXMP=DespXMP+VelDespX; if(DespXMP>=(GD.w/2)-(480/2)){VelDespX=0; DespXMP=(GD.w/2)-(480/2);}}
  GD.RestoreContext();

  GD.Tag(1); GD.cmd_fgcolor(0x005000);  
   GD.cmd_button((GD.w/2)-80, (GD.h/2)-20, 120, 80, 31, 0,"Test");  
  GD.Tag(255);

  if (GD.inputs.tag==1)
  {
   delay(125);
    ActivaCortina=ActivaCortina+1;
    if(ActivaCortina>=3){ActivaCortina=1;}
  }

  GD.cmd_number(100, 375, 28, OPT_SIGNED|OPT_RIGHTX, DespXMP);
  GD.cmd_number(100, 375+35, 28, OPT_SIGNED|OPT_RIGHTX, ActivaCortina);
  GD.swap();
 }  
}

En el IDE de arduino podemos programar todo nuestro proyecto en un solo archivo ino. Muchas veces las tareas son simples y apenas si requieren de una o dos funciones. A medida que incrementamos el hardware en nuestros arreglos, la secuencia de programación se va tornando mas y mas densa, hasta el punto que perdemos de vista las rutinas individuales de cada elemento que queremos controlar.

Afortunadamente contamos con un elemento de programación muy poco descrito en foros e incluso muy poco usado: el manejo de pestañas dentro de un sketch

Para agregar una pestaña a nuestro sketch hay que desplegar el menú secundario ubicado en la parte superior derecha del IDE

?mage

Asignamos un nombre a la pestaña, es recomendable asignar algún título que nos dé idea de que parte del código queremos administrar. En el ejemplo, aislaremos la carga de imágenes de fondo en una pestaña

?mage

Al dar click en el botón OK, se creará una nueva ventana en nuestro sketch. 
?mage

Cabe señalar que hasta que no guardemos el sketch la pestaña no se agregara al programa principal, así que hay que tener cuidado de guardar el sketch principal para no perder los ajustes. Al guardar el sketch, en la carpeta se creará un archivo ino con el nombre de la pestaña, además de que la pestaña será visible en el listado principal de elementos del sketch
?mage

?mage

En este punto ya podemos comenzar con la reducción de código. Retiraremos del ino principal las instrucciones que permiten la carga de imágenes en la GRAM de la pantalla. 

?mage

?mage

Incluso podemos aprovechar para colocar el setup en su pestaña:

?mage

Si tratamos de compilar el sketch o intentamos subirlo a nuestro MCU solo obtendremos errores saltando como conejos por todos lados. El problema es que estamos llamando instrucciones que se usan dentro de funciones y no pueden operar fuera de ellas.

?mage

La solución es la clave del manejo eficiente de pestañas: crear funciones independientes en cada pestaña que agreguemos a nuestro sketch. El archivo ino maestro será aquel que tenga las cabeceras de llamado de librerías, los demás archivos ino sólo contendrán una parte específica del código. Recordemos que todos los archivos ino dentro de la carpeta del programa, cumplen una función, así que debemos tener cuidado en no borrar alguno de ellos por descuido.

Para quitar el reporte de errores al compilar y cargar el sketch, creamos una función para las instrucciones que hemos aislado para la carga de imágenes en la GRAM

?mage

Solo resta agregar el llamado de la función en la zona en la que retiramos las instrucciones de carga de imágenes, guardamos los cambios y subimos el programa al MCU:

?mage

Con esta técnica podemos optimizar el código de tal forma que revisiones o mejoras futuras no implicarán afectar zonas que no queremos cambiar. No siempre podremos reducir el número de líneas de código pero separaremos el sketch en sectores más cortos de fácil manejo
Reply
#2
0
Gracias TFTLCD.Tenia que dividir un programa y s eme estaba complicando .Habia visto este video https://www.youtube.com/watch?v=PPsUHX6nVow&t=9s
pero se me hacia lio de como llamar las variables globales y locales que usaba con diferentes librerias.
Usando el .ino lo separa en seguida
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)