73 lines
1.7 KiB
C++
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();
|
|
} |