| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // Coolix A/C
- //
- // Copyright 2018 David Conran
- #ifndef IR_COOLIX_H_
- #define IR_COOLIX_H_
- #define __STDC_LIMIT_MACROS
- #include <stdint.h>
- #ifndef UNIT_TEST
- #include <Arduino.h>
- #else
- #include <string>
- #endif
- #include "IRremoteESP8266.h"
- #include "IRsend.h"
- // CCCCC OOOOO OOOOO LL IIIII XX XX
- // CC C OO OO OO OO LL III XX XX
- // CC OO OO OO OO LL III XXXX
- // CC C OO OO OO OO LL III XX XX
- // CCCCC OOOO0 OOOO0 LLLLLLL IIIII XX XX
- // Supports:
- // RG57K7(B)/BGEF remote control for Beko BINR 070/071 split-type aircon.
- // Ref:
- // https://github.com/markszabo/IRremoteESP8266/issues/484
- // Kudos:
- // Hamper: For the breakdown and mapping of the bit values.
- // Constants
- // Modes
- const uint8_t kCoolixCool = 0b00;
- const uint8_t kCoolixDry = 0b01;
- const uint8_t kCoolixAuto = 0b10;
- const uint8_t kCoolixHeat = 0b11;
- const uint8_t kCoolixFan = 4; // Synthetic.
- const uint32_t kCoolixModeMask = 0b000000000000000000001100; // 0xC
- const uint32_t kCoolixZoneFollowMask = 0b000010000000000000000000; // 0x80000
- // Fan Control
- const uint8_t kCoolixFanMin = 0b100;
- const uint8_t kCoolixFanMed = 0b010;
- const uint8_t kCoolixFanMax = 0b001;
- const uint8_t kCoolixFanAuto = 0b101;
- const uint8_t kCoolixFanZoneFollow = 0b110;
- const uint8_t kCoolixFanFixed = 0b111;
- const uint32_t kCoolixFanMask = 0b000000001110000000000000; // 0x00E000
- // Temperature
- const uint8_t kCoolixTempMin = 17; // Celsius
- const uint8_t kCoolixTempMax = 30; // Celsius
- const uint8_t kCoolixTempRange = kCoolixTempMax - kCoolixTempMin + 1;
- const uint8_t kCoolixFanTempCode = 0b1110; // Part of Fan Mode.
- const uint32_t kCoolixTempMask = 0b11110000;
- const uint8_t kCoolixTempMap[kCoolixTempRange] = {
- 0b0000, // 17C
- 0b0001, // 18c
- 0b0011, // 19C
- 0b0010, // 20C
- 0b0110, // 21C
- 0b0111, // 22C
- 0b0101, // 23C
- 0b0100, // 24C
- 0b1100, // 25C
- 0b1101, // 26C
- 0b1001, // 27C
- 0b1000, // 28C
- 0b1010, // 29C
- 0b1011 // 30C
- };
- const uint8_t kCoolixSensorTempMin = 16; // Celsius
- const uint8_t kCoolixSensorTempMax = 30; // Celsius
- const uint8_t kCoolixSensorTempIgnoreCode = 0b1111;
- const uint32_t kCoolixSensorTempMask = 0b000000000000111100000000; // 0xF00
- // Fixed states/messages.
- const uint8_t kCoolixPrefix = 0b1011; // 0xB
- const uint8_t kCoolixUnknown = 0xFF;
- const uint32_t kCoolixOff = 0b101100100111101111100000; // 0xB27BE0
- const uint32_t kCoolixSwing = 0b101100100110101111100000; // 0xB26BE0
- const uint32_t kCoolixSleep = 0b101100101110000000000011; // 0xB2E003
- const uint32_t kCoolixTurbo = 0b101101011111010110100010; // 0xB5F5A2
- const uint32_t kCoolixLed = 0b101101011111010110100101; // 0xB5F5A5
- const uint32_t kCoolixClean = 0b101101011111010110101010; // 0xB5F5AA
- // On, 25C, Mode: Auto, Fan: Auto, Zone Follow: Off, Sensor Temp: Ignore.
- const uint32_t kCoolixDefaultState = 0b101100101011111111001000; // 0xB2BFC8
- // Classes
- class IRCoolixAC {
- public:
- explicit IRCoolixAC(uint16_t pin);
- void stateReset();
- #if SEND_COOLIX
- void send();
- #endif // SEND_COOLIX
- void begin();
- void on();
- void off();
- void setPower(const bool state);
- bool getPower();
- void setTemp(const uint8_t temp);
- uint8_t getTemp();
- void setSensorTemp(const uint8_t desired);
- uint8_t getSensorTemp();
- void clearSensorTemp();
- void setFan(const uint8_t fan);
- uint8_t getFan();
- void setMode(const uint8_t mode);
- uint8_t getMode();
- void setSwing();
- bool getSwing();
- void setSleep();
- bool getSleep();
- void setTurbo();
- bool getTurbo();
- void setLed();
- bool getLed();
- void setClean();
- bool getClean();
- bool getZoneFollow();
- uint32_t getRaw();
- void setRaw(const uint32_t new_code);
- #ifdef ARDUINO
- String toString();
- #else
- std::string toString();
- #endif
- private:
- // The state of the IR remote in IR code form.
- uint32_t remote_state;
- IRsend _irsend;
- void setTempRaw(const uint8_t code);
- uint8_t getTempRaw();
- void setSensorTempRaw(const uint8_t code);
- void setZoneFollow(const bool state);
- };
- #endif // IR_COOLIX_H_
|