66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
#ifndef PMS_H
|
|
#define PMS_H
|
|
|
|
/* From https://github.com/SwapBap/PMS */
|
|
|
|
#include "Stream.h"
|
|
|
|
class PMS
|
|
{
|
|
public:
|
|
static const uint16_t SINGLE_RESPONSE_TIME = 1000;
|
|
static const uint16_t TOTAL_RESPONSE_TIME = 1000 * 10;
|
|
static const uint16_t STEADY_RESPONSE_TIME = 1000 * 30;
|
|
|
|
static const uint16_t BAUD_RATE = 9600;
|
|
|
|
struct DATA {
|
|
// Standard Particles, CF=1
|
|
uint16_t PM_SP_UG_1_0;
|
|
uint16_t PM_SP_UG_2_5;
|
|
uint16_t PM_SP_UG_10_0;
|
|
|
|
// Atmospheric environment
|
|
uint16_t PM_AE_UG_1_0;
|
|
uint16_t PM_AE_UG_2_5;
|
|
uint16_t PM_AE_UG_10_0;
|
|
|
|
// Total particles
|
|
uint16_t PM_TOTALPARTICLES_0_3;
|
|
uint16_t PM_TOTALPARTICLES_0_5;
|
|
uint16_t PM_TOTALPARTICLES_1_0;
|
|
uint16_t PM_TOTALPARTICLES_2_5;
|
|
uint16_t PM_TOTALPARTICLES_5_0;
|
|
uint16_t PM_TOTALPARTICLES_10_0;
|
|
};
|
|
|
|
PMS(Stream&);
|
|
void sleep();
|
|
void wakeUp();
|
|
void activeMode();
|
|
void passiveMode();
|
|
|
|
void requestRead();
|
|
bool read(DATA& data);
|
|
bool readUntil(DATA& data, uint16_t timeout = SINGLE_RESPONSE_TIME);
|
|
|
|
private:
|
|
enum STATUS { STATUS_WAITING, STATUS_OK };
|
|
enum MODE { MODE_ACTIVE, MODE_PASSIVE };
|
|
|
|
uint8_t _payload[24];
|
|
Stream* _stream;
|
|
DATA* _data;
|
|
STATUS _status;
|
|
MODE _mode = MODE_ACTIVE;
|
|
|
|
uint8_t _index = 0;
|
|
uint16_t _frameLen;
|
|
uint16_t _checksum;
|
|
uint16_t _calculatedChecksum;
|
|
|
|
void loop();
|
|
};
|
|
|
|
#endif
|