Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote
ir_Panasonic.cpp
00001 #include "IRremote.h" 00002 #include "IRremoteInt.h" 00003 00004 //============================================================================== 00005 // PPPP AAA N N AAA SSSS OOO N N IIIII CCCC 00006 // P P A A NN N A A S O O NN N I C 00007 // PPPP AAAAA N N N AAAAA SSS O O N N N I C 00008 // P A A N NN A A S O O N NN I C 00009 // P A A N N A A SSSS OOO N N IIIII CCCC 00010 //============================================================================== 00011 00012 #define PANASONIC_BITS 48 00013 #define PANASONIC_HDR_MARK 3502 00014 #define PANASONIC_HDR_SPACE 1750 00015 #define PANASONIC_BIT_MARK 502 00016 #define PANASONIC_ONE_SPACE 1244 00017 #define PANASONIC_ZERO_SPACE 400 00018 00019 //+============================================================================= 00020 #if SEND_PANASONIC 00021 void IRsend::sendPanasonic (unsigned int address, unsigned long data) 00022 { 00023 // Set IR carrier frequency 00024 enableIROut(35); 00025 00026 // Header 00027 mark(PANASONIC_HDR_MARK); 00028 space(PANASONIC_HDR_SPACE); 00029 00030 // Address 00031 for (unsigned long mask = 1UL << (16 - 1); mask; mask >>= 1) { 00032 mark(PANASONIC_BIT_MARK); 00033 if (address & mask) space(PANASONIC_ONE_SPACE) ; 00034 else space(PANASONIC_ZERO_SPACE) ; 00035 } 00036 00037 // Data 00038 for (unsigned long mask = 1UL << (32 - 1); mask; mask >>= 1) { 00039 mark(PANASONIC_BIT_MARK); 00040 if (data & mask) space(PANASONIC_ONE_SPACE) ; 00041 else space(PANASONIC_ZERO_SPACE) ; 00042 } 00043 00044 // Footer 00045 mark(PANASONIC_BIT_MARK); 00046 space(0); // Always end with the LED off 00047 } 00048 #endif 00049 00050 //+============================================================================= 00051 #if DECODE_PANASONIC 00052 bool IRrecv::decodePanasonic (decode_results *results) 00053 { 00054 unsigned long long data = 0; 00055 int offset = 1; 00056 00057 if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_HDR_MARK )) return false ; 00058 if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_HDR_SPACE)) return false ; 00059 00060 // decode address 00061 for (int i = 0; i < PANASONIC_BITS; i++) { 00062 if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) return false ; 00063 00064 if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE )) data = (data << 1) | 1 ; 00065 else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) data = (data << 1) | 0 ; 00066 else return false ; 00067 offset++; 00068 } 00069 00070 results->value = (unsigned long)data; 00071 results->address = (unsigned int)(data >> 32); 00072 results->decode_type = PANASONIC; 00073 results->bits = PANASONIC_BITS; 00074 00075 return true; 00076 } 00077 #endif 00078
Generated on Fri Jul 15 2022 02:03:08 by 1.7.2