#pragma once #include #include #include #include #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 callback); uint8_t getType(); private: // Callbacks std::vector> 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; };