#ifndef _IR_WHYNTER_HPP #define _IR_WHYNTER_HPP #include //#define DEBUG // Activate this for lots of lovely debug output from this decoder. #include "IRremoteInt.h" // evaluates the DEBUG for IR_DEBUG_PRINT /** \addtogroup Decoder Decoders and encoders for different protocols * @{ */ //============================================================================== // W W H H Y Y N N TTTTT EEEEE RRRRR // W W H H Y Y NN N T E R R // W W W HHHHH Y N N N T EEE RRRR // W W W H H Y N NN T E R R // WWW H H Y N N T EEEEE R R //============================================================================== // Whynter A/C ARC-110WD added by Francesco Meschia // see https://docs.google.com/spreadsheets/d/1dsr4Jh-nzC6xvSKGpLlPBF0NRwvlpyw-ozg8eZU813w/edit#gid=0 #define WHYNTER_BITS 32 #define WHYNTER_HEADER_MARK 2850 #define WHYNTER_HEADER_SPACE 2850 #define WHYNTER_BIT_MARK 750 #define WHYNTER_ONE_SPACE 2150 #define WHYNTER_ZERO_SPACE 750 //+============================================================================= void IRsend::sendWhynter(unsigned long data, int nbits) { // Set IR carrier frequency enableIROut(38); // Start mark(WHYNTER_BIT_MARK); space(WHYNTER_ZERO_SPACE); // Header mark(WHYNTER_HEADER_MARK); space(WHYNTER_HEADER_SPACE); // Data + stop bit sendPulseDistanceWidthData(WHYNTER_BIT_MARK, WHYNTER_ONE_SPACE, WHYNTER_BIT_MARK, WHYNTER_ZERO_SPACE, data, nbits, PROTOCOL_IS_MSB_FIRST, SEND_STOP_BIT); IrReceiver.restartAfterSend(); } //+============================================================================= bool IRrecv::decodeWhynter() { // Check we have the right amount of data (68). The +4 is for initial gap, start bit mark and space + stop bit mark. if (decodedIRData.rawDataPtr->rawlen != (2 * WHYNTER_BITS) + 4) { return false; } // Sequence begins with a bit mark and a zero space if (!matchMark(decodedIRData.rawDataPtr->rawbuf[1], WHYNTER_BIT_MARK) || !matchSpace(decodedIRData.rawDataPtr->rawbuf[2], WHYNTER_HEADER_SPACE)) { IR_DEBUG_PRINT(F("Whynter: ")); IR_DEBUG_PRINTLN(F("Header mark or space length is wrong")); return false; } if (!decodePulseDistanceData(WHYNTER_BITS, 3, WHYNTER_BIT_MARK, WHYNTER_ONE_SPACE, WHYNTER_ZERO_SPACE, PROTOCOL_IS_MSB_FIRST)) { return false; } // trailing mark / stop bit if (!matchMark(decodedIRData.rawDataPtr->rawbuf[3 + (2 * WHYNTER_BITS)], WHYNTER_BIT_MARK)) { IR_DEBUG_PRINTLN(F("Stop bit mark length is wrong")); return false; } // Success decodedIRData.flags = IRDATA_FLAGS_IS_MSB_FIRST; decodedIRData.numberOfBits = WHYNTER_BITS; decodedIRData.protocol = WHYNTER; return true; } /** @}*/ #endif // _IR_WHYNTER_HPP