Giter Club home page Giter Club logo

Comments (1)

step3528 avatar step3528 commented on July 17, 2024

Hello

I have defined the remote control frame and modified the 2 files Hitachi

`/*
Hitachi RAR-2P2 remote
*/
#ifndef HitachiHeatpumpIR_h
#define HitachiHeatpumpIR_h

#include "HeatpumpIR.h"

// Hitachi remote timing constants
#define HITACHI_AIRCON1_HDR_MARK 3376
#define HITACHI_AIRCON1_HDR_SPACE 1730
#define HITACHI_AIRCON1_BIT_MARK 378
#define HITACHI_AIRCON1_ONE_SPACE 1315
#define HITACHI_AIRCON1_ZERO_SPACE 450

// Hitachi codes
#define HITACHI_AIRCON1_MODE_AUTO 0x78 // Operating mode
#define HITACHI_AIRCON1_MODE_HEAT 0x69
#define HITACHI_AIRCON1_MODE_COOL 0x3C
#define HITACHI_AIRCON1_MODE_DRY 0x5A
#define HITACHI_AIRCON1_MODE_FAN 0x1E

#define HITACHI_AIRCON1_POWER_OFF 0xC3 // Power OFF
#define HITACHI_AIRCON1_POWER_ON 0xD2

#define HITACHI_AIRCON1_FAN_AUTO 0x5A // Fan speed
#define HITACHI_AIRCON1_FAN1 0x1E
#define HITACHI_AIRCON1_FAN2 0x3C
#define HITACHI_AIRCON1_FAN3 0x4B

#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`


`#include "HitachiHeatpumpIR.h"

HitachiHeatpumpIR::HitachiHeatpumpIR() : HeatpumpIR()
{
static const char model[] PROGMEM = "hitachi";
static const char 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 = 19;
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_1; //Only speed 1 in dry mode
break;
case MODE_FAN:
operatingMode = HITACHI_AIRCON1_MODE_FAN;
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_FAN3;
break;
case FAN_5:
fanSpeed = HITACHI_AIRCON1_FAN3;
break;
}

if ((temperatureCmd > 15 && temperatureCmd < 33))
{
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 temperaturebit1 = 0x40;
uint8_t temperaturebit2 = 0xBF;
uint8_t operatingModeFanbit1;
uint8_t operatingModeFanbit2;
uint8_t powerModebit1;
uint8_t powerModebit2;

uint8_t hitachiTemplate[33] = {
0x01, 0x10, 0x00, 0x40, 0xBF, 0xFF, 0x00, 0xCC, 0x33, 0x92, 0x6D, 0x13, 0xEC, 0x4C, 0xB3, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x01, 0x0E, 0x00, 0x00, 0xFF, 0x00, 0xFF };
// 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 28 29 30 31 32

for (int i = 16 ; i > temperature; i++){
temperaturebit1= temperaturebit1 + 0x04;
temperaturebit2= temperaturebit2 - 0x04;
}

hitachiTemplate[13] = temperaturebit1;
hitachiTemplate[14] = temperaturebit2;

operatingModeFanbit1= (fanSpeed & 0xF0) +((operatingMode & 0xF0)>>4);
operatingModeFanbit2= ((fanSpeed & 0x0F)<<4)+ (operatingMode & 0x0F);

hitachiTemplate[25] = operatingModeFanbit1;
hitachiTemplate[26] = operatingModeFanbit2;

powerModebit1 = (powerMode & 0xF0) + 0x01;
powerModebit2 = ((powerMode & 0x0F)<<4) + 0x0E;

hitachiTemplate[27] = powerModebit1;
hitachiTemplate[28] = powerModebit2;
// hitachiTemplate[14] |= swingV;
// hitachiTemplate[15] |= swingH;

//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<33; 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);
}`

I tested with the simple program, it sends the correct code but it does not work on the console.

I also tested with a remote control led. Do you have any idea about this problem?

from arduino-heatpumpir.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.