Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Lilnija_29012017 NucleoF042K6_IRReceiver
ir_NEC.cpp
00001 #include "IRremote.h" 00002 #include "IRremoteInt.h" 00003 00004 //============================================================================== 00005 // N N EEEEE CCCC 00006 // NN N E C 00007 // N N N EEE C 00008 // N NN E C 00009 // N N EEEEE CCCC 00010 //============================================================================== 00011 00012 #define NEC_BITS 32 00013 #define NEC_HDR_MARK 9000 00014 #define NEC_HDR_SPACE 4500 00015 #define NEC_BIT_MARK 560 00016 #define NEC_ONE_SPACE 1690 00017 #define NEC_ZERO_SPACE 560 00018 #define NEC_RPT_SPACE 2250 00019 00020 //+============================================================================= 00021 #if SEND_NEC 00022 void IRsend::sendNEC (unsigned long data, int nbits) 00023 { 00024 // Set IR carrier frequency 00025 enableIROut(38); 00026 00027 // Header 00028 mark(NEC_HDR_MARK); 00029 space(NEC_HDR_SPACE); 00030 00031 // Data 00032 for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { 00033 if (data & mask) { 00034 mark(NEC_BIT_MARK); 00035 space(NEC_ONE_SPACE); 00036 } else { 00037 mark(NEC_BIT_MARK); 00038 space(NEC_ZERO_SPACE); 00039 } 00040 } 00041 00042 // Footer 00043 mark(NEC_BIT_MARK); 00044 space(0); // Always end with the LED off 00045 } 00046 #endif 00047 00048 //+============================================================================= 00049 // NECs have a repeat only 4 items long 00050 // 00051 #if DECODE_NEC 00052 bool IRrecv::decodeNEC (decode_results *results) 00053 { 00054 long data = 0; // We decode in to here; Start with nothing 00055 int offset = 1; // Index in to results; Skip first entry!? 00056 00057 // Check header "mark" 00058 if (!MATCH_MARK(results->rawbuf[offset], NEC_HDR_MARK)) return false ; 00059 offset++; 00060 00061 // Check for repeat 00062 if ( (irparams.rawlen == 4) 00063 && MATCH_SPACE(results->rawbuf[offset ], NEC_RPT_SPACE) 00064 && MATCH_MARK (results->rawbuf[offset+1], NEC_BIT_MARK ) 00065 ) { 00066 results->bits = 0; 00067 results->value = REPEAT; 00068 results->decode_type = NEC; 00069 return true; 00070 } 00071 00072 // Check we have enough data 00073 if (irparams.rawlen < (2 * NEC_BITS) + 4) return false ; 00074 00075 // Check header "space" 00076 if (!MATCH_SPACE(results->rawbuf[offset], NEC_HDR_SPACE)) return false ; 00077 offset++; 00078 00079 // Build the data 00080 for (int i = 0; i < NEC_BITS; i++) { 00081 // Check data "mark" 00082 if (!MATCH_MARK(results->rawbuf[offset], NEC_BIT_MARK)) return false ; 00083 offset++; 00084 // Suppend this bit 00085 if (MATCH_SPACE(results->rawbuf[offset], NEC_ONE_SPACE )) data = (data << 1) | 1 ; 00086 else if (MATCH_SPACE(results->rawbuf[offset], NEC_ZERO_SPACE)) data = (data << 1) | 0 ; 00087 else return false ; 00088 offset++; 00089 } 00090 00091 // Success 00092 results->bits = NEC_BITS; 00093 results->value = data; 00094 results->decode_type = NEC; 00095 00096 return true; 00097 } 00098 #endif
Generated on Tue Jul 12 2022 18:56:50 by
