Problema instanciando objetos con clases propias

Muy buenas

estoy trabajando en un proyecto en el que tengo que controlar la temperatura de una olla con un termostato “TODO/NADA” con histieresis. Puesto que necesito operar varias ollas al mismo tiempo, me he creado una clase que se llama “macerador” que es el termostato, donde instancio cada olla como un objeto para poder operarlas.

Pues bien, si trabajo con una sola olla todo va de lujo: instancio un objeto (olla) de la clase macerador y controlando la entrada me devuelve la temperatura y puedo operar la salida perfectamente. El problema viene cuando insancio varios objetos de la misma clase, pues me devuelve la temperatura de un solo objeto o se combinan para dar otras temperaturas… no tengo ni idea de que puede ser. Yo me imagino que puede ser que haya definido mal el ámbito de las variables o algo por el estilo y los objetos esten operando con las mismas funciones o algo por el estilo, pero lo entiendo porque he hecho que todas las variables sean privadas… No se muy bien que puede ser.

Dejo la libreria que he creado y el sketch que estoy utilizando para recibir las temperaturas de dos objetos.

A ver si alguien me puede ayudar porque me estoy volviendo loco!!!

sketch_feb01a.ino (699 Bytes)

sketch_feb01a.ino (696 Bytes)

Macerador.cpp (5.06 KB)

Macerador.h (1.98 KB)

Sólo has puesto el sketch. No está la librería.

Cierto! Gracias. Ya los he añadido.

Quisiera saber que diría noter al respecto, pero me parece que el truco estaba en colocar algo así en el cpp:

extern Clase instancia; // Se coloca fuera de cualquier función ya que cuenta como variable global

Si el constructor requiere parámetros, puede que no tenga sentido hacer esto.

No estoy seguro a lo que te refieres, Lucario, pero intuyo que a cuando una librería, además de definir una determinada clase, incluye también una instancia con un nombre "típico".
Este no parece ser el caso.
Me parece, amolina31, que tu olfato no te engaña y que efectivamente el problema es de ámbito de variables. Sospecho que concretamente de las variables globales que defines en el .CPP. Supongo que, por ejemplo, cada instancia de la clase deberá tener su t_anterior para la temporización del método temp. En ese caso, lo lógico es que definas t_anterior como una propiedad de la clase (en su sección private, ya que no parece que sea necesario su acceso público).
Por cierto, he visto que has declarado como float las variables que luego cotejas y estableces con millis(). Millis no devuelve float, sino unsigned long. Eso podría provocar también efectos indeseados.

Muchas gracias por vuestras respuestas.

Voy a declarar las variables que tengo en el .ccp como privadas y a repasar el tema de los float, doubles, long, etc. puesto que cuando hice la libreria tenia menos control de los tipos de variables. De todas formas, ha temp le he puesto float porque devuelve una temperatura con decimales, pero igualmente tienes razon que las tengo que revisar todas.

En cuanto pruebe las modificaciones informo de los avances.

Muchas gracias de nuevo

SOLUCIONADO!!!!

Noter tenía razon, el problema eran las variables definidas en el archivo .cpp; la cosa es que yo pensaba que por definicion las variables declaradas en ese archivo eran locales y privadas de la clase, pero por lo visto eran globales.

Muchas gracias por vuestra ayuda

Me alegro de que te funcione.
No obstante, creo que el funcionamiento de tu código actual es un poco difícil de interpretar. Intuyo que se debería poder optimizar bastante; pero si estás satisfecho con el funcionamiento, aplicaremos la máxima "si funciona, no lo toques".

jajaj. Por supuesto, de momento funciona pero me he dado cuenta de que hay muchas cosas que se pueden mejorar, optimizando memoria y mejorando el rendimiento, pero eso será para otro capítulo... Por no hablar de que debería comentar un poco más mi codigo