Moin,
bin seit einiger Zeit dabei den Arduino Uno als Sensor-Handler in meine Haus-Energieverwaltung einzubinden. Ansprechen v. I2C Elementen und Serielle Übermittlung an PC. Da ich gerne meinen Bandwurmcode übersichtlicher gestallten möchte, versuche ich nun Code in eigene Bibliotheken auszulagern und diese einzubinden.
Aufgabe meiner ersten Bibliothek ist lediglich Daten (zu einem Sensor) zu speichern und bereitzustellen(Addresse, Name, letzte Temperatur, Mindesttemperatur,Höchsttemperatur).
Beispiel aus Sketch:
#include <LM75.h>
/.../
LM75 TempSensor1(0x48,"Sensor1");
Serial.println("Sensor1 "+String(m_TempSensor1.GetAddress()));
LM75 m_TempSensor2(0x4F,"Sensor2");
Serial.println("Sensor1 "+String(m_TempSensor1.GetAddress()));
Serial.println("Sensor2 "+String(m_TempSensor2.GetAddress()));
/.../
--> Serieller Output
Sensor1 72
Sensor1 79
Sensor2 79
Problem offensichtlich? Das Erstellen einer zweiten Instanz überschreibt die Referenz meiner ersten.
Mache ich einen grundsätzlichen Fehler in der Bibliothek oder instanziere ich falsch?
Hier der Code meiner Bibliothek:
LM75.h
#ifndef LM75_H
#define LM75_H
#include "Arduino.h"
#include <string.h>
#include
class LM75 {
public:
LM75();
LM75(int nAddress, char charname);
~LM75();
char GetName();
int GetAddress();
void SetLastTemperature(double dblTemp);
double GetLastTemperature();
double GetMinTemperature();
double GetMaxTemperature();
};
#endif
LM75.ccp
#include "LM75.h" //include the declaration for this class
#include "Arduino.h"
int m_nAddress;
double m_dblLastTemp; // gelesene Temperatur als double
double m_dblMinTemp; // minimale bisher gelesene Temperatur als double
double m_dblMaxTemp; // maxle bisher gelesene Te r als double
char *m_charname;
//<> setup the LED, make pin 13 an OUTPUT
LM75::LM75(){
m_nAdres
/m_strName = strName;/#s = -1;
m_dblMinTemp =0;
m_dblMaxTemp = ;
m_dblLastTemp = 4711;
}
LM75::LM75(int nAddress, char* charname){
m_nAddress = nAddress;
m_charname = charname;
m_dblMinTemp = +500;
m_dblMaxTemp = -500;
m_dblLastTemp = 4711;
}
//<>
LM75::~LM75(){/nng to destruct/}
char* LM75::GetName(){
return m_charname;
}
int LM75::GetAddress(){
return [/color]m_nAddress;
}
void LM75::SetLastTemperature(//DblToString(m_dblMinTemp);double dblTemp){
m_dblMinTemp = dblTemp<m_dblMinTemp?dblTe//DblToString(m_dblMaxTemp);mp:m_dblMinTemp;
m_dblMaxTemp = dblTemp>m_dblMaxTemp?dblTemp:m_dblMaxTemp;
m_dblLastTemp = dblTemp;
}
double LM75::GetLastTemperature(){
return m_dblLastTemp;
}
double LM75::GetMinTemperature(){
return m_dblMinTemp;
}
double LM75::GetMaxTemperature(){
return m_dblMaxTemp;
}