, поскольку вывод моего кода совершенно странный (для меня), я действительно буду признателен за любую помощь!
Мне нужны классы: sensor
и automation
. Объекты класса датчика содержат всю информацию об этом датчике (я удалил много кода, чтобы свести его к текущей проблеме). Класс автоматизации проверит все датчики и отреагирует в зависимости от измерений. Сенсорный объект хранится в автоматизации для сокращения используемой оперативной памяти.
class sensor {
public:
// Constructor
sensor(const char* sensorName) {
// Store name in object
setName(sensorName);
}
void addGroup(int newGroup) {
for (int i=0; i <= (5); i++){ // Max. 5 groups
if(groups[i] == 0) {
groups[i] = newGroup;
break;
}
}
}
int* getGroups() {
return groups;
}
bool getIsObject() {
return isObject;
}
char* getName() {
return name;
}
void setName(const char* sensorName) {
strcpy(name, sensorName); // Copy sensorName to name
// Alternative:
/*
char i=0;
do{
name[i] = sensorName[i];
++i;
}while(sensorName[i]!=0); //since a cstring is always null terminated.
name[i] = 0;
*/
}
void setObject() {
isObject = true;
}
private:
int groups[5] = {0}; // Default group for all: 0
bool isObject = false;
char name [20]; // Max. 20 characters in name
};
class automation {
public:
automation() {
}
void run() {
for(int i=0;i<3;i++) {
Serial.println("Printing sensor information");
Serial.print("Name: ");
Serial.println(sensors[i]->getName());
Serial.println("Group: ");
Serial.println(sensors[0]->getGroups()[i]);
}
}//function
// Füge Sensor-Instanz zu Sensor-Liste hinzu, um schlussendlich auf alle Sensoren zugreifen zu können
int storeSensor(sensor *newSensor) {
newSensor->setObject(); // Setze Variable isObject in Sensor-Instanz auf true
int n = 0;
for (int i=0; i < (sizeof(sensors)/sizeof(newSensor)-1); i++)
{
n=i;
if(!sensors[i]->getIsObject()) {
sensors[i] = newSensor;
break;
}
}
return n; // Liefert Array-Index / Stelle in Array, an der der Sensor gespeichert wurde.
}
private:
sensor *sensors[5]; // Max. 5 sensors in the array
};
automation automation;
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("Serial interface started");
sensor moistureSensor("moistureSensor");
moistureSensor.addGroup(1);
moistureSensor.addGroup(3);
automation.storeSensor(&moistureSensor);
}
void loop() {
Serial.println("Start loop()");
automation.run();
delay(2000);
}
Выход Serial.println () в автоматизации: run ():
Printing sensor information
Name:
Group:
255
Printing sensor information
Name:
Group:
20480
Printing sensor information
Name:
Group:
10
Так что группы не соответствуют добавленным группам, а имя датчика пусто. Почему?!