125 lines
3.1 KiB
C++
125 lines
3.1 KiB
C++
/* Copyright 2017 Schmolders
|
|
// Adds support for Argo Ulisse 13 DCI Mobile Split ACs.
|
|
*/
|
|
#ifndef IR_ARGO_H_
|
|
#define IR_ARGO_H_
|
|
|
|
#include "IRremoteESP8266.h"
|
|
#include "IRsend.h"
|
|
|
|
// ARGO Ulisse DCI
|
|
|
|
/*
|
|
Protocol Description:
|
|
All in LSB first as it is sent. argo message array will be stored MSB first!
|
|
do LSB-MSB conversion in sendData
|
|
Byte 0: const 0 0 1 1 0 1 0 1
|
|
Byte 1: const 1 0 1 0 1 1 1 1
|
|
Byte 2: 0 0 0, 3bit Cool/Heat Mode, 2bit start SetTemp LSB first
|
|
Byte 3: 3bit End SetTemp, 2bit Fan Mode, 3bit RoomTemp LSB first
|
|
Byte 4: 2bit RoomTemp, 3bit Flap Mode, 3bit OnTimer
|
|
Byte 5: 8bit OnTimer
|
|
Byte 6: 8Bit OffTimer
|
|
Byte 7: 3bit OffTimer, 5bit Time
|
|
Byte 8: 6bit Time, 1bit Timer On/Off, 1bit Timer Program
|
|
Byte 9: 1bit Timer Program, 1bit Timer 1h, 1 bit Night Mode, 1bit Max Mode, 1bit Filter, 1bit on/off, 1bit const 0, 1bit iFeel
|
|
Byte 10: 2bit const 0 1, 6bit Checksum
|
|
Byte 11: 2bit Checksum
|
|
*/
|
|
|
|
// Constants. Store MSB left.
|
|
|
|
#define ARGO_COOL_ON 0U // 0b000
|
|
#define ARGO_COOL_OFF 3U // 0b110
|
|
#define ARGO_COOL_AUTO 2U // 0b010
|
|
#define ARGO_COOl_HUM 1U // 0b100
|
|
|
|
#define ARGO_HEAT_ON 0U // 0b001
|
|
#define ARGO_HEAT_AUTO 1U // 0b101
|
|
#define ARGO_HEAT_BLINK 2U // 0b011 // ??no idea what mode that is
|
|
|
|
|
|
#define ARGO_MIN_TEMP 10U // Celsius offset +4
|
|
#define ARGO_MAX_TEMP 32U // Celsius
|
|
|
|
#define ARGO_FAN_AUTO 0U // 0b00
|
|
#define ARGO_FAN_3 3U // 0b11
|
|
#define ARGO_FAN_2 2U // 0b01
|
|
#define ARGO_FAN_1 1U // 0b10
|
|
|
|
#define ARGO_FLAP_AUTO 0U // 0b000
|
|
#define ARGO_FLAP_1 1U // 0b100
|
|
#define ARGO_FLAP_2 2U // 0b010
|
|
#define ARGO_FLAP_3 3U // 0b110
|
|
#define ARGO_FLAP_4 4U // 0b001
|
|
#define ARGO_FLAP_5 5U // 0b101
|
|
#define ARGO_FLAP_6 6U // 0b011
|
|
#define ARGO_FLAP_FULL 7U // 0b111
|
|
|
|
|
|
class IRArgoAC {
|
|
public:
|
|
explicit IRArgoAC(uint16_t pin);
|
|
|
|
#if SEND_ARGO
|
|
void send();
|
|
#endif // SEND_ARGO
|
|
void begin();
|
|
void on();
|
|
void off();
|
|
|
|
void setPower(bool state);
|
|
uint8_t getPower();
|
|
|
|
void setTemp(uint8_t temp);
|
|
uint8_t getTemp();
|
|
|
|
void setFan(uint8_t fan);
|
|
uint8_t getFan();
|
|
|
|
void setFlap(uint8_t flap);
|
|
uint8_t getFlap();
|
|
|
|
void setCoolMode(uint8_t mode);
|
|
uint8_t getCoolMode();
|
|
|
|
void setHeatMode(uint8_t mode);
|
|
uint8_t getHeatMode();
|
|
uint8_t getMode();
|
|
|
|
void setMax(bool state);
|
|
bool getMax();
|
|
|
|
void setNight(bool state);
|
|
bool getNight();
|
|
|
|
void setiFeel(bool state);
|
|
bool getiFeel();
|
|
|
|
void setTime();
|
|
void setRoomTemp(uint8_t temp);
|
|
|
|
uint8_t* getRaw();
|
|
|
|
private:
|
|
// # of bytes per command
|
|
uint8_t argo[ARGO_COMMAND_LENGTH]; // Defined in IRremoteESP8266.h
|
|
void stateReset();
|
|
void checksum();
|
|
IRsend _irsend; // instance of the IR send class
|
|
|
|
// Attributes
|
|
uint8_t set_temp;
|
|
uint8_t fan_mode;
|
|
uint8_t flap_mode;
|
|
uint8_t ac_state;
|
|
uint8_t ac_mode; // heat 1, cool 0
|
|
uint8_t heat_mode;
|
|
uint8_t cool_mode;
|
|
uint8_t night_mode; // on/off
|
|
uint8_t max_mode; // on/off
|
|
uint8_t ifeel_mode; // on/off
|
|
};
|
|
|
|
#endif // IR_ARGO_H_
|