mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-29 08:27:17 +02:00
improved CO2 code (details https://forum.airgradient.com/t/s8-co2-reading-of-1/69/15)
This commit is contained in:
@ -607,47 +607,27 @@ const char* AirGradient::getCO2(int retryLimit) {
|
||||
return Char_CO2;
|
||||
}
|
||||
int AirGradient::getCO2_Raw(){
|
||||
int retry = 0;
|
||||
CO2_READ_RESULT result;
|
||||
const byte CO2Command[] = {0xFE, 0X44, 0X00, 0X08, 0X02, 0X9F, 0X25};
|
||||
byte CO2Response[] = {0,0,0,0,0,0,0};
|
||||
const byte CO2Command[] = {0xFE, 0X44, 0X00, 0X08, 0X02, 0X9F, 0X25};
|
||||
byte CO2Response[] = {0,0,0,0,0,0,0};
|
||||
|
||||
while(!(_SoftSerial_CO2->available())) {
|
||||
retry++;
|
||||
// keep sending request until we start to get a response
|
||||
_SoftSerial_CO2->write(CO2Command, 7);
|
||||
delay(50);
|
||||
if (retry > 10) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int timeout = 0;
|
||||
|
||||
while (_SoftSerial_CO2->available() < 7) {
|
||||
timeout++;
|
||||
if (timeout > 10) {
|
||||
while(_SoftSerial_CO2->available())
|
||||
_SoftSerial_CO2->read();
|
||||
break;
|
||||
}
|
||||
delay(50);
|
||||
}
|
||||
_SoftSerial_CO2->write(CO2Command, 7);
|
||||
delay(100); //give the sensor a bit of time to respond
|
||||
|
||||
if (_SoftSerial_CO2->available()){
|
||||
for (int i=0; i < 7; i++) {
|
||||
int byte = _SoftSerial_CO2->read();
|
||||
if (byte == -1) {
|
||||
result.success = false;
|
||||
return -1;
|
||||
}
|
||||
CO2Response[i] = byte;
|
||||
}
|
||||
int valMultiplier = 1;
|
||||
int high = CO2Response[3];
|
||||
int low = CO2Response[4];
|
||||
unsigned long val = high*256 + low;
|
||||
|
||||
int byte = _SoftSerial_CO2->read();
|
||||
CO2Response[i] = byte;
|
||||
if (CO2Response[0] != 254) {
|
||||
return -1; //error code for debugging
|
||||
}
|
||||
}
|
||||
unsigned long val = CO2Response[3]*256 + CO2Response[4];
|
||||
return val;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -2; //error code for debugging
|
||||
}
|
||||
}
|
||||
|
||||
//END CO2 FUNCTIONS //
|
||||
|
Reference in New Issue
Block a user