From 81bb077dca76f580270dd55d279d4bf356aa7508 Mon Sep 17 00:00:00 2001 From: ToniA Date: Mon, 17 Apr 2017 11:13:18 +0300 Subject: [PATCH] Heating, maintenance and turbo modes for Carrier #2 (Qlima) --- CarrierHeatpumpIR.cpp | 32 +++++++++++++++++++++++++++++--- CarrierHeatpumpIR.h | 5 ++++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/CarrierHeatpumpIR.cpp b/CarrierHeatpumpIR.cpp index 6e37071..6d235c3 100644 --- a/CarrierHeatpumpIR.cpp +++ b/CarrierHeatpumpIR.cpp @@ -22,7 +22,7 @@ CarrierNQVHeatpumpIR::CarrierNQVHeatpumpIR() : CarrierHeatpumpIR() CarrierMCAHeatpumpIR::CarrierMCAHeatpumpIR() : CarrierHeatpumpIR() { static const char PROGMEM model[] PROGMEM = "carrier_mca"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"carrier_mca\",\"dn\":\"Carrier MCA\",\"mT\":17,\"xT\":30,\"fs\":4}"; + static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"carrier_mca\",\"dn\":\"Carrier MCA\",\"mT\":17,\"xT\":30,\"fs\":4, \"maint\":[10]}"; _model = model; _info = info; @@ -189,6 +189,12 @@ void CarrierNQVHeatpumpIR::sendCarrier(IRSender& IR, uint8_t operatingMode, uint } void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) +{ + send(IR, powerModeCmd, operatingModeCmd, fanSpeedCmd, temperatureCmd, swingVCmd, swingHCmd, false); +} + + +void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd, bool turboMode) { (void)swingVCmd; (void)swingHCmd; @@ -199,6 +205,7 @@ void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t oper uint8_t operatingMode = CARRIER_AIRCON2_MODE_COOL; uint8_t fanSpeed = CARRIER_AIRCON2_FAN_AUTO; uint8_t temperature = 23; + bool maintenanceMode = false; if (powerModeCmd == POWER_OFF) { @@ -218,6 +225,9 @@ void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t oper case MODE_COOL: operatingMode = CARRIER_AIRCON2_MODE_COOL; break; + case MODE_HEAT: + operatingMode = CARRIER_AIRCON2_MODE_HEAT; + break; case MODE_DRY: operatingMode = CARRIER_AIRCON2_MODE_DRY; fanSpeed = CARRIER_AIRCON2_FAN_DRY_AUTO; // Fan speed is always 'AUTO' in DRY mode @@ -226,6 +236,9 @@ void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t oper operatingMode = CARRIER_AIRCON2_MODE_FAN; temperature = 31; // Temperature is always 31 in FAN mode break; + case MODE_MAINT: + maintenanceMode = true; + break; } if (operatingModeCmd != MODE_AUTO @@ -255,12 +268,15 @@ void CarrierMCAHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t oper } } - sendCarrier(IR, powerMode, operatingMode, fanSpeed, temperature); + sendCarrier(IR, powerMode, operatingMode, fanSpeed, temperature, maintenanceMode, turboMode); } -void CarrierMCAHeatpumpIR::sendCarrier(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature) +void CarrierMCAHeatpumpIR::sendCarrier(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, bool maintenanceMode, bool turboMode) { uint8_t sendBuffer[] = { 0x4D, 0xB2, 0xD8, 0x00, 0x00, 0x00 }; + static const uint8_t sendBufferMaintenance[] PROGMEM = { 0xAD, 0x52, 0xAF, 0x50, 0x55, 0xAA }; + static const uint8_t sendBufferTurbo[] PROGMEM = { 0xAD, 0x52, 0xAF, 0x50, 0x45, 0xBA }; + static const uint8_t temperatures[] PROGMEM = { 0, 8, 12, 4, 6, 14, 10, 2, 3, 11, 9, 1, 5, 13, 7 }; sendBuffer[2] |= powerMode | fanSpeed; @@ -272,6 +288,16 @@ void CarrierMCAHeatpumpIR::sendCarrier(IRSender& IR, uint8_t powerMode, uint8_t sendBuffer[3] = ~sendBuffer[2]; sendBuffer[5] = ~sendBuffer[4]; + // Maintenance or turbo mode overide + if (maintenanceMode) + { + memcpy_P(sendBuffer, sendBufferMaintenance, sizeof(sendBufferMaintenance)); + } + if (turboMode) + { + memcpy_P(sendBuffer, sendBufferTurbo, sizeof(sendBufferTurbo)); + } + // 38 kHz PWM frequency IR.setFrequency(38); diff --git a/CarrierHeatpumpIR.h b/CarrierHeatpumpIR.h index 868825e..281a702 100644 --- a/CarrierHeatpumpIR.h +++ b/CarrierHeatpumpIR.h @@ -1,6 +1,7 @@ /* Carrier 42NQV035G / 38NYV035H2 heatpump control (remote control P/N WH-L05SE) Carrier 42MCA009515LS A/C control (remote control P/N R11CG/E) + * Qlima (remote control P/N ABS10FP) */ #ifndef CarrierHeatpumpIR_h #define CarrierHeatpumpIR_h @@ -41,6 +42,7 @@ #define CARRIER_AIRCON2_MODE_COOL 0x00 #define CARRIER_AIRCON2_MODE_DRY 0x20 #define CARRIER_AIRCON2_MODE_FAN 0x20 +#define CARRIER_AIRCON2_MODE_HEAT 0x30 #define CARRIER_AIRCON2_MODE_OFF 0x00 // Power OFF #define CARRIER_AIRCON2_MODE_ON 0x20 // Power ON #define CARRIER_AIRCON2_FAN_DRY_AUTO 0x00 // Fan speed, AUTO or DRY modes @@ -80,9 +82,10 @@ class CarrierMCAHeatpumpIR : public CarrierHeatpumpIR public: void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); + void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd, bool turboMode); private: - void sendCarrier(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature); + void sendCarrier(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, bool maintenanceMode, bool turboMode); }; #endif