Added MH-z19
This commit is contained in:
@@ -17,3 +17,4 @@ lib_deps =
|
|||||||
MySensors @ ^2.3.2
|
MySensors @ ^2.3.2
|
||||||
wifwaf/MH-Z19 @ ^1.5.3
|
wifwaf/MH-Z19 @ ^1.5.3
|
||||||
enjoyneering/AHT10 @ ^1.1.0
|
enjoyneering/AHT10 @ ^1.1.0
|
||||||
|
featherfly/SoftwareSerial @ ^1.0
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <AHT10.h>
|
#include <AHT10.h>
|
||||||
|
#include "MHZ19.h"
|
||||||
|
|
||||||
#define MY_DEBUG
|
#define MY_DEBUG
|
||||||
#define MY_RADIO_RF24
|
#define MY_RADIO_RF24
|
||||||
@@ -12,12 +13,25 @@
|
|||||||
#define MY_DEFAULT_TX_LED_PIN (6) // the PCB, on board LED
|
#define MY_DEFAULT_TX_LED_PIN (6) // the PCB, on board LED
|
||||||
|
|
||||||
#include <MySensors.h>
|
#include <MySensors.h>
|
||||||
|
#include <SoftwareSerial.h> // Remove if using HardwareSerial or non-uno compatabile device
|
||||||
|
|
||||||
#define MOTION (8)
|
#define RX_PIN 8
|
||||||
|
#define TX_PIN 7
|
||||||
|
#define BAUDRATE 9600
|
||||||
|
|
||||||
|
#define MOTION (6)
|
||||||
|
|
||||||
|
MHZ19 myMHZ19;
|
||||||
|
SoftwareSerial mySerial(RX_PIN, TX_PIN);
|
||||||
|
|
||||||
|
uint8_t periodMin;
|
||||||
|
uint8_t periodMotion;
|
||||||
|
uint8_t curDelay;
|
||||||
|
|
||||||
void presentation();
|
void presentation();
|
||||||
void sendDataI(MyMessage msg, uint32_t status);
|
void sendDataI(MyMessage msg, uint32_t status);
|
||||||
void sendDataF(MyMessage msg, float status);
|
void sendDataF(MyMessage msg, float status);
|
||||||
|
void sendDataB(MyMessage msg, bool status);
|
||||||
|
|
||||||
MyMessage msgTemp(0, V_TEMP);
|
MyMessage msgTemp(0, V_TEMP);
|
||||||
MyMessage msgHum(1, V_HUM);
|
MyMessage msgHum(1, V_HUM);
|
||||||
@@ -26,27 +40,85 @@ MyMessage msgCO2(3, V_VAR1);
|
|||||||
MyMessage msgLight(3, V_VAR2);
|
MyMessage msgLight(3, V_VAR2);
|
||||||
MyMessage msgTimeWork(3, V_VAR3);
|
MyMessage msgTimeWork(3, V_VAR3);
|
||||||
MyMessage msgTimeMotion(3, V_VAR4);
|
MyMessage msgTimeMotion(3, V_VAR4);
|
||||||
|
MyMessage msgPeriod(3, V_VAR5);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
pinMode(MOTION, INPUT_PULLUP);
|
pinMode(MOTION, INPUT_PULLUP);
|
||||||
|
mySerial.begin(BAUDRATE); // Uno example: Begin Stream with MHZ19 baudrate
|
||||||
|
myMHZ19.begin(mySerial); // *Important, Pass your Stream reference here
|
||||||
|
myMHZ19.autoCalibration(false);
|
||||||
|
|
||||||
|
/* char myVersion[4];
|
||||||
|
myMHZ19.getVersion(myVersion);
|
||||||
|
Serial.print("\nFirmware Version: ");
|
||||||
|
for(byte i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
Serial.print(myVersion[i]);
|
||||||
|
if(i == 1)
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("");
|
||||||
|
Serial.print("Range: ");
|
||||||
|
Serial.println(myMHZ19.getRange());
|
||||||
|
Serial.print("Background CO2: ");
|
||||||
|
Serial.println(myMHZ19.getBackgroundCO2());
|
||||||
|
Serial.print("Temperature Cal: ");
|
||||||
|
Serial.println(myMHZ19.getTempAdjustment());
|
||||||
|
Serial.print("ABC Status: "); myMHZ19.getABC() ? Serial.println("ON") : Serial.println("OFF");*/
|
||||||
|
periodMin = loadState(0);
|
||||||
|
if(periodMin == 0) periodMin = 1;
|
||||||
|
periodMotion = loadState(1);
|
||||||
|
if(periodMotion == 0) periodMotion = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
static uint32_t cRun = millis();
|
static uint32_t cRun = millis();
|
||||||
|
static uint8_t sec = 0;
|
||||||
|
static uint8_t minuts = 0;
|
||||||
uint16_t LightLev = analogRead(A0);
|
uint16_t LightLev = analogRead(A0);
|
||||||
if((cRun + 999) < millis()){
|
if((cRun + 1000) <= millis()){ //Once per second
|
||||||
cRun = millis();
|
cRun = millis();
|
||||||
|
sec++;
|
||||||
|
if(sec == 59){
|
||||||
|
minuts++;
|
||||||
|
sec = 0;
|
||||||
|
}
|
||||||
|
if(minuts == periodMin){
|
||||||
|
int CO2; // Buffer for CO2
|
||||||
|
CO2 = myMHZ19.getCO2(); // Request CO2 (as ppm)
|
||||||
|
|
||||||
|
if(myMHZ19.errorCode == RESULT_OK) // RESULT_OK is an alis for 1. Either can be used to confirm the response was OK.
|
||||||
|
{
|
||||||
|
Serial.println(CO2);
|
||||||
|
sendDataI(msgCO2, CO2);
|
||||||
|
wait(50);
|
||||||
|
}
|
||||||
sendDataI(msgTimeWork, cRun);
|
sendDataI(msgTimeWork, cRun);
|
||||||
|
minuts = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void presentation()
|
void presentation()
|
||||||
{
|
{
|
||||||
sendSketchInfo("MidRoom", "1.0");
|
sendSketchInfo(F("MidRoom"), F("1.0"));
|
||||||
present(0, S_TEMP, "Temp");
|
present(0, S_TEMP, F("Temp"));
|
||||||
present(1, S_HUM, "Humid");
|
present(1, S_HUM, F("Humid"));
|
||||||
present(2, S_MOTION, "Motion");
|
present(2, S_MOTION, F("Motion"));
|
||||||
present(3, S_CUSTOM, "CO2_Light_Time");
|
present(3, S_CUSTOM, F("CO2_Light_Time"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void receive(const MyMessage &message)
|
||||||
|
{
|
||||||
|
if((message.sensor == 3) && (message.type == V_VAR4)){
|
||||||
|
periodMotion = message.getByte();
|
||||||
|
saveState(1, periodMotion);
|
||||||
|
}
|
||||||
|
if((message.sensor == 3) && (message.type == V_VAR5)){
|
||||||
|
periodMin = message.getByte();
|
||||||
|
saveState(0, periodMin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendDataI(MyMessage msg, uint32_t val)
|
void sendDataI(MyMessage msg, uint32_t val)
|
||||||
@@ -81,7 +153,7 @@ void sendDataF(MyMessage msg, float val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendDataI(MyMessage msg, bool val)
|
void sendDataB(MyMessage msg, bool val)
|
||||||
{
|
{
|
||||||
bool send_data = false;
|
bool send_data = false;
|
||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user