Hyundai support
This commit is contained in:
parent
76f1a428a0
commit
01c09badc2
|
@ -0,0 +1,118 @@
|
||||||
|
#include <HyundaiHeatpumpIR.h>
|
||||||
|
|
||||||
|
HyundaiHeatpumpIR::HyundaiHeatpumpIR() : HeatpumpIR()
|
||||||
|
{
|
||||||
|
static const char PROGMEM model[] PROGMEM = "hyundai";
|
||||||
|
static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"hyundai\",\"dn\":\"Hyundai\",\"mT\":16,\"xT\":30,\"fs\":3}";
|
||||||
|
|
||||||
|
_model = model;
|
||||||
|
_info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HyundaiHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd)
|
||||||
|
{
|
||||||
|
// Sensible defaults for the heat pump mode
|
||||||
|
uint8_t powerMode = HYUNDAI_AIRCON1_MODE_ON;
|
||||||
|
uint8_t operatingMode = HYUNDAI_AIRCON1_MODE_HEAT;
|
||||||
|
uint8_t fanSpeed = HYUNDAI_AIRCON1_FAN_AUTO;
|
||||||
|
uint8_t temperature = 23;
|
||||||
|
uint8_t swingV = HYUNDAI_AIRCON1_VS_AUTO;
|
||||||
|
uint8_t swingH = 0;
|
||||||
|
|
||||||
|
(void)swingHCmd;
|
||||||
|
|
||||||
|
if (powerModeCmd == 0)
|
||||||
|
{
|
||||||
|
powerMode = HYUNDAI_AIRCON1_MODE_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (operatingModeCmd)
|
||||||
|
{
|
||||||
|
case MODE_AUTO:
|
||||||
|
operatingMode = HYUNDAI_AIRCON1_MODE_AUTO;
|
||||||
|
break;
|
||||||
|
case MODE_HEAT:
|
||||||
|
operatingMode = HYUNDAI_AIRCON1_MODE_HEAT;
|
||||||
|
break;
|
||||||
|
case MODE_COOL:
|
||||||
|
operatingMode = HYUNDAI_AIRCON1_MODE_COOL;
|
||||||
|
break;
|
||||||
|
case MODE_DRY:
|
||||||
|
operatingMode = HYUNDAI_AIRCON1_MODE_DRY;
|
||||||
|
break;
|
||||||
|
case MODE_FAN:
|
||||||
|
operatingMode = HYUNDAI_AIRCON1_MODE_FAN;
|
||||||
|
temperatureCmd = 24;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (fanSpeedCmd)
|
||||||
|
{
|
||||||
|
case FAN_AUTO:
|
||||||
|
fanSpeed = HYUNDAI_AIRCON1_FAN_AUTO;
|
||||||
|
break;
|
||||||
|
case FAN_1:
|
||||||
|
fanSpeed = HYUNDAI_AIRCON1_FAN1;
|
||||||
|
break;
|
||||||
|
case FAN_2:
|
||||||
|
fanSpeed = HYUNDAI_AIRCON1_FAN2;
|
||||||
|
break;
|
||||||
|
case FAN_3:
|
||||||
|
fanSpeed = HYUNDAI_AIRCON1_FAN3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( temperatureCmd > 15 && temperatureCmd < 31)
|
||||||
|
{
|
||||||
|
temperature = temperatureCmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (swingVCmd)
|
||||||
|
{
|
||||||
|
case VDIR_SWING:
|
||||||
|
swingV = HYUNDAI_AIRCON1_VS_SWING;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendHyundai(IR, powerMode, operatingMode, fanSpeed, temperature, swingV, swingH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HyundaiHeatpumpIR::sendHyundai(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH)
|
||||||
|
{
|
||||||
|
uint8_t HyundaiTemplate[] = { 0x00, 0x00, 0x00, 0x50 };
|
||||||
|
// 0 1 2 3
|
||||||
|
|
||||||
|
(void)swingH;
|
||||||
|
|
||||||
|
// Almost everything goes in the first byte...
|
||||||
|
HyundaiTemplate[0] = swingV | fanSpeed | powerMode | operatingMode;
|
||||||
|
|
||||||
|
// Temperature
|
||||||
|
HyundaiTemplate[1] = temperature - 16;
|
||||||
|
|
||||||
|
// 38 kHz PWM frequency
|
||||||
|
IR.setFrequency(38);
|
||||||
|
|
||||||
|
// Header
|
||||||
|
IR.mark(HYUNDAI_AIRCON1_HDR_MARK);
|
||||||
|
IR.space(HYUNDAI_AIRCON1_HDR_SPACE);
|
||||||
|
|
||||||
|
// Data
|
||||||
|
for (unsigned int i=0; i<sizeof(HyundaiTemplate); i++) {
|
||||||
|
IR.sendIRbyte(HyundaiTemplate[i], HYUNDAI_AIRCON1_BIT_MARK, HYUNDAI_AIRCON1_ZERO_SPACE, HYUNDAI_AIRCON1_ONE_SPACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hyundai protocol has 35 bits, i.e. 4 bytes + 3 bits
|
||||||
|
// The last bits are always '010'
|
||||||
|
IR.mark(HYUNDAI_AIRCON1_BIT_MARK);
|
||||||
|
IR.space(HYUNDAI_AIRCON1_ZERO_SPACE);
|
||||||
|
IR.mark(HYUNDAI_AIRCON1_BIT_MARK);
|
||||||
|
IR.space(HYUNDAI_AIRCON1_ONE_SPACE);
|
||||||
|
IR.mark(HYUNDAI_AIRCON1_BIT_MARK);
|
||||||
|
IR.space(HYUNDAI_AIRCON1_ZERO_SPACE);
|
||||||
|
|
||||||
|
// End mark
|
||||||
|
IR.mark(HYUNDAI_AIRCON1_BIT_MARK);
|
||||||
|
IR.space(0);
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
Hyundai heatpump control (remote control P/N Y512F2)
|
||||||
|
*/
|
||||||
|
#ifndef HyundaiHeatpumpIR_h
|
||||||
|
#define HyundaiHeatpumpIR_h
|
||||||
|
|
||||||
|
#include <HeatpumpIR.h>
|
||||||
|
|
||||||
|
|
||||||
|
// Hyundai timing constants
|
||||||
|
#define HYUNDAI_AIRCON1_HDR_MARK 8840 // 8700
|
||||||
|
#define HYUNDAI_AIRCON1_HDR_SPACE 4440 // 4200
|
||||||
|
#define HYUNDAI_AIRCON1_BIT_MARK 640 // 580
|
||||||
|
#define HYUNDAI_AIRCON1_ONE_SPACE 1670 // 1530
|
||||||
|
#define HYUNDAI_AIRCON1_ZERO_SPACE 570 // 460
|
||||||
|
|
||||||
|
// Hyundai codes
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_AUTO 0x00 // Operating mode
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_HEAT 0x04
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_COOL 0x01
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_DRY 0x02
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_FAN 0x03
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_OFF 0x00 // Power OFF
|
||||||
|
#define HYUNDAI_AIRCON1_MODE_ON 0x08 // Power ON
|
||||||
|
#define HYUNDAI_AIRCON1_FAN_AUTO 0x00 // Fan speed
|
||||||
|
#define HYUNDAI_AIRCON1_FAN1 0x10
|
||||||
|
#define HYUNDAI_AIRCON1_FAN2 0x20
|
||||||
|
#define HYUNDAI_AIRCON1_FAN3 0x30
|
||||||
|
|
||||||
|
#define HYUNDAI_AIRCON1_VS_SWING 0x40 // Vertical swing
|
||||||
|
#define HYUNDAI_AIRCON1_VS_AUTO 0x00 // Automatic setting
|
||||||
|
|
||||||
|
|
||||||
|
class HyundaiHeatpumpIR : public HeatpumpIR
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HyundaiHeatpumpIR();
|
||||||
|
void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void sendHyundai(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingVCmd, uint8_t swingHCmd);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -16,6 +16,8 @@ Currently supports at least these models
|
||||||
* Daikin RXS25G2V1B / FVXS25FV1B (Remote control P/N ARC452A1)
|
* Daikin RXS25G2V1B / FVXS25FV1B (Remote control P/N ARC452A1)
|
||||||
* Mitsubishi Heavy SRKxxZJ-S (Remote control P/N RKX502A001C)
|
* Mitsubishi Heavy SRKxxZJ-S (Remote control P/N RKX502A001C)
|
||||||
* Mitsubishi Heavy SRKxxZM-S (Remote Control P/N RLA502A700B)
|
* Mitsubishi Heavy SRKxxZM-S (Remote Control P/N RLA502A700B)
|
||||||
|
* Hyundai (Remote Control P/N Y512F2)
|
||||||
|
* This is probably a generic Gree model
|
||||||
|
|
||||||
## Instructions
|
## Instructions
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <SharpHeatpumpIR.h>
|
#include <SharpHeatpumpIR.h>
|
||||||
#include <DaikinHeatpumpIR.h>
|
#include <DaikinHeatpumpIR.h>
|
||||||
#include <MitsubishiHeavyHeatpumpIR.h>
|
#include <MitsubishiHeavyHeatpumpIR.h>
|
||||||
|
#include <HyundaiHeatpumpIR.h>
|
||||||
|
|
||||||
|
|
||||||
IRSenderPWM irSender(3); // IR led on Duemilanove digital pin 3, using Arduino PWM
|
IRSenderPWM irSender(3); // IR led on Duemilanove digital pin 3, using Arduino PWM
|
||||||
|
@ -23,7 +24,8 @@ HeatpumpIR *heatpumpIR[] = {new PanasonicCKPHeatpumpIR(), new PanasonicDKEHeatpu
|
||||||
new FujitsuHeatpumpIR(),
|
new FujitsuHeatpumpIR(),
|
||||||
new MitsubishiFDHeatpumpIR(), new MitsubishiFEHeatpumpIR(), new MitsubishiMSYHeatpumpIR(),
|
new MitsubishiFDHeatpumpIR(), new MitsubishiFEHeatpumpIR(), new MitsubishiMSYHeatpumpIR(),
|
||||||
new SamsungHeatpumpIR(), new SharpHeatpumpIR(), new DaikinHeatpumpIR(),
|
new SamsungHeatpumpIR(), new SharpHeatpumpIR(), new DaikinHeatpumpIR(),
|
||||||
new MitsubishiHeavyZJHeatpumpIR(), new MitsubishiHeavyZMHeatpumpIR(), NULL};
|
new MitsubishiHeavyZJHeatpumpIR(), new MitsubishiHeavyZMHeatpumpIR(),
|
||||||
|
new HyundaiHeatpumpIR(), NULL};
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,6 +17,7 @@ DaikinHeatpumpIR KEYWORD1
|
||||||
MitsubishiHeavyHeatpumpIR KEYWORD1
|
MitsubishiHeavyHeatpumpIR KEYWORD1
|
||||||
MitsubishiHeavyZJHeatpumpIR KEYWORD1
|
MitsubishiHeavyZJHeatpumpIR KEYWORD1
|
||||||
MitsubishiHeavyZMHeatpumpIR KEYWORD1
|
MitsubishiHeavyZMHeatpumpIR KEYWORD1
|
||||||
|
HyundaiHeatpumpIR KEYWORD1
|
||||||
|
|
||||||
|
|
||||||
IRSender KEYWORD1
|
IRSender KEYWORD1
|
||||||
|
|
Loading…
Reference in New Issue