循环返回多个值

returning multiple value in a loop

在我的程序中,我尝试在“Durchfluss”方法中执行操作后 return 两个值。然后这些值应该显示在循环中。但是当我显示它们时,f_ml1 得到 0,f_ml 得到 170。为什么我得到的变量 f_ml1 为 0?错误在哪里?此方法一直在循环调用。

class Sensor {

    float _flowRateTrinkwasser;
    unsigned int _f_ml;
    unsigned long _wasserMengeTrinkwasser;
    float _flowRateReinwasser;
    unsigned int _f_ml1;
    unsigned long _wasserMengeReinwasser;

  public:
    Sensor( float flowRateTrinkwasser, unsigned int f_ml, unsigned long wasserMengeTrinkwasser,  float flowRateReinwasser, unsigned int f_ml1, unsigned long wasserMengeReinwasser) {           // Konstruktor

      _flowRateTrinkwasser = flowRateTrinkwasser;
      _f_ml = f_ml;
      _wasserMengeTrinkwasser = wasserMengeTrinkwasser;

      _flowRateReinwasser = flowRateReinwasser;
      _f_ml1 = f_ml1;
      _wasserMengeReinwasser = wasserMengeReinwasser;

    }

    Durchfluss() { 

      _flowRateTrinkwasser = 120;    // Formel zur Berechnung von Flow Rate
      _wasserMengeTrinkwasser = 50;
      _f_ml = _flowRateTrinkwasser +  _wasserMengeTrinkwasser ;

      _flowRateReinwasser = 70;
      _wasserMengeReinwasser = 40;
      _f_ml1 = _flowRateReinwasser + _wasserMengeReinwasser;

      return (_f_ml1, _f_ml);

    }

};

#include "test.h"

//Durchflussmessung Variable Trinkwasser//
float flowRateTrinkwasser;
unsigned int f_ml;
unsigned long wasserMengeTrinkwasser;

//Durchflussmessung Variable Trinkwasser//

//Durchflussmessung Variable Reinwasser//

float flowRateReinwasser;
unsigned int f_ml1;
unsigned long wasserMengeReinwasser;

//Durchflussmessung Variable Reinwasser//

Sensor sensorOne(  flowRateTrinkwasser, f_ml, wasserMengeTrinkwasser, flowRateReinwasser, f_ml1, wasserMengeReinwasser );  // Objekt vom Konstruktor Sensor1

void setup() {
  Serial.begin(9600);
}

void loop() {

  (f_ml1, f_ml) = sensorOne.Durchfluss();
  Serial.println(f_ml1);
  Serial.println(f_ml);
  delay(1000);
}

您需要声明 type Durchfluss() 应该 return 并正确初始化 return 值。

示例:

// define a return type to use with `Durchfluss`
struct dfret {
    unsigned int ml1;
    unsigned int ml;
};

dfret Durchfluss() { // declare the function to return a `dfret`
    // calculate ...

    return {_f_ml1, _f_ml};  // note how to initialize `dfret`
}

我建议删除全局变量 f_ml1f_ml 并在 loop() 中声明它们。

然后在 loop() 中,如果您启用了 C++17,则可以使用 结构化绑定 f_ml1f_ml 绑定到returned dfrets 成员变量:

void loop() {
    auto[f_ml1, f_ml] = sensorOne.Durchfluss();
    // or if you don't need to change `f_ml1` or `f_ml`:
    //const auto&[f_ml1, f_ml] = sensorOne.Durchfluss();
}

如果您尚未启用 C++17:

void loop() {
    dfret rv = sensorOne.Durchfluss();
    auto& f_ml1 = rv.ml1;
    auto& f_ml = rv.ml;
}

坦率地说,我会添加一对 getter 方法并直接从您的传感器对象读取 f_ml1 和 f_ml:

class Sensor {
   ...
public :
    int get_f_ml1 () { return f_ml1; }
    int get_f_ml () { return f_ml; }
    ...
}

void loop() {
  sensorOne.Durchfluss();
  Serial.println(sensorOne.get_f_ml1());
  Serial.println(sensorOne.get_f_ml());
  delay(1000);
}