2025-05-1600
This commit is contained in:
101
include/CO2.h
Normal file
101
include/CO2.h
Normal file
@ -0,0 +1,101 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
#include <HardwareSerial.h>
|
||||
|
||||
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_WARN_1 800
|
||||
#define CO2_WARN_2 1000
|
||||
#define CO2_WARN_3 1400
|
||||
#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);
|
||||
}
|
Reference in New Issue
Block a user