Buenas practicas de programacion, modularizacion

Hola buenas tardes comunidad, me he fijado y no he encontrado una forma de modularizar para escribir funciones o al menos archivos que funjan como funciones que reciba y me devuelva algo es para tener un código mas ordenado y no tener todo en un solo archivo o una sola secuencia no se si me explico jeje , saludos y gracias por sus sugerencias de antemano.

No comprendo muy bien lo que solicitas. La modulación es una forma ordenada de realizar algoritmos que facilita la lectura y la comprensión del toda aplicación (sea el lenguaje que fuere). Partiendo de esta premisa, y dirigiendo mi mensaje a Arduino (basado en C++), si lo que pretendes es modularizar, tienes dos opciones:

  • Aplicación sencilla:

1º Declaras tus funciones {}(esto siempre antes del setup).
2º Función Setup {}
3º Función Void {} (aquí nombras las funciones y juegas con ellas pasándoles y recogiendo datos)
4º Aquí las funciones que_requieras {}

Un pequeño ejemplo:

void setup() {
  Serial.begin(9600);
  pinMode(10, OUTPUT);
}

void loop() {
  enciendo_led();
  delay(500);  
  apago_led();
  delay(500);  
}

void enciendo() {
  digitalWrite(10, HIGH);
  Serial.println("Led encendido");
}

void apago(){
  digitalWrite(10, LOW);  
  Serial.println("Led apagado");
}

Yo por ejemplo dispongo de funciones específicas para conectar con Arduino, o abrir el Serial. En caso de que haya algún error, los voy guardando en otra función para tales efectos. Estas funciones las tengo fuera del código para que no me lo ensucie demasiado con excesivas líneas de código. Así puedes ir creando tu propia librería de Includes. Por cierto, esto anterior me refiero a Matlab. Trabajo mayormente con Matlab para comunicarme con Arduino.

Por cierto, las funciones en C++ se hacen del siguiente modo:

int funcion(int n, int p) { 
  n = n + 5; 
  p = p - 4; 
  operación = n*p
  return operacion; 
}
 
int a = 10;
int b = 20;
Serial.println(funcion(a,b));
Serial.println(funcion(10,20));

Fíjate que no tienes porqué llamarle igual a los argumentos de entrada y de salida, simplemente declarar bien el tipo de dato, no sé si me explico. Lee un poco en Google que hay buena info. Lee sobre el paso por valor o por referencia por ejem.

Si lo que pretendes es más complicado, puedes generar las funciones en archivos independientes y hacer un include para llamarlas. Esto sólo cuándo la aplicación es enorme, dispone de niveles y dispones de un sinfín de funciones.

Espero haberte ayudado. Yo estoy comenzando con Arduino, pero programando en sí con otros lenguajes ya soy menos inexperto. Un saludo.

Gallegosan:
1º Declaras tus funciones {}(esto siempre antes del setup).

Al se un código compilado no importa la posición de la función respecto a setup(), loop() de donde sera invocada.

void solo se usa si no devolverás nada. Si devolverás algo con return debe poner el tipo de dato a devolver.

void setup(){ 
   Serial.begin(9600);
   int a = 10;
   Serial.println(opera(a, 20));  //27
}
void loop(){
   //Nada
}
int opera(int n, int m) { 
   n += 2; 
   m -= 5; 
   return n+m; 
}

Para saber mas consulta Funciones de usuario