Dividir programas en ficheros multiples

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 :confused:
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 :confused: :confused:

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
                             }                  
         
 }