Вывод Serial совершенно неверный -> что я делаю не так? - PullRequest
0 голосов
/ 21 февраля 2020

, поскольку вывод моего кода совершенно странный (для меня), я действительно буду признателен за любую помощь!

Мне нужны классы: 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

Так что группы не соответствуют добавленным группам, а имя датчика пусто. Почему?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...