Heating, maintenance and turbo modes for Carrier #2 (Qlima)

This commit is contained in:
ToniA 2017-04-17 11:13:18 +03:00
parent 4df8f1ea16
commit 81bb077dca
2 changed files with 33 additions and 4 deletions

View File

@ -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);

View File

@ -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