C ++ return语句返回空

时间:2016-04-10 18:56:03

标签: c++ arduino-uno

考虑这个arduino代码:

class Sensor{
  public:
  Sensor();
  Sensor(const char* name, int pin, float multiplier);
  int get_value();
  const char get_name();
  private:
  int readinput();
  int _pin;
  int _output;
  const char* _name;
  int _input;
  float _multiplier;
  };

Sensor::Sensor(){
  }
Sensor::Sensor(const char* name, int pin, float multiplier){
  _pin = pin;
  _multiplier = multiplier;
  _name = name;
  pinMode(_pin, INPUT);
  }

int Sensor::readinput(){
  return analogRead(_pin);
  }

int Sensor::get_value(){
  _input = readinput();
  _output = _input * _multiplier;
  return _output;
  }

const char Sensor::get_name(){
  return _name;
  }

当我使用来自JSON文件的数据创建此类的数组时,使用arduinoJson进行解释,并尝试以这种方式返回数组中某个传感器的名称:

_sensors[i].get_name());

它回来了!

我一直在互联网上搜索几个小时,我认为它可能与arduinoJson库将所有文本值作为const char *返回的事实有关。

问题是,我似乎无法弄清楚指针和常量的组合是如何工作的,特别是如果参数的输入是另一个指针的话!

编辑:这是我构建数组的方法。

class Communicator{
  public:
  Communicator();
  int checker();
  void sensorinitiater();
  private:
  Sensor _sensors[];
  int _arraysize;
  };

Communicator::Communicator(){
  }

int Communicator::checker(){
  while(true) {
    if(Serial.readString() == "give sensor values") {
     StaticJsonBuffer<600> jsonBuffer;
     JsonObject& sensorvalues = jsonBuffer.createObject();
     for(int i = 0; i < _arraysize; i++){
        Serial.println("gathering sensor data");
        Serial.flush();
        sensorvalues[_sensors[i].get_name()] = _sensors[i].get_value();
      }

     };
    }
  }

void Communicator::sensorinitiater(){ //check if JSON file with sensor data comes in, initiate sensors
  bool checker = true;
  StaticJsonBuffer<600> jsonBuffer;
  while(checker) {
  if(Serial.available() > 0) {

    checker = false;
    String sensorjson = Serial.readString();
    JsonObject& sensorprop = jsonBuffer.parseObject(sensorjson);
    if(!sensorprop.success()){
      Serial.println("parseObject() failed");
      Serial.flush();
      Serial.println(sensorjson);
      Serial.flush();
      sensorinitiater();  
      };
    Serial.println("parseObject() succeeded");
    Serial.flush();
    _arraysize = sensorprop.size();
    Serial.println(_arraysize);
    Sensor _sensors[_arraysize];
    for (JsonObject::iterator it=sensorprop.begin(); it!=sensorprop.end(); ++it){
      int i = 0;

      Sensor(sensorprop[it->key]["name"], sensorprop[it->key]["pin"], sensorprop[it->key]["linear_coefficient"]); _sensors[i];

      Serial.println(_sensors[i].get_name());
      Serial.flush();
      i++;

      }

    }
  }
 Serial.flush();
 Serial.println("finalising sensors");
}
  Communicator com;

void setup() {
  Serial.begin(9600);
  com.sensorinitiater();
  com.checker();
}

一旦arduino检测到输入(JSON文件),它就会保留内存空间并解析JSOn字符串。

然后我遍历文件,为JSON文件中的每个对象创建一个传感器。

我使用了很多

Serial.flush()

确保串口显示器不会过载。

0 个答案:

没有答案