Buenas :
Estoy necesitando dividir un programa en varios ficheros .Pero me hago lio cuando debo declarar las funciones a utilizar .Principalmente por que en mi programa una función puede llamar a otras funciones .y estas otras funciones a otras.
vi este tutorial que explica muy bien ,pero solo llama de a una funcion y sin pasarle parametros o variables globales
como no pasan parámetros mira el caso de
void velocidad (int v);
Ahi pasa parámetros
Hola Ricardo espero que andes bien :
Mi programa es para trabajar con un tft, por lo cual el void loop lo uso para llamar a cada pagina y dentro de esas paginas uso un do_while ,El cual permanece en un lazo a modo loop hasta que se presiona una parte del panel. produciendo un salto de pagina.
Entonce los lazos do while de cada pagina ,siempre llaman a una función (la cual llamo funicon_1 en mi ejemplo)
Lo que no entiendo bien es donde debo declarar la variable escalado_eje1 ,donde debo declarar xpos, ypos, radius, TX1, etc..
Funcion1() // aca inicia una funcion esta funcion es llamada por todo los lazos do_ while (paginas),es
la que me permite realizar siempre el control
escalado_eje1 = map( medida_1, 0, 4095, 0, 150); //medida_1 es una señal analogica que debo leer
constantemente
////////////////////////////////////////////////////////////////////////
Funcion2()// Aca inicia otra funcio que utiliza la variable escalado_eje1 que se lo pasa como parametro a
Funcion3
int xpos = 0, ypos = 0, gap = 0, radius = 0;
xpos = 10, ypos = 140, gap = 5, radius = 90;
Funcion3(escalado_eje1, 0, 145, xpos, ypos, radius, TX1, 0);// donde debo declar xpos, ypos,
radius, TX1,
////////////////////// Aca inicia la funcion Funcion_3
int Funcion3(int value, int vmin, int vmax, int x, int y, int r, char *units, byte scheme
int v = map(value, vmin, vmax, anglgeneg, angle);// esto esta dentro de funcion 3
//De la funcion3 tambien llamo otras funciones
Necesito cada función ponerla en un fichero distinto para que me quede mas ordenado.Y saber como debo declarar correctamente las cosa (variables,funciones y librerias)
ArduMyth Muchas gracias por tu respuesta.
No tengo dudas de que el problema es de planteamiento ![]()
Las funciones si las utilizo para no repetir código ,hice el ejemplo solo para ser un poco mas grafico ,el programa tiene como 1800 lineas y 60 funciones.estos es por que le fui agregando librerias y complejidad al programa
Mi problema es que de una función llamo a otras,y dentro de esas otras a otras
entonces no se bien como partirlo para tener un fichero por cada parte del programa (en mi caso paginas del tft)
según el ejemplo
entiendo que debo generar un archivo .cpp para las funciones y uno .h para declara que funciones voy a utilizar del cpp
hasta ahi excelente .
mis dudas:
¿tengo que generar tantos ficheros.cpp como fichero.h?
¿Genero un fichero.h solo para variables que use en todo los ficheros a modo variables globales?
¿si tengo fichero 1.cpp,fichero2.cpp,fichero3.cpp ,debo incluir en el fichero1.cpp el fichero2.h y el fichero3.h,y debo incluir en el fichero2.cpp el fichero2.h y el fichero3.h, ? ?
en pocas palabras ¿que hace el cpp y uqe hace el el .h?
Estoy seguro de que tengo un problema de planteamiento pero si lo pudiese reordenar sin generar todo de nuevo seria mu bueno
![]()
ArduMyth Gracias nuevamente por la respuesta me voy aponer a leer lo que enviastes y tal como decís es la mezcla entre el mundo electrónico y el de la programación.
La necesidad de llamar una función dentro de otra es por que para usar el TFT tengo que hacer un
Do-while dentro de cada función (pagina del TFT).SI no se hace asi y usos de manera "normal" en void loop el TFT queda oscilando constante mente (parpadea la pantalla).
Pero en ese Do -While necesito activar otras funciones de control o pasar parametros a librerias por ejemplo libreira tactil,libreria de lectura de sd,libreria de RTc et
por eso el llamado de una función a otra .
Vos a seguir capacitandome en los punto de que mencionaste antes y voy a volver a reformular mi programa
ArduMyth a ver si me podes ayudar con esta parte resumida del programa
uso dos librerías para controlar el TFT
me gustaría poder separar la funcion" pagina1".
de este modo el programa compila bien y carga sin problemas
#include <MCUFRIEND_kbv.h> // Librerias de TFT
#include <TouchScreen.h> // Librerias de TFT
#define YP A1 //Pines para controla el TFT
#define XM A2 //Pines para controla el TFT
#define YM 7 //Pines para controla el TFT
#define XP 6 //Pines para controla el TFT
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);// COntrol del area tactil el 300 es el valor resistivo
#define BLACK 0x0000 //Defino los valores para los distintos colors del TFT
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define TEST 0x1BF5
#define JJCOLOR 0x1CB6
#define JJORNG 0xFD03
#define TS_MINX 190
#define TS_MINY 130
#define TS_MAXX 860
#define TS_MAXY 900
#define MINPRESSURE 10 //sensibilidad del area tactil
#define MAXPRESSURE 1000
#define LCDROTATION 0
MCUFRIEND_kbv tft;
////////////////////////////////////**************************************************************************
void setup(void)
{
Serial.begin(9600); //inicio comunicacion serial
tft.reset(); //reset HMI segun libreria
tft.begin(0x9488); //inicio HMI
tft.fillScreen(BLACK); //funcion de la libreria del tft
tft.setRotation(1); //funcion de la libreria del tft
tft.setTextSize(6); //funcion de la libreria del tft
tft.setCursor(100,160); //funcion de la libreria del tft
tft.println("ARDUINO"); ////es solo una pantalla de presentacion
delay(3000);
pagina1(); // Dibujo la primera pagina y despues al void loop
}
void pagina1()
{
tft.fillRect(0,0,480,320, BLACK);
tft.setCursor(100,160); //funcion de la libreria del tft
tft.setTextSize(6);
tft.println("inicio");
}
void loop()
{
TSPoint p = ts.getPoint();
pinMode(XP, OUTPUT);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
pinMode(YM, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) /// si hay presion sobre el TFT
{
//scale from 0->1023 to tft.width
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
Serial.print("X = "); Serial.print(p.x);
Serial.print("\t Y = "); Serial.println(p.y); //verifico por consola serial si el tactil funciona
}
}