考虑这个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()
确保串口显示器不会过载。