Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
197 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
#include <HitachiHeatpumpIR.h> | ||
|
||
HitachiHeatpumpIR::HitachiHeatpumpIR() : HeatpumpIR() | ||
{ | ||
static const char PROGMEM model[] PROGMEM = "hitachi"; | ||
static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"hitachi\",\"dn\":\"Hitachi\",\"mT\":16,\"xT\":32,\"fs\":4}"; | ||
|
||
_model = model; | ||
_info = info; | ||
} | ||
|
||
void HitachiHeatpumpIR::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 operatingMode = HITACHI_AIRCON1_MODE_HEAT; | ||
uint8_t fanSpeed = HITACHI_AIRCON1_FAN_AUTO; | ||
uint8_t temperature = 23; | ||
uint8_t powerMode; | ||
uint8_t swingV = HITACHI_AIRCON1_VDIR_AUTO; | ||
uint8_t swingH = HITACHI_AIRCON1_HDIR_AUTO; | ||
|
||
if (powerModeCmd == POWER_OFF) | ||
{ | ||
powerMode = HITACHI_AIRCON1_POWER_OFF; | ||
} | ||
else | ||
{ | ||
powerMode = HITACHI_AIRCON1_POWER_ON; | ||
} | ||
|
||
switch (operatingModeCmd) | ||
{ | ||
case MODE_AUTO: | ||
operatingMode = HITACHI_AIRCON1_MODE_AUTO; | ||
break; | ||
case MODE_HEAT: | ||
operatingMode = HITACHI_AIRCON1_MODE_HEAT; | ||
break; | ||
case MODE_COOL: | ||
operatingMode = HITACHI_AIRCON1_MODE_COOL; | ||
break; | ||
case MODE_DRY: | ||
operatingMode = HITACHI_AIRCON1_MODE_DRY; | ||
fanSpeedCmd = FAN_2; //Only speed 1 & 2 in dry mode | ||
break; | ||
case MODE_FAN: | ||
operatingMode = HITACHI_AIRCON1_MODE_FAN; | ||
temperatureCmd = 64; //Temperature = 64 in fan mode | ||
if (fanSpeedCmd == FAN_AUTO) | ||
{ | ||
fanSpeedCmd = FAN_2; //No auto fan in fan mode | ||
} | ||
break; | ||
} | ||
|
||
switch (fanSpeedCmd) | ||
{ | ||
case FAN_AUTO: | ||
fanSpeed = HITACHI_AIRCON1_FAN_AUTO; | ||
break; | ||
case FAN_1: | ||
fanSpeed = HITACHI_AIRCON1_FAN1; | ||
break; | ||
case FAN_2: | ||
fanSpeed = HITACHI_AIRCON1_FAN2; | ||
break; | ||
case FAN_3: | ||
fanSpeed = HITACHI_AIRCON1_FAN3; | ||
break; | ||
case FAN_4: | ||
fanSpeed = HITACHI_AIRCON1_FAN4; | ||
break; | ||
case FAN_5: | ||
fanSpeed = HITACHI_AIRCON1_FAN4; | ||
break; | ||
} | ||
|
||
if ((temperatureCmd > 15 && temperatureCmd < 33) || temperatureCmd == 64) | ||
{ | ||
temperature = temperatureCmd; | ||
} | ||
|
||
switch (swingV) | ||
{ | ||
case HDIR_AUTO: | ||
swingV = HITACHI_AIRCON1_VDIR_AUTO; | ||
break; | ||
case HDIR_SWING: | ||
swingV = HITACHI_AIRCON1_VDIR_SWING; | ||
break; | ||
} | ||
|
||
switch (swingH) | ||
{ | ||
case HDIR_AUTO: | ||
swingH = HITACHI_AIRCON1_HDIR_AUTO; | ||
break; | ||
case HDIR_SWING: | ||
swingH = HITACHI_AIRCON1_HDIR_SWING; | ||
break; | ||
} | ||
|
||
sendHitachi(IR, powerMode, operatingMode, fanSpeed, temperature, swingV, swingH); | ||
} | ||
|
||
// Send the Hitachi code | ||
void HitachiHeatpumpIR::sendHitachi(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH) | ||
{ | ||
|
||
uint8_t hitachiTemplate[28] = { | ||
0x01, 0x10, 0x30, 0x40, 0xBF, 0x01, 0xFE, 0x11, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00 }; | ||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ||
|
||
if(temperature == 16){ | ||
hitachiTemplate[9] = 0x09; | ||
} | ||
hitachiTemplate[10] = operatingMode; | ||
hitachiTemplate[11] = temperature; | ||
hitachiTemplate[11] = (hitachiTemplate[11] << 1); | ||
hitachiTemplate[13] = fanSpeed; | ||
hitachiTemplate[14] |= swingV; | ||
hitachiTemplate[15] |= swingH; | ||
hitachiTemplate[17] = powerMode; | ||
//hitachiTemplate[25] = ecoMode; | ||
|
||
//Checksum calculation | ||
int checksum = 1086; | ||
for (byte i = 0; i < 27; i++) { | ||
checksum -= hitachiTemplate[i]; | ||
} | ||
hitachiTemplate[27] = checksum; | ||
|
||
// 38 kHz PWM frequency | ||
IR.setFrequency(38); | ||
|
||
// Header | ||
IR.mark(HITACHI_AIRCON1_HDR_MARK); | ||
IR.space(HITACHI_AIRCON1_HDR_SPACE); | ||
|
||
// Data | ||
for (int i=0; i<28; i++) { | ||
IR.sendIRbyte(hitachiTemplate[i], HITACHI_AIRCON1_BIT_MARK, HITACHI_AIRCON1_ZERO_SPACE, HITACHI_AIRCON1_ONE_SPACE); | ||
} | ||
IR.mark(HITACHI_AIRCON1_BIT_MARK); | ||
IR.space(0); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
Hitachi RAR-5E1 remote | ||
*/ | ||
#ifndef HitachiHeatpumpIR_h | ||
#define HitachiHeatpumpIR_h | ||
|
||
#include <HeatpumpIR.h> | ||
|
||
// Hitachi remote timing constants | ||
#define HITACHI_AIRCON1_HDR_MARK 3436 | ||
#define HITACHI_AIRCON1_HDR_SPACE 1640 | ||
#define HITACHI_AIRCON1_BIT_MARK 420 | ||
#define HITACHI_AIRCON1_ONE_SPACE 1250 | ||
#define HITACHI_AIRCON1_ZERO_SPACE 500 | ||
|
||
// Hitachi codes | ||
#define HITACHI_AIRCON1_MODE_AUTO 0x02 // Operating mode | ||
#define HITACHI_AIRCON1_MODE_HEAT 0x03 | ||
#define HITACHI_AIRCON1_MODE_COOL 0x04 | ||
#define HITACHI_AIRCON1_MODE_DRY 0x05 | ||
#define HITACHI_AIRCON1_MODE_FAN 0x0C | ||
|
||
#define HITACHI_AIRCON1_POWER_OFF 0x00 // Power OFF | ||
#define HITACHI_AIRCON1_POWER_ON 0x80 | ||
|
||
#define HITACHI_AIRCON1_FAN_AUTO 0x01 // Fan speed | ||
#define HITACHI_AIRCON1_FAN1 0x02 | ||
#define HITACHI_AIRCON1_FAN2 0x03 | ||
#define HITACHI_AIRCON1_FAN3 0x04 | ||
#define HITACHI_AIRCON1_FAN4 0x05 | ||
|
||
#define HITACHI_AIRCON1_VDIR_AUTO 0x00 | ||
#define HITACHI_AIRCON1_VDIR_SWING 0x01 | ||
|
||
#define HITACHI_AIRCON1_HDIR_AUTO 0x00 | ||
#define HITACHI_AIRCON1_HDIR_SWING 0x01 | ||
|
||
class HitachiHeatpumpIR : public HeatpumpIR | ||
{ | ||
public: | ||
HitachiHeatpumpIR(); | ||
void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVcmd, uint8_t swingHcmd); | ||
|
||
private: | ||
void sendHitachi(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH); | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters