Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote

Dependents:   Lilnija_29012017 NucleoF042K6_IRReceiver

Revision:
0:70c8e56bac45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ir_Whynter.cpp	Sat Jan 23 06:16:48 2016 +0000
@@ -0,0 +1,91 @@
+#include "IRremote.h"
+#include "IRremoteInt.h"
+
+//==============================================================================
+//               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
+//==============================================================================
+
+#define WHYNTER_BITS          32
+#define WHYNTER_HDR_MARK    2850
+#define WHYNTER_HDR_SPACE   2850
+#define WHYNTER_BIT_MARK     750
+#define WHYNTER_ONE_MARK     750
+#define WHYNTER_ONE_SPACE   2150
+#define WHYNTER_ZERO_MARK    750
+#define WHYNTER_ZERO_SPACE   750
+
+//+=============================================================================
+#if SEND_WHYNTER
+void  IRsend::sendWhynter (unsigned long data,  int nbits)
+{
+	// Set IR carrier frequency
+	enableIROut(38);
+
+	// Start
+	mark(WHYNTER_ZERO_MARK);
+	space(WHYNTER_ZERO_SPACE);
+
+	// Header
+	mark(WHYNTER_HDR_MARK);
+	space(WHYNTER_HDR_SPACE);
+
+	// Data
+	for (unsigned long  mask = 1UL << (nbits - 1);  mask;  mask >>= 1) {
+		if (data & mask) {
+			mark(WHYNTER_ONE_MARK);
+			space(WHYNTER_ONE_SPACE);
+		} else {
+			mark(WHYNTER_ZERO_MARK);
+			space(WHYNTER_ZERO_SPACE);
+		}
+	}
+
+	// Footer
+	mark(WHYNTER_ZERO_MARK);
+	space(WHYNTER_ZERO_SPACE);  // Always end with the LED off
+}
+#endif
+
+//+=============================================================================
+#if DECODE_WHYNTER
+bool  IRrecv::decodeWhynter (decode_results *results)
+{
+	long  data   = 0;
+	int   offset = 1;  // skip initial space
+
+	// Check we have the right amount of data
+	if (irparams.rawlen < (2 * WHYNTER_BITS) + 6)  return false ;
+
+	// Sequence begins with a bit mark and a zero space
+	if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_BIT_MARK  ))  return false ;
+	if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_ZERO_SPACE))  return false ;
+
+	// header mark and space
+	if (!MATCH_MARK (results->rawbuf[offset++], WHYNTER_HDR_MARK ))  return false ;
+	if (!MATCH_SPACE(results->rawbuf[offset++], WHYNTER_HDR_SPACE))  return false ;
+
+	// data bits
+	for (int i = 0;  i < WHYNTER_BITS;  i++) {
+		if (!MATCH_MARK(results->rawbuf[offset++], WHYNTER_BIT_MARK))  return false ;
+
+		if      (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ONE_SPACE ))  data = (data << 1) | 1 ;
+		else if (MATCH_SPACE(results->rawbuf[offset], WHYNTER_ZERO_SPACE))  data = (data << 1) | 0 ;
+		else                                                                return false ;
+		offset++;
+	}
+
+	// trailing mark
+	if (!MATCH_MARK(results->rawbuf[offset], WHYNTER_BIT_MARK))  return false ;
+
+	// Success
+	results->bits = WHYNTER_BITS;
+	results->value = data;
+	results->decode_type = WHYNTER;
+	return true;
+}
+#endif
+