Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "IRremote.h"
- #define GREE_HDR_MARK 9000
- #define GREE_HDR_SPACE 4500
- #define GREE_BIT_MARK 650
- #define GREE_ONE_SPACE 1600
- #define GREE_ZERO_SPACE 550
- // Working modes
- #define GREE_MODE_AUTO 0b000 // Automatic
- #define GREE_MODE_COOL 0b100 // Cooling
- #define GREE_MODE_HIDRO 0b010 // Hidration
- #define GREE_MODE_AIR 0b110 // Ventilation
- #define GREE_MODE_HEAT 0b001 // Heating
- // Fun modes (speed)
- #define GREE_FUN_AUTO 0b00
- #define GREE_FUN_LOW 0b10
- #define GREE_FUN_MEDIUM 0b01
- #define GREE_FUN_HIGH 0b11
- // Temperature
- #define GREE_TEMP_16C 0b0000
- #define GREE_TEMP_17C 0b1000
- #define GREE_TEMP_18C 0b0100
- #define GREE_TEMP_19C 0b1100
- #define GREE_TEMP_20C 0b0010
- #define GREE_TEMP_21C 0b1010
- #define GREE_TEMP_22C 0b0110
- #define GREE_TEMP_23C 0b1110
- #define GREE_TEMP_24C 0b0001
- #define GREE_TEMP_25C 0b1001
- #define GREE_TEMP_26C 0b0101
- #define GREE_TEMP_27C 0b1101
- #define GREE_TEMP_28C 0b0011
- #define GREE_TEMP_29C 0b1011
- #define GREE_TEMP_30C 0b0111
- // Misc
- #define GREE_ON 1
- #define GREE_OFF 0
- struct CondStruct {
- unsigned short align : 4; // ---
- unsigned short zeroes : 6; // dont know (zeroes)
- unsigned short light : 1; // Light (indication) On/Off
- unsigned short turbo : 1; // Turbo mode On/Off
- unsigned short timer : 8; // Off timer (later)
- unsigned short temp : 4; // Temperature to hold
- unsigned short sleep : 1; // Sleep (Night) mode On/Off
- unsigned short swing : 1; // Swing On/Off
- unsigned short fun : 2; // Fun mode (auto/low/med/high)
- unsigned short power : 1; // Power On/Off
- unsigned short mode : 3; // Working mode (cooling, heating, hidration, etc)
- // unsigned short another : 7; // dont know (1010010)
- }; // 28 bits + last 7 tail
- union CondUnion {
- unsigned long data;
- struct CondStruct bitfield;
- };
- IRsend irsend;
- union CondUnion data;
- int i, diff;
- unsigned short temps[15] = {GREE_TEMP_16C,GREE_TEMP_17C,GREE_TEMP_18C,GREE_TEMP_19C,GREE_TEMP_20C,GREE_TEMP_21C,GREE_TEMP_22C,GREE_TEMP_23C,
- GREE_TEMP_24C,GREE_TEMP_25C,GREE_TEMP_26C,GREE_TEMP_27C,GREE_TEMP_28C,GREE_TEMP_29C,GREE_TEMP_30C};
- ////////////////////////////////////////////////////////////////////
- // Based on NEC proto
- void sendConditioner(unsigned long data) {
- unsigned char tail = 0b1010010; //7 bits fixed tail
- unsigned char tailmask = 0b01000000; //7 bits
- unsigned long mask = 0x80000000;
- irsend.enableIROut(38);
- delay(10);
- irsend.mark(GREE_HDR_MARK);
- irsend.space(GREE_HDR_SPACE);
- for (int i = 0; i < 28; i++) {
- if (data & mask) {
- irsend.mark(GREE_BIT_MARK);
- irsend.space(GREE_ONE_SPACE);
- }
- else {
- irsend.mark(GREE_BIT_MARK);
- irsend.space(GREE_ZERO_SPACE);
- }
- mask >>= 1;
- }
- for (int i = 0; i < 7; i++) {
- if (tail & tailmask) {
- irsend.mark(GREE_BIT_MARK);
- irsend.space(GREE_ONE_SPACE);
- }
- else {
- irsend.mark(GREE_BIT_MARK);
- irsend.space(GREE_ZERO_SPACE);
- }
- tailmask >>= 1;
- }
- irsend.mark(GREE_BIT_MARK);
- irsend.space(0);
- }
- ////////////////////////////////////////////////////////////////////
- void setup() {
- Serial.begin(9600);
- data.data = 0;
- data.bitfield.mode = GREE_MODE_COOL; // cooling
- data.bitfield.power = GREE_ON;
- data.bitfield.fun = GREE_FUN_MEDIUM; // medium
- data.bitfield.swing = GREE_OFF;
- data.bitfield.sleep = GREE_OFF;
- data.bitfield.turbo = GREE_OFF;
- data.bitfield.light = GREE_ON;
- i = 0; diff = 1;
- }
- ////////////////////////////////////////////////////////////////////
- void loop() {
- data.bitfield.temp = temps[i];
- sendConditioner(data.data);
- if(i+diff == 15 || i+diff < 0)
- diff *= -1;
- i += diff;
- delay(2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement