Primeros pasos en librerias

Hola Amigos, estoy tratando de crear una libreria, solo para irme familiarzando con esto del Arduino.

Resulta, que para empezar cree una libreria que me suma y me resta (Algo sencillo), pero la quiero agarrar de base, para ir perfeccionando.

Me gustaria que me dieran su opinion de que sera el error que me esta apareciendo, acontinuacion lo realizado.

He creado, el archivo cabecera llamado Calculadora.h

#ifndef calculadora_h
#define calculadora_h

#include "Arduino.h"

class calculadora
{
public:
calculadora(int num1, int num2);
int sumar (int numl, int num2);
int restar (int numl, int num2);
int multiplicar (int numl, int num2);
int dividir (int numl, int num2);

private:
int _num1;
int _num2;
int resultado;

};
#endif

Y despues cree el archivo .cpp

#include "Arduino.h"
#include "Calculadora.h"

int Calculadora::Calculadora (int num1, int num2)
{
_num1 = num1;
_num2 = num2;
}

int Calculadora::sumar(int num1, int num2);
{
_num1 = num1;
_num2 = num2;
resultado = _num1+_num2;
return resultado;
}

int Calculadora::restar (int num1, int num2);
{
_num1 = num1;
_num2 = num2;
resultado = _num1-_num2;
return resultado;
}

Bueno, he agregado ambos archivos a la carpeta llamada Calculadora en el folder donde Arduino tiene registrada las librerias, que se llama Library.

Ahora he creado un archivo.ino, para incluir la libreria y poder utilizarla:

#include <Calculadora.h>
#include "Arduino.h"

int resultado;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
Calculadora.Calculadora(0,0);
resultado = Calculadora.sumar(1,2);
serial.print ("resultado:");
serial.println(resultado);

// put your main code here, to run repeatedly:

}

Bueno, resulta que he tratado de compilarlo pero me esta dando un error:

C:\Users\QuirosSanchez\Documents\Arduino\libraries\Calculadora prueba\Calculadora\Calculadora.ino: In function 'void loop()':

Calculadora:13:3: error: 'Calculadora' was not declared in this scope

Calculadora.Calculadora(0,0);

^~~~~~~~~~~

C:\Users\QuirosSanchez\Documents\Arduino\libraries\Calculadora prueba\Calculadora\Calculadora.ino:13:3: note: suggested alternative: 'calculadora'

Calculadora.Calculadora(0,0);

^~~~~~~~~~~

calculadora

Calculadora:15:3: error: 'serial' was not declared in this scope

serial.print ("resultado:");

^~~~~~

C:\Users\QuirosSanchez\Documents\Arduino\libraries\Calculadora prueba\Calculadora\Calculadora.ino:15:3: note: suggested alternative: 'Serial'

serial.print ("resultado:");

^~~~~~

Serial

Using library Calculadora in folder: C:\Program Files (x86)\Arduino\libraries\Calculadora (legacy)
exit status 1
'Calculadora' was not declared in this scope

Hola y bienvenido al foro.

Te invito a que leas las NORMAS para que veas como se postean código, errores, enlaces, etc. En tu caso corrige el post inicial usando la función de modificar.

En el fichero .cpp tienes que quitar el ";" que tienes despues de declarar la función:

int Calculadora::sumar(int num1, int num2); // <-- Este sobra.
{
  _num1 = num1;
  _num2 = num2;
  resultado = _num1+_num2;
  return resultado;
}

En tu sketch:

#include <Calculadora.h>
#include "Arduino.h"

int resultado;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  Calculadora.Calculadora(0,0);
  resultado = Calculadora.sumar(1,2);
  serial.print ("resultado:"); // El objeto es Serial, en mayúscula.
  serial.println(resultado);
 
    // put your main code here, to run repeatedly:

}

No hace falta que incluyas "Arduino.h" en el .ino.

Serial es en mayúscula la S, si no da error.

Toda clase que se quiera usar necesita un objeto de esa clase. En tu código no hay objeto, simplemente usas la clase y llamas a la función.

En este caso lo mejor y mas lógico no es definir un objeto, sino una función. Así tu libreria tendría esta forma:

calculadora.h

#ifndef calculadora_h
#define calculadora_h

#include "Arduino.h"

int sumar (int numl, int num2);
int restar (int numl, int num2);
int multiplicar (int numl, int num2);
int dividir (int numl, int num2);

#endif

calculadora.cpp

#include "Calculadora.h"
int sumar(int num1, int num2);
{
  return num1+num2;
}

int restar(int num1, int num2)
{
  return num1-num2;
}

int multiplica(int num1, int num2) {
  return num1*num2;
}

int dividir(int num1, int num2) {
  retun num1/num2;
}

Y tan solo falta usarla en el sketch

#include <Calculadora.h>
#include "Arduino.h"

int resultado;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  
  resultado = sumar(1,2);
  Serial.print ("resultado:"); // El objeto es Serial, en mayúscula.
  Serial.println(resultado);
 
    // put your main code here, to run repeatedly:

}

Existe una forma de hacer que una función de un objeto sea utilizable de la manera que propones. Para ello has de declarar la función con el modificador static, las variables miembro de la función también deberían ser static (o no usar ninguna variable miembro) y por último llamar a la función con el operador :: (objeto::funcion()). Pero este código es más avanzado y quizas te lleve a confusión, por eso no sé si intentar explicartelo mejor.