1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
#include "SoftwareSerial.h"
#include "Wire.h"
#include <ds3231.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
#include <SD_ZH03B.h>
//*********************************************
Adafruit_BME680 bme; // I2C
SoftwareSerial ZHSerial(8, 9); // RX, TX
SD_ZH03B ZH03B( ZHSerial );
//********************************************
SoftwareSerial sSerial (10, 11);//RX=10 TX=11 utiliser un port hardware si disponible
const byte CO2Command[] = {0xFE, 0X04, 0X00, 0X03, 0X00, 0X01, 0XD5, 0XC5};
byte Response[] = {0, 0, 0, 0, 0, 0, 0};
unsigned long CO2;
//********************************************
struct ts t;
unsigned long dataTimer = 0;
unsigned long dataTimer3 = 0;
unsigned long dataTimer4 = 0;
int hours;
int minutes;
int temp, hum;
int pm25;
int previousMinutes = 1;
String timeString;
String receivedData = "Z";
// Nous stockons les valeurs des capteurs des 24 dernières heures dans des tableaux - stockez une valeur toutes les 15 minutes, donc pour 24 heures nous avons besoin de 96 octets.
// Nous devons utiliser des octets et ne pouvons pas augmenter le stockage à, disons, 5 minutes, car l'Arduino Pro Mini a une mémoire dynamique limitée.
uint8_t tempData[96] = {};
uint8_t humData[96] = {};
//uint8_t tvocData[96] = {};
uint8_t co2Data[96] = {};
uint8_t pm25Data[96] = {};
//uint8_t o3Data[96] = {};
int8_t r = 99;
int8_t last24Hours[12] = {};
int yAxisValues[4] = {};
int maxV = 0;
char printbuf1[80];
void setup() {
Serial.begin(9600);
Wire.begin();
/*
while (!Serial);
Serial.println(F("BME680 test"));
*/
if (!bme.begin()) {
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}
DS3231_init(DS3231_CONTROL_INTCN);
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
//bme.setPressureOversampling(BME680_OS_4X);
//bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
//bme.setGasHeater(320, 150); // 320*C for 150 ms
/*
t.hour=11;
t.min=47;
t.sec=0;
t.mday=28;
t.mon=9;
t.year=2022;
DS3231_set(t);
*/
// Set up Sensair *****
sSerial.begin(9600);
delay(100);
// Set up ZH03B *****
ZHSerial.begin(9600);
delay(100);
ZH03B.setMode( SD_ZH03B::IU_MODE );
delay(200);
}
void loop() {
//************************************************************************************************
if (! bme.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
temp = bme.temperature;
hum = bme.humidity;
//************************************************************************************************
// CO2 sensor pour 3 seconds
dataTimer3 = millis();
while (millis() - dataTimer3 <= 2000) {
sSerial.write(CO2Command, 8);
sSerial.readBytes(Response, 7);
while (sSerial.available()) sSerial.read();//vidage du buffer
if (Response[0] == 254) {
CO2 =(Response[3] * 256 + Response[4])/10;
}
//delay(1000);
}
//************************************************************************************************
// Read Particulate Matter sensor for 5 seconds
dataTimer3 = millis();
while (millis() - dataTimer3 <= 5000) {
//while (ZHSerial.available()) ZHSerial.read();//vidage du buffer
ZH03B.setMode( SD_ZH03B::QA_MODE );
delay(100);
ZH03B.readData();
pm25 = ZH03B.getPM2_5();
}
//************************************************************************************************
DS3231_get(&t);
hours = t.hour ;
minutes = t.min;
dataTimer4 = millis();
while (millis() - dataTimer4 <= 200) {
Serial.print("tempV.val=");
Serial.print(temp);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.print("humV.val=");
Serial.print(hum);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.print("pm25V.val=");
Serial.print(pm25);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.print("co2V.val=");
Serial.print(CO2);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
} |
Partager