Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote
ir_Whynter.cpp
00001 #include "IRremote.h" 00002 #include "IRremoteInt.h" 00003 00004 //============================================================================== 00005 // W W H H Y Y N N TTTTT EEEEE RRRRR 00006 // W W H H Y Y NN N T E R R 00007 // W W W HHHHH Y N N N T EEE RRRR 00008 // W W W H H Y N NN T E R R 00009 // WWW H H Y N N T EEEEE R R 00010 //============================================================================== 00011 00012 #define WHYNTER_BITS 32 00013 #define WHYNTER_HDR_MARK 2850 00014 #define WHYNTER_HDR_SPACE 2850 00015 #define WHYNTER_BIT_MARK 750 00016 #define WHYNTER_ONE_MARK 750 00017 #define WHYNTER_ONE_SPACE 2150 00018 #define WHYNTER_ZERO_MARK 750 00019 #define WHYNTER_ZERO_SPACE 750 00020 00021 //+============================================================================= 00022 #if SEND_WHYNTER 00023 void IRsend::sendWhynter (unsigned long data, int nbits) 00024 { 00025 // Set IR carrier frequency 00026 enableIROut(38); 00027 00028 // Start 00029 mark(WHYNTER_ZERO_MARK); 00030 space(WHYNTER_ZERO_SPACE); 00031 00032 // Header 00033 mark(WHYNTER_HDR_MARK); 00034 space(WHYNTER_HDR_SPACE); 00035 00036 // Data 00037 for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { 00038 if (data & mask) { 00039 mark(WHYNTER_ONE_MARK); 00040 space(WHYNTER_ONE_SPACE); 00041 } else { 00042 mark(WHYNTER_ZERO_MARK); 00043 space(WHYNTER_ZERO_SPACE); 00044 } 00045 } 00046 00047 // Footer 00048 mark(WHYNTER_ZERO_MARK); 00049 space(WHYNTER_ZERO_SPACE); // Always end with the LED off 00050 } 00051 #endif 00052 00053 //+============================================================================= 00054 #if DECODE_WHYNTER 00055 bool IRrecv::decodeWhynter (decode_results *results) 00056 { 00057 long data = 0; 00058 int offset = 1; // skip initial space 00059 00060 // Check we have the right amount of data 00061 if (irparams.rawlen < (2 * WHYNTER_BITS) + 6) return false ; 00062 00063 // Sequence begins with a bit mark and a zero space 00064 if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_BIT_MARK )) return false ; 00065 if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_ZERO_SPACE)) return false ; 00066 00067 // header mark and space 00068 if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_HDR_MARK )) return false ; 00069 if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_HDR_SPACE)) return false ; 00070 00071 // data bits 00072 for (int i = 0; i < WHYNTER_BITS; i++) { 00073 if (!MATCH_MARK(results->rawbuf[offset++], WHYNTER_BIT_MARK)) return false ; 00074 00075 if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ONE_SPACE )) data = (data << 1) | 1 ; 00076 else if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ZERO_SPACE)) data = (data << 1) | 0 ; 00077 else return false ; 00078 offset++; 00079 } 00080 00081 // trailing mark 00082 if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK)) return false ; 00083 00084 // Success 00085 results->bits = WHYNTER_BITS; 00086 results->value = data; 00087 results->decode_type = WHYNTER; 00088 return true; 00089 } 00090 #endif 00091
Generated on Fri Jul 15 2022 02:03:08 by 1.7.2