ESPMegaPRO-v3-SDK/Template Project/lib/ESPMegaPRO/ClimateCard.hpp

57 lines
1.7 KiB
C++

#pragma once
#include <ExpansionCard.hpp>
#include <IRremote.hpp>
#include <FRAM.h>
#include <vector>
#define CARD_TYPE_CLIMATE 0x03
#define AC_SENSOR_TYPE_NONE 0x00
#define AC_SENSOR_TYPE_DHT22 0x01
#define AC_SENSOR_TYPE_DS18B20 0x02
struct ClimateCardData {
uint8_t ac_temperature;
uint8_t ac_mode;
uint8_t ac_fan_speed;
};
// This requires 3 bytes of FRAM
class ClimateCard : public ExpansionCard {
public:
bool begin(uint16_t *infraredCodes, uint8_t sensor_type, uint8_t sensor_pin);
bool begin(uint16_t *infraredCodes);
void loop();
void bindFRAM(FRAM *fram, uint16_t fram_address);
void setFRAMAutoSave(bool autoSave);
void saveStateToFRAM();
void loadStateFromFRAM();
void setTemperature(uint8_t temperature);
void setMode(uint8_t mode);
void setFanSpeed(uint8_t fan_speed);
void registerCallback(std::function<void(uint8_t, uint8_t, uint8_t)> callback);
uint8_t getType();
private:
// Callbacks
std::vector<std::function<void(uint8_t, uint8_t, uint8_t)>> callbacks;
// Update functions
void updateSensor();
void updateAirConditioner();
void updateAirConditioner(uint8_t mode, uint8_t fan_speed, uint8_t temperature);
// IR variables
IRsend irsender;
uint16_t *infraredCodes;
// Air conditioner variables
int ac_temperature;
int ac_mode;
int ac_fan_speed;
// Sensor variables
uint8_t sensor_type;
uint8_t sensor_pin;
float humidity;
float room_temperature;
// FRAM variables
FRAM *fram;
uint8_t fram_address;
};