#include #include #include #include #include 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(); }