[Risolto] Variabili in 2 istanze di una libreria

Salve a tutti e possibile che due istanze di una stessa libreria abbiano delle variabili in comune? Sto sperimentando questo progetto: http://openenergymonitor.org/emon/node/58/ modificandolo per leggere due valori di potenza (importata ed esportata) ma se uso due istanze della libreria i valori sballano come se le due istanze usassero variabili in comune per fare i calcoli, è possibile? e se si come si risolve?

Grazie
Valerio

se non è una libreria ma un oggetto questo problema non si trova salvo vvaribili statiche, ma le variabili statiche lo sono proprio perchè VUOI che siano in comune.
è più probabile che la libreria faccia dei settaggi ai registri del micro per funzionare in un certo modo, e la secondaa istanza invece voglia usare dei valori differenti e vanno quindi in conflitto.

Oppure ti si riempie la ram

Ho dato un'occhiata alla lib. A parte l'accesso diretto all'ADC per la lettura, non vedo altre manipolazioni di registri che facciano pensare ad un "intreccio" delle 2 istanze.
Non mi pare neanche che la lib sia particolarmente corposa.
Forse è il resto dello sketch?

Questo è lo sketch che sto usando:

#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1;             // Create an instance
EnergyMonitor emon2;

void setup()
{  
  Serial.begin(9600);
  emon1.voltage(2, 548, 1.7);  // Voltage: input pin, calibration, phase_shift
  emon1.current(3, 16.6);       // Current: input pin, calibration.
  
  emon2.current(1, 16.6);       // Current: input pin, calibration.
}

void loop()
{
  emon1.calcVI(20,2000);         // Calculate all. No.of half wavelengths (crossings), time-out
  emon1.serialprint();             // Print out all variables
  
  double Correnterms = emon2.calcIrms(1480);  // Calculate Irms only
  Serial.print(Correnterms);
  Serial.print(" ");
  Serial.print(Correnterms*230.0);
  Serial.println(' ');
  
  delay(1000);
}

Praticamente se elimino la parte di codice che usa emon2 ottengo le letture giuste, ma se cerco di usare l'altra istanza i valori diventano tutti errati :frowning:

Ma hai 2 sensori?

magari ci sono variabili dichiarate nel .h?
spostale nel .cpp

Scusa lesto, ma questo che centra?

E' una classe, è la norma dichiarare le variabili nel file h come i prototipi di metodi e funzioni.

se sono dichiarati nella classe hai ragione. ma se sono dichiarati fuori allora sono duplitati, e non so se in caso di doppia inclusione possono generare errore. Sinceramente non conosco abbastanza il c++ per sapere se questo è possibile, e se questo può evvenire anche nel cpp

Ma hai 2 sensori?

Si 2 sensori amperometrici sui pin 1 e 3 mentre sul pin 2 leggo la tensione in uscita dall'inverter dei pannelli solari, ossia pin 3 potenza esportata e pin 1 (sensore sul contatore) potenza inportata (usata in casa insomma)

magari ci sono variabili dichiarate nel .h?

Si ma sono dentro la dichiarazione della classe alcune in "Public:" e altre in "Privare:"

Domani provo a ricontrollare il circuito di connessione dei sensori con l'arduino anche se non mi sembrerebbe questo il problema

non usare il pin1 che è usato per comunicare con il PC. cambia pin e tutto dovrebbe risolversi

Ho rifatto tutti i collegamenti ed ho usato gli ultimi pin e adesso funziona bene, grazie!

Skateman:
Ho rifatto tutti i collegamenti ed ho usato gli ultimi pin e adesso funziona bene, grazie!

Bravo. Metti [Risolto] va' :wink: