modbus485_dust_co2_node/test/main2.cpp

73 lines
1.7 KiB
C++

#include <Arduino.h>
#include <SoftwareSerial.h>
#include <SimpleModbusSlave.h>
#include <TaskScheduler.h>
#include <PMS.h>
SoftwareSerial pms7003(11, 12); // RX, TX
SoftwareSerial mhz19(9, 10); // RX, TX
PMS pms(pms7003);
PMS::DATA data;
Scheduler runner;
void sensor_pms();
Task t1(5000, TASK_FOREVER, &sensor_pms);
//////////////// MODBUS Registers ///////////////////
enum
{
R00_Dust_10,
R01_Dust_25,
R02_Dust_100,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
int PM10;
int PM25;
int PM100;
//////////////////////////////////////////////////////
void setup() {
//Serial.begin(57600);
//Serial.print("Starting up...");
mhz19.begin(9600);
pms7003.begin(9600);
pinMode(8, OUTPUT); //MAX485 Tranmit Enable
modbus_configure(9600, 6, 8, TOTAL_REGS_SIZE, 0); //Modbus via MAX485
runner.init();
//runner.addTask(t1);
//t1.enable();
}
void loop() {
runner.execute();
holdingRegs[R00_Dust_10] = PM10;
holdingRegs[R01_Dust_25] = PM25;
holdingRegs[R02_Dust_100] = PM100;
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
if (pms.read(data)) {
/*Serial.print("PM 1.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_10_0);
Serial.println();
*/
PM10 = (int)data.PM_AE_UG_1_0;
PM25 = (int)data.PM_AE_UG_2_5;
PM100 = (int)data.PM_AE_UG_10_0;
}
}
void sensor_pms() {
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(PM10);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(PM25);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(PM100);
Serial.println();
}