Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote
ir_Samsung.cpp
00001 #include "IRremote.h" 00002 #include "IRremoteInt.h" 00003 00004 //============================================================================== 00005 // SSSS AAA MMM SSSS U U N N GGGG 00006 // S A A M M M S U U NN N G 00007 // SSS AAAAA M M M SSS U U N N N G GG 00008 // S A A M M S U U N NN G G 00009 // SSSS A A M M SSSS UUU N N GGG 00010 //============================================================================== 00011 00012 #define SAMSUNG_BITS 32 00013 #define SAMSUNG_HDR_MARK 5000 00014 #define SAMSUNG_HDR_SPACE 5000 00015 #define SAMSUNG_BIT_MARK 560 00016 #define SAMSUNG_ONE_SPACE 1600 00017 #define SAMSUNG_ZERO_SPACE 560 00018 #define SAMSUNG_RPT_SPACE 2250 00019 00020 //+============================================================================= 00021 #if SEND_SAMSUNG 00022 void IRsend::sendSAMSUNG (unsigned long data, int nbits) 00023 { 00024 // Set IR carrier frequency 00025 enableIROut(38); 00026 00027 // Header 00028 mark(SAMSUNG_HDR_MARK); 00029 space(SAMSUNG_HDR_SPACE); 00030 00031 // Data 00032 for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { 00033 if (data & mask) { 00034 mark(SAMSUNG_BIT_MARK); 00035 space(SAMSUNG_ONE_SPACE); 00036 } else { 00037 mark(SAMSUNG_BIT_MARK); 00038 space(SAMSUNG_ZERO_SPACE); 00039 } 00040 } 00041 00042 // Footer 00043 mark(SAMSUNG_BIT_MARK); 00044 space(0); // Always end with the LED off 00045 } 00046 #endif 00047 00048 //+============================================================================= 00049 // SAMSUNGs have a repeat only 4 items long 00050 // 00051 #if DECODE_SAMSUNG 00052 bool IRrecv::decodeSAMSUNG (decode_results *results) 00053 { 00054 long data = 0; 00055 int offset = 1; // Skip first space 00056 00057 // Initial mark 00058 if (!MATCH_MARK(results->rawbuf[offset], SAMSUNG_HDR_MARK)) return false ; 00059 offset++; 00060 00061 // Check for repeat 00062 if ( (irparams.rawlen == 4) 00063 && MATCH_SPACE(results->rawbuf[offset], SAMSUNG_RPT_SPACE) 00064 && MATCH_MARK(results->rawbuf[offset+1], SAMSUNG_BIT_MARK) 00065 ) { 00066 results->bits = 0; 00067 results->value = REPEAT; 00068 results->decode_type = SAMSUNG; 00069 return true; 00070 } 00071 if (irparams.rawlen < (2 * SAMSUNG_BITS) + 4) return false ; 00072 00073 // Initial space 00074 if (!MATCH_SPACE(results->rawbuf[offset++], SAMSUNG_HDR_SPACE)) return false ; 00075 00076 for (int i = 0; i < SAMSUNG_BITS; i++) { 00077 if (!MATCH_MARK(results->rawbuf[offset++], SAMSUNG_BIT_MARK)) return false ; 00078 00079 if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ONE_SPACE)) data = (data << 1) | 1 ; 00080 else if (MATCH_SPACE(results->rawbuf[offset], SAMSUNG_ZERO_SPACE)) data = (data << 1) | 0 ; 00081 else return false ; 00082 offset++; 00083 } 00084 00085 // Success 00086 results->bits = SAMSUNG_BITS; 00087 results->value = data; 00088 results->decode_type = SAMSUNG; 00089 return true; 00090 } 00091 #endif 00092
Generated on Fri Jul 15 2022 02:03:08 by 1.7.2