#include #include HardwareSerial Co2Port(1); // use UART2 // co2 Grenzwerte /* #define CO2_WARN_1 650 #define CO2_WARN_2 950 #define CO2_WARN_3 1250 #define CO2_WARN_4 1500 #define CO2_CRITICAL_PPM 1850 */ #define CO2_WARN_1 600 #define CO2_WARN_2 800 #define CO2_WARN_3 1000 #define CO2_WARN_4 1500 #define CO2_WARN_5 2000 #define CO2_CRITICAL_PPM 1850 int CO2Wert = -99; char antwort[100] = {0xFF}; int range =2000; bool readCo2Flag; char getCheckSum(char *packet) { char i, checksum; for (i = 1; i < 8; i++) { checksum += packet[i]; } checksum = 0xFF - checksum; return checksum +1; } int readCO2() { char cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; Co2Port.write(cmd,9); if(Co2Port.available()) { Co2Port.readBytes(antwort, 9); } #ifdef DebugCO2 for (int a=0; a<9; a++){ Serial.printf(" BufferRead [%d] = 0x%02X \n", a, antwort[a]); } Serial.println(); #endif if (antwort[0] != 0xFF) return -1; if (antwort[1] != 0x86) return -2; int antwortHigh = (int) antwort[2]; // CO2 High Byte int antwortLow = (int) antwort[3]; // CO2 Low Byte int ppm = (256 * antwortHigh) + antwortLow; Co2Port.flush(); return ppm; } void calibrationCo2() { char cmd[9] = {0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00}; cmd[8] = getCheckSum(cmd); Serial.printf("Checksumme = 0x%02X\n", cmd[8]); Co2Port.write(cmd,9); #ifdef DebugCO2 for (int a=0; a<9; a++){ Serial.printf(" BufferCalibration [%d] = 0x%02X \n", a, cmd[a]); } Serial.println(); #endif } void setRange() { char cmd[9] = {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; cmd[6] = range >> 8; cmd[7] = range & 0xFF; cmd[8] = getCheckSum(cmd); Serial.printf("Checksumme = 0x%02X\n", cmd[8]); Co2Port.write(cmd,9); #ifdef DebugCO2 for (int a=0; a<9; a++){ Serial.printf(" BufferRange [%d] = 0x%02X \n", a, cmd[a]); } Serial.println(); #endif } void beginC02() { Co2Port.begin(9600, SERIAL_8N1, 32, 33); readCo2Flag = false; delay(100); calibrationCo2(); delay(100); setRange(); delay(100); }