Faltan la directiva #include "mates.h" en mates.c. Además, supongo que también has puesto la misma directiva en tu archivo.ino.
Es recomendable en el archivo mates.h, además, incluir una directiva condicional para evitar la inclusión múltiple de la cabecera:
#ifndef mates_h
#define mates_h
int sumar(int,int); // aquí van las definiciones de la cabecera
#endif
Si así no te compila, pon la salida de error que te da el compilador.
#ifndef mates_h
#define mates_h
int sumar(int,int);
#endif
mates.c
#include "mates.h"
int sumar(int a, int b)
{
return a+b;
}
y el fichero .ino
#include "mates.h"
void setup()
{
Serial.begin(115200);
}
void loop()
{
delay(2000);
int s = sumar(100,200);
Serial.println(s);
}
se obtiene esto al compilar:
C:\...\AppData\Local\Temp\cczt2I92.ltrans0.ltrans.o: In function `loop':
C:\src_arduino\ejemplo/ejemplo.ino:15: undefined reference to `sumar(int, int)'
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.
si lo que tienes es un conjunto de funciones que pueden no tener relacion unas con otras quizas no sea correcto usar una clase ,aunque si las puedes agrupar en ficheros y luego incluirlas en el sketch como si fuera una libreria con #include
Por cierto ,supongo que te falta el nombre de los parametros en el fichero de cabecera,solo has puesto el tipo de variable:
En los prototipos de función creo que se pueden dejar los parámetros sin nombre, sólo con el tipo tal y como lo ha puesto forumisto. Prueba a renombrar el mates.c a mates.cpp.
¿Los archivos .ino, .cpp y .h están todos en la misma ubicación?
Cuando abro con el IDE (1.8.5) el fichero ejemplo.ino, automáticamente abre en dos pestañas los ficheros mates.h y mates.c, luego no creo que da igual .c que .cpp
Y los ficheros están en el mismo directorio.
El código a mi me compila perfectamente y se ejecuta perfectamente en un wemos d1 mini el IDE ARDUNO 1.8.1
Yo para esto no creo que sea necesario hacer una clase. Es cierto que aun no comprendo muy bien cuando hacer las separion de codigo mediante clases o no.
Esto un poco como tu intento separa el código en partes y me esta costando. Yo lo hago como el ejemplo que has puesto el problema que encuentro es que a veces no detecta cosas declaradas en otras pestañas. Y tienes que hacer multiples declaraciones a los fichero según los necesitas recuerda que las librerías externas también tiene que declararlas en todo los sitios que se usen
Pues eso es lo que te decia arriba ,si son un conjunto de funciones matematicas ,metelas en un archivo con extension .h que tendras en la misma carpeta donde tengas el sketch y en la primera linea del sketch .ino lo incluyes con #include "fichero.h"