I am running an Electron with version 1.0.1 and I am receiving an SOS (Assertion Failure) using hardware serial (serial4 and serial5) when a spike in the sensor occurs. Below is an example of what I am doing and it seems to occur when trying to read the serial output.
void ParticularSensor::readSensor() {
char frame[32];
frame[0] = b0; #defined in other part of code
frame[1] = b1; #defined in other part of code
frame[2] = b2; #defined in other part of code
frame[3] = b3; #defined in other part of code
char currentFrame;
for(int i = 4; i < 32; i++) {
if (serial == 4) {
while (!Serial4.available()) { Particle.process(); }
currentFrame = Serial4.read();
frame[i] = currentFrame;
} else if (serial == 5) {
while (!Serial5.available()) { Particle.process(); }
currentFrame = Serial5.read();
frame[i] = currentFrame;
}
}
int value = (int(frame[10])*256 + int(frame[11]));
setRawDataValue(pm1, String(value));
value = (int(frame[12])*256 + int(frame[13]));
setRawDataValue(pm2, String(value));
value = (int(frame[14])*256 + int(frame[15]));
setRawDataValue(pm3, String(value));
}
My class has the following set function for a map of std::map<String, String> rawData;
void Sensor::setRawDataValue(String name, String value) {
rawData[name] = value;
}
And I am calling this code using a vector of std::vector<Sensor*> sensorVector;
and the code below after having the sensor initialized and inserted into the vector:
for (std::vector<Sensor*>::iterator it = sensorVector.begin(); it != sensorVector.end(); it++) {
(*it)->readSensor();
}
This code works when the sensor is in ambient air, but when applied to substance to spike the sensor readings, from values of 0-5 to values over a 1000, it causes a SOS error. Why is this happening?
Note:
If I have this code in main with no classes, it will work without any errors, but I have this code is a separate .cpp file since I want to create class for each specific sensor that inherits from the sensor class.