Исходная библиотека IRremote

This commit is contained in:
klassents committed 2025-01-25 10:33:13 +07:00
1 parent 2bda6824d5
commit e7eb7babf3
122 files changed
+38600

No files matched your search

@@ -0,0 +1,349 @@
/*
* PinDefinitionsAndMore.h
*
* Contains pin definitions for IRremote examples for various platforms
* as well as definitions for feedback LED and tone() and includes
*
* Copyright (C) 2021-2023 Armin Joachimsmeyer
* armin.joachimsmeyer@gmail.com
*
* This file is part of IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
*
* Arduino-IRremote is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/gpl.html>.
*
*/
/*
* Pin mapping table for different platforms
*
* Platform IR input IR output Tone Core/Pin schema
* --------------------------------------------------------------
* DEFAULT/AVR 2 3 4 Arduino
* ATtinyX5 0|PB0 4|PB4 3|PB3 ATTinyCore
* ATtiny167 3|PA3 2|PA2 7|PA7 ATTinyCore
* ATtiny167 9|PA3 8|PA2 5|PA7 Digispark original core
* ATtiny84 |PB2 |PA4 |PA3 ATTinyCore
* ATtiny88 3|PD3 4|PD4 9|PB1 ATTinyCore
* ATtiny3217 18|PA1 19|PA2 20|PA3 MegaTinyCore
* ATtiny1604 2 3|PA5 %
* ATtiny816 14|PA1 16|PA3 1|PA5 MegaTinyCore
* ATtiny1614 8|PA1 10|PA3 1|PA5 MegaTinyCore
* SAMD21 3 4 5
* ESP8266 14|D5 12|D6 %
* ESP32 15 4 27
* ESP32-C3 2 3 4
* BluePill PA6 PA7 PA3
* APOLLO3 11 12 5
* RP2040 3|GPIO15 4|GPIO16 5|GPIO17
*/
//#define _IR_MEASURE_TIMING // For debugging purposes.
#if defined(__AVR__)
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) // Digispark board. For use with ATTinyCore.
#include "ATtinySerialOut.hpp" // TX is at pin 2 - Available as Arduino library "ATtinySerialOut". Saves 700 bytes program memory and 70 bytes RAM for ATtinyCore.
#define IR_RECEIVE_PIN PIN_PB0
#define IR_SEND_PIN PIN_PB4 // Pin 2 is serial output with ATtinySerialOut. Pin 1 is internal LED and Pin3 is USB+ with pullup on Digispark board.
#define TONE_PIN PIN_PB3
#define _IR_TIMING_TEST_PIN PIN_PB3
# elif defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) // Digispark pro board
#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut"
// For ATtiny167 Pins PB6 and PA3 are usable as interrupt source.
# if defined(ARDUINO_AVR_DIGISPARKPRO)
// For use with Digispark original core
#define IR_RECEIVE_PIN 9 // PA3 - on Digispark board labeled as pin 9
//#define IR_RECEIVE_PIN 14 // PB6 / INT0 is connected to USB+ on DigisparkPro boards
#define IR_SEND_PIN 8 // PA2 - on Digispark board labeled as pin 8
#define TONE_PIN 5 // PA7 - on Digispark board labeled as pin 5
#define _IR_TIMING_TEST_PIN 10 // PA4
# else
// For use with ATTinyCore
#define IR_RECEIVE_PIN PIN_PA3 // On Digispark board labeled as pin 9 - INT0 is connected to USB+ on DigisparkPro boards
#define IR_SEND_PIN PIN_PA2 // On Digispark board labeled as pin 8
#define TONE_PIN PIN_PA7 // On Digispark board labeled as pin 5
# endif
# elif defined(__AVR_ATtiny84__) // For use with ATTinyCore
#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory.
#define IR_RECEIVE_PIN PIN_PB2 // INT0
#define IR_SEND_PIN PIN_PA4
#define TONE_PIN PIN_PA3
#define _IR_TIMING_TEST_PIN PIN_PA5
# elif defined(__AVR_ATtiny88__) // MH-ET Tiny88 board. For use with ATTinyCore.
#include "ATtinySerialOut.hpp" // Available as Arduino library "ATtinySerialOut". Saves 128 bytes program memory.
// Pin 6 is TX, pin 7 is RX
#define IR_RECEIVE_PIN PIN_PD3 // 3 - INT1
#define IR_SEND_PIN PIN_PD4 // 4
#define TONE_PIN PIN_PB1 // 9
#define _IR_TIMING_TEST_PIN PIN_PB0 // 8
# elif defined(__AVR_ATtiny1616__) || defined(__AVR_ATtiny3216__) || defined(__AVR_ATtiny3217__) // For use with megaTinyCore
// Tiny Core Dev board
// https://www.tindie.com/products/xkimi/tiny-core-16-dev-board-attiny1616/ - Out of Stock
// https://www.tindie.com/products/xkimi/tiny-core-32-dev-board-attiny3217/ - Out of Stock
#define IR_RECEIVE_PIN PIN_PA1 // use 18 instead of PIN_PA1 for TinyCore32
#define IR_SEND_PIN PIN_PA2 // 19
#define TONE_PIN PIN_PA3 // 20
#define APPLICATION_PIN PIN_PA0 // 0
#undef LED_BUILTIN // No LED available on the TinyCore 32 board, take the one on the programming board which is connected to the DAC output
#define LED_BUILTIN PIN_PA6 // use 2 instead of PIN_PA6 for TinyCore32
# elif defined(__AVR_ATtiny816__) // For use with megaTinyCore
#define IR_RECEIVE_PIN PIN_PA1 // 14
#define IR_SEND_PIN PIN_PA1 // 16
#define TONE_PIN PIN_PA5 // 1
#define APPLICATION_PIN PIN_PA4 // 0
#undef LED_BUILTIN // No LED available, take the one which is connected to the DAC output
#define LED_BUILTIN PIN_PB5 // 4
# elif defined(__AVR_ATtiny1614__) // For use with megaTinyCore
#define IR_RECEIVE_PIN PIN_PA1 // 8
#define IR_SEND_PIN PIN_PA3 // 10
#define TONE_PIN PIN_PA5 // 1
#define APPLICATION_PIN PIN_PA4 // 0
# elif defined(__AVR_ATtiny1604__) // For use with megaTinyCore
#define IR_RECEIVE_PIN PIN_PA6 // 2 - To be compatible with interrupt example, pin 2 is chosen here.
#define IR_SEND_PIN PIN_PA7 // 3
#define APPLICATION_PIN PIN_PB2 // 5
#define tone(...) void() // Define as void, since TCB0_INT_vect is also used by tone()
#define noTone(a) void()
#define TONE_PIN 42 // Dummy for examples using it
# elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \
|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \
|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \
|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \
|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \
|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \
|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \
|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \
|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__)
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 13
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
# else // Default as for ATmega328 like on Uno, Nano, Leonardo, Teensy 2.0 etc.
#define IR_RECEIVE_PIN 2 // To be compatible with interrupt example, pin 2 is chosen here.
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
# if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro is __AVR_ATmega32U4__ but has different external circuit
// We have no built in LED at pin 13 -> reuse RX LED
#undef LED_BUILTIN
#define LED_BUILTIN LED_BUILTIN_RX
# endif
# endif // defined(__AVR_ATtiny25__)...
#elif defined(ARDUINO_ARCH_RENESAS_UNO) // Uno R4
// To be compatible with Uno R3.
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
#elif defined(ESP8266)
#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D4) is active LOW
#define IR_RECEIVE_PIN 14 // D5
#define IR_SEND_PIN 12 // D6 - D4/pin 2 is internal LED
#define _IR_TIMING_TEST_PIN 2 // D4
#define APPLICATION_PIN 13 // D7
#define tone(...) void() // tone() inhibits receive timer
#define noTone(a) void()
#define TONE_PIN 42 // Dummy for examples using it#
#elif defined(ARDUINO_NOLOGO_ESP32C3_SUPER_MINI)
#define FEEDBACK_LED_IS_ACTIVE_LOW // The LED on my board (D8) is active LOW
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 10
#elif defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32C3_DEV)
#define NO_LED_FEEDBACK_CODE // The WS2812 on pin 8 of AI-C3 board crashes if used as receive feedback LED, other I/O pins are working...
#define IR_RECEIVE_PIN 6
#define IR_SEND_PIN 7
#define TONE_PIN 10
#define APPLICATION_PIN 18
#elif defined(ESP32)
#include <Arduino.h>
// tone() is included in ESP32 core since 2.0.2
#if !defined(ESP_ARDUINO_VERSION_VAL)
#define ESP_ARDUINO_VERSION_VAL(major, minor, patch) 12345678
#endif
#if ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2)
#define TONE_LEDC_CHANNEL 1 // Using channel 1 makes tone() independent of receiving timer -> No need to stop receiving timer.
void tone(uint8_t aPinNumber, unsigned int aFrequency){
ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL);
ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency);
}
void tone(uint8_t aPinNumber, unsigned int aFrequency, unsigned long aDuration){
ledcAttachPin(aPinNumber, TONE_LEDC_CHANNEL);
ledcWriteTone(TONE_LEDC_CHANNEL, aFrequency);
delay(aDuration);
ledcWriteTone(TONE_LEDC_CHANNEL, 0);
}
void noTone(uint8_t aPinNumber){
ledcWriteTone(TONE_LEDC_CHANNEL, 0);
}
#endif // ESP_ARDUINO_VERSION <= ESP_ARDUINO_VERSION_VAL(2, 0, 2)
#define IR_RECEIVE_PIN 15 // D15
#define IR_SEND_PIN 4 // D4
#define TONE_PIN 27 // D27 25 & 26 are DAC0 and 1
#define APPLICATION_PIN 16 // RX2 pin
#elif defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_STM32F1) // BluePill
// Timer 3 blocks PA6, PA7, PB0, PB1 for use by Servo or tone()
#define IR_RECEIVE_PIN PA6
#define IR_RECEIVE_PIN_STRING "PA6"
#define IR_SEND_PIN PA7
#define IR_SEND_PIN_STRING "PA7"
#define TONE_PIN PA3
#define _IR_TIMING_TEST_PIN PA5
#define APPLICATION_PIN PA2
#define APPLICATION_PIN_STRING "PA2"
# if defined(ARDUINO_GENERIC_STM32F103C) || defined(ARDUINO_BLUEPILL_F103C8)
// BluePill LED is active low
#define FEEDBACK_LED_IS_ACTIVE_LOW
# endif
#elif defined(ARDUINO_ARCH_APOLLO3) // Sparkfun Apollo boards
#define IR_RECEIVE_PIN 11
#define IR_SEND_PIN 12
#define TONE_PIN 5
#elif defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_MBED_NANO) // Arduino Nano 33 BLE and Arduino Nano Connect layout for MBED
// Must be before ARDUINO_ARCH_RP2040, since it is the layout for the MBED core of Arduino Nano Connect
#define IR_RECEIVE_PIN 3 // GPIO15 Start with pin 3 since pin 2|GPIO25 is connected to LED on Pi pico
#define IR_SEND_PIN 4 // GPIO16
#define TONE_PIN 5
#define APPLICATION_PIN 6
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 7 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 8
#elif defined(ARDUINO_ARCH_RP2040) // Arduino Nano Connect, Pi Pico with arduino-pico core https://github.com/earlephilhower/arduino-pico
#define IR_RECEIVE_PIN 15 // GPIO15 to be compatible with the Arduino Nano RP2040 Connect (pin3)
#define IR_SEND_PIN 16 // GPIO16
#define TONE_PIN 17
#define APPLICATION_PIN 18
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 19 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 20
// If you program the Nano RP2040 Connect with this core, then you must redefine LED_BUILTIN
// and use the external reset with 1 kOhm to ground to enter UF2 mode
#undef LED_BUILTIN
#define LED_BUILTIN 6
#elif defined(PARTICLE) // !!!UNTESTED!!!
#define IR_RECEIVE_PIN A4
#define IR_SEND_PIN A5 // Particle supports multiple pins
#define LED_BUILTIN D7
/*
* 4 times the same (default) layout for easy adaption in the future
*/
#elif defined(TEENSYDUINO) // Teensy 2.0 is handled at default for ATmega328 like on Uno, Nano, Leonardo etc.
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
#elif defined(ARDUINO_ARCH_MBED) // Arduino Nano 33 BLE
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM)
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
#if !defined(ARDUINO_SAMD_ADAFRUIT) && !defined(ARDUINO_SEEED_XIAO_M0)
// On the Zero and others we switch explicitly to SerialUSB
#define Serial SerialUSB
#endif
// Definitions for the Chinese SAMD21 M0-Mini clone, which has no led connected to D13/PA17.
// Attention!!! D2 and D4 are swapped on these boards!!!
// If you connect the LED, it is on pin 24/PB11. In this case activate the next two lines.
//#undef LED_BUILTIN
//#define LED_BUILTIN 24 // PB11
// As an alternative you can choose pin 25, it is the RX-LED pin (PB03), but active low.In this case activate the next 3 lines.
//#undef LED_BUILTIN
//#define LED_BUILTIN 25 // PB03
//#define FEEDBACK_LED_IS_ACTIVE_LOW // The RX LED on the M0-Mini is active LOW
#elif defined (NRF51) // BBC micro:bit
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define APPLICATION_PIN 1
#define _IR_TIMING_TEST_PIN 4
#define tone(...) void() // no tone() available
#define noTone(a) void()
#define TONE_PIN 42 // Dummy for examples using it
#else
#warning Board / CPU is not detected using pre-processor symbols -> using default values, which may not fit. Please extend PinDefinitionsAndMore.h.
// Default valued for unidentified boards
#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define TONE_PIN 4
#define APPLICATION_PIN 5
#define ALTERNATIVE_IR_FEEDBACK_LED_PIN 6 // E.g. used for examples which use LED_BUILDIN for example output.
#define _IR_TIMING_TEST_PIN 7
#endif // defined(ESP8266)
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(PARTICLE) || defined(ARDUINO_ARCH_MBED)
#define SEND_PWM_BY_TIMER // We do not have pin restrictions for this CPU's, so lets use the hardware PWM for send carrier signal generation
#else
# if defined(SEND_PWM_BY_TIMER)
#undef IR_SEND_PIN // SendPin is determined by timer! This avoids warnings in IRremote.hpp and IRTimer.hpp
# endif
#endif
#if !defined (FLASHEND)
#define FLASHEND 0xFFFF // Dummy value for platforms where FLASHEND is not defined
#endif
/*
* Helper macro for getting a macro definition as string
*/
#if !defined(STR_HELPER)
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#endif
@@ -0,0 +1,919 @@
/*
* UnitTest.cpp
*
* Demonstrates sending IR codes in standard format with address and command and
* simultaneously receiving. Both values are checked for consistency.
*
* This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
*
************************************************************************************
* MIT License
*
* Copyright (c) 2020-2024 Armin Joachimsmeyer
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
************************************************************************************
*/
#include <Arduino.h>
#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc.
#if !defined(RAW_BUFFER_LENGTH)
// For air condition remotes it requires 600 (maximum for 2k RAM) to 750. Default is 112 if DECODE_MAGIQUEST is enabled, otherwise 100.
# if (defined(RAMEND) && RAMEND <= 0x4FF) || (defined(RAMSIZE) && RAMSIZE < 0x4FF)
#define RAW_BUFFER_LENGTH 360
# elif (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF)
#define RAW_BUFFER_LENGTH 400 // 400 is OK with Pronto and 1000 is OK without Pronto. 1200 is too much here, because then variables are overwritten.
# endif
#endif
//#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory.
//#define EXCLUDE_EXOTIC_PROTOCOLS // Saves around 240 bytes program memory if IrSender.write is used
//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM.
//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition
#if FLASHEND <= 0x7FFF // For 32k flash or less, like ATmega328
#define NO_LED_FEEDBACK_CODE // Saves 344 bytes program memory
#endif
// MARK_EXCESS_MICROS is subtracted from all marks and added to all spaces before decoding,
//#define USE_MSB_DECODING_FOR_DISTANCE_DECODER
// to compensate for the signal forming of different IR receiver modules. See also IRremote.hpp line 142.
//#define MARK_EXCESS_MICROS 20 // Adapt it to your IR receiver module. 40 is taken for the cheap VS1838 module her, since we have high intensity.
//#define RECORD_GAP_MICROS 12000 // Default is 8000. Activate it for some LG air conditioner protocols.
//#define TRACE // For internal usage
//#define DEBUG // Activate this for lots of lovely debug output from the decoders.
#if FLASHEND >= 0x1FFF // For 8k flash or more, like ATtiny85
#define DECODE_DENON // Includes Sharp
#define DECODE_KASEIKYO
#define DECODE_PANASONIC // alias for DECODE_KASEIKYO
#define DECODE_NEC // Includes Apple and Onkyo
#endif
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
#define DECODE_JVC
#define DECODE_RC5
#define DECODE_RC6
#define DECODE_DISTANCE_WIDTH // Universal decoder for pulse distance width protocols
#define DECODE_HASH // special decoder for all protocols
#endif
#if FLASHEND >= 0x7FFF // For 32k flash or more, like ATmega328
#define DECODE_SONY
#define DECODE_SAMSUNG
#define DECODE_LG
#define DECODE_BEO // It prevents decoding of SONY (default repeats), which we are not using here.
//#define ENABLE_BEO_WITHOUT_FRAME_GAP // !!!For successful unit testing we must see the warning at ir_BangOlufsen.hpp:100:2!!!
#if defined(DECODE_BEO)
#define RECORD_GAP_MICROS 16000 // Force to get the complete frame including the 3. space of 15 ms in the receive buffer
#define BEO_KHZ 38 // We send and receive Bang&Olufsen with 38 kHz here (instead of 455 kHz).
#endif
#define DECODE_BOSEWAVE
#define DECODE_MAGIQUEST
#define DECODE_FAST
//#define DECODE_WHYNTER
//#define DECODE_LEGO_PF
#endif
//#undef IR_SEND_PIN // enable this, if you need to set send pin programmatically using uint8_t tSendPin below
#include <IRremote.hpp>
#if defined(APPLICATION_PIN)
#define DEBUG_BUTTON_PIN APPLICATION_PIN // if held low, print timing for each received data
#else
#define DEBUG_BUTTON_PIN 6
#endif
#define DELAY_AFTER_SEND 1000
#define DELAY_AFTER_LOOP 5000
#if defined(SEND_PWM_BY_TIMER) && !defined(SEND_PWM_DOES_NOT_USE_RECEIVE_TIMER)
#error Unit test cannot run if SEND_PWM_BY_TIMER is enabled i.e. receive timer us also used by send
#endif
/*
* For callback
*/
volatile bool sDataJustReceived = false;
void ReceiveCompleteCallbackHandler();
void setup() {
pinMode(DEBUG_BUTTON_PIN, INPUT_PULLUP);
Serial.begin(115200);
while (!Serial)
; // Wait for Serial to become available. Is optimized away for some cores.
#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/ \
|| defined(SERIALUSB_PID) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_attiny3217)
delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor!
#endif
// Just to know which program is running on my Arduino
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
// Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
IrReceiver.registerReceiveCompleteCallback(ReceiveCompleteCallbackHandler);
Serial.print(F("Ready to receive IR signals of protocols: "));
printActiveIRProtocols(&Serial);
#if defined(IR_RECEIVE_PIN_STRING)
Serial.println(F("at pin " IR_RECEIVE_PIN_STRING));
#else
Serial.println(F("at pin " STR(IR_RECEIVE_PIN)));
#endif
#if defined(LED_BUILTIN) && !defined(NO_LED_FEEDBACK_CODE)
# if defined(FEEDBACK_LED_IS_ACTIVE_LOW)
Serial.print(F("Active low "));
# endif
Serial.print(F("FeedbackLED at pin "));
Serial.println(LED_BUILTIN); // Works also for ESP32: static const uint8_t LED_BUILTIN = 8; #define LED_BUILTIN LED_BUILTIN
#endif
Serial.println(F("Use ReceiveCompleteCallback"));
Serial.println(F("Receive buffer length is " STR(RAW_BUFFER_LENGTH)));
#if defined(IR_SEND_PIN)
IrSender.begin(); // Start with IR_SEND_PIN -which is defined in PinDefinitionsAndMore.h- as send pin and enable feedback LED at default feedback LED pin
# if defined(IR_SEND_PIN_STRING)
Serial.println(F("Send IR signals at pin " IR_SEND_PIN_STRING));
# else
Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN)));
# endif
#else
// Here the macro IR_SEND_PIN is not defined or undefined above with #undef IR_SEND_PIN
uint8_t tSendPin = 3;
IrSender.begin(tSendPin, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin
// You can change send pin later with IrSender.setSendPin();
Serial.print(F("Send IR signals at pin "));
Serial.println(tSendPin);
#endif
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
Serial.print(F("If you connect debug pin "));
# if defined(APPLICATION_PIN_STRING)
Serial.print(APPLICATION_PIN_STRING);
# else
Serial.print(DEBUG_BUTTON_PIN);
# endif
Serial.println(F(" to ground, raw data is always printed"));
// For esp32 we use PWM generation by ledcWrite() for each pin.
# if !defined(SEND_PWM_BY_TIMER)
/*
* Print internal software PWM generation info
*/
IrSender.enableIROut(38); // Call it with 38 kHz to initialize the values printed below
Serial.print(F("Send signal mark duration for 38kHz is "));
Serial.print(IrSender.periodOnTimeMicros);
Serial.print(F(" us, pulse narrowing correction is "));
Serial.print(IrSender.getPulseCorrectionNanos());
Serial.print(F(" ns, total period is "));
Serial.print(IrSender.periodTimeMicros);
Serial.println(F(" us"));
# endif
// infos for receive
Serial.print(RECORD_GAP_MICROS);
Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed"));
Serial.print(MARK_EXCESS_MICROS);
Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding"));
#endif
delay(DELAY_AFTER_SEND);
}
void checkReceivedRawData(IRRawDataType aRawData) {
// wait until signal has received
while (!sDataJustReceived) {
};
sDataJustReceived = false;
if (IrReceiver.decode()) {
// Print a short summary of received data
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRSendUsage(&Serial);
#else
IrReceiver.printIRResultMinimal(&Serial);
#endif
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) {
// We have an unknown protocol, print more info
IrReceiver.printIRResultRawFormatted(&Serial, true);
}
#endif
if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) {
if (IrReceiver.decodedIRData.decodedRawData != aRawData) {
Serial.print(F("ERROR: Received data=0x"));
#if (__INT_WIDTH__ < 32)
Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX);
#else
PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX);
#endif
Serial.print(F(" != sent data=0x"));
#if (__INT_WIDTH__ < 32)
Serial.print(aRawData, HEX);
#else
PrintULL::print(&Serial, aRawData, HEX);
#endif
Serial.println();
}
}
IrReceiver.resume();
} else {
Serial.println(F("No data received"));
}
Serial.println();
}
#if defined(DECODE_DISTANCE_WIDTH)
void checkReceivedArray(IRRawDataType *aRawDataArrayPointer, uint8_t aArraySize) {
// wait until signal has received
while (!sDataJustReceived) {
};
sDataJustReceived = false;
if (IrReceiver.decode()) {
// Print a short summary of received data
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRSendUsage(&Serial);
#else
IrReceiver.printIRResultMinimal(&Serial);
#endif
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) {
// We have an unknown protocol, print more info
IrReceiver.printIRResultRawFormatted(&Serial, true);
}
#endif
if (IrReceiver.decodedIRData.protocol == PULSE_DISTANCE || IrReceiver.decodedIRData.protocol == PULSE_WIDTH) {
for (uint_fast8_t i = 0; i < aArraySize; ++i) {
if (IrReceiver.decodedIRData.decodedRawDataArray[i] != *aRawDataArrayPointer) {
Serial.print(F("ERROR: Received data=0x"));
# if (__INT_WIDTH__ < 32)
Serial.print(IrReceiver.decodedIRData.decodedRawDataArray[i], HEX);
# else
PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawDataArray[i], HEX);
# endif
Serial.print(F(" != sent data=0x"));
Serial.println(*aRawDataArrayPointer, HEX);
}
aRawDataArrayPointer++;
}
}
IrReceiver.resume();
} else {
Serial.println(F("No data received"));
}
Serial.println();
}
#endif
/*
* Test callback function
* Has the same functionality as a check with available()
*/
void ReceiveCompleteCallbackHandler() {
sDataJustReceived = true;
}
void checkReceive(uint16_t aSentAddress, uint16_t aSentCommand) {
// wait until signal has received
uint16_t tTimeoutCounter = 1000; // gives 10 seconds timeout
while (!sDataJustReceived) {
delay(10);
if (tTimeoutCounter == 0) {
Serial.println(F("Receive timeout happened"));
break;
}
tTimeoutCounter--;
}
sDataJustReceived = false;
if (IrReceiver.decode()) {
// Print a short summary of received data
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRSendUsage(&Serial);
#else
IrReceiver.printIRResultMinimal(&Serial);
#endif
if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) {
Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__));
// see also https://github.com/Arduino-IRremote/Arduino-IRremote#compile-options--macros-for-this-library
}
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604
if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) {
// We have an unknown protocol, print more info
IrReceiver.printIRResultRawFormatted(&Serial, true);
}
#endif
IrReceiver.resume(); // Early resume
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
Serial.println(F("ERROR: Unknown protocol"));
} else {
/*
* Check address
*/
if (IrReceiver.decodedIRData.address != aSentAddress) {
Serial.print(F("ERROR: Received address=0x"));
Serial.print(IrReceiver.decodedIRData.address, HEX);
Serial.print(F(" != sent address=0x"));
Serial.println(aSentAddress, HEX);
}
/*
* Check command
*/
if (IrReceiver.decodedIRData.command != aSentCommand) {
Serial.print(F("ERROR: Received command=0x"));
Serial.print(IrReceiver.decodedIRData.command, HEX);
Serial.print(F(" != sent command=0x"));
Serial.println(aSentCommand, HEX);
}
}
} else {
Serial.println(F("No data received"));
IrReceiver.resume();
}
Serial.println();
}
/*
* Set up the data to be sent.
* For most protocols, the data is build up with a constant 8 (or 16 byte) address
* and a variable 8 bit command.
* There are exceptions like Sony and Denon, which have 5 bit address.
*/
uint16_t sAddress = 0xFFF1;
uint8_t sCommand = 0x76;
uint16_t s16BitCommand = 0x9876;
uint8_t sRepeats = 0;
void loop() {
/*
* Print values
*/
Serial.println();
Serial.print(F("address=0x"));
Serial.print(sAddress, HEX);
Serial.print(F(" command=0x"));
Serial.print(sCommand, HEX);
Serial.println();
Serial.println();
Serial.print(F("Send NEC with 8 bit address"));
if (sRepeats > 0) {
Serial.print(F(" and complete NEC frames as repeats to force decoding as NEC2"));
}
Serial.println();
Serial.flush();
IrSender.sendNEC(sAddress & 0xFF, sCommand, 0);
checkReceive(sAddress & 0xFF, sCommand);
/*
* Complete NEC frames as repeats to force decoding as NEC2 are tested here
*/
for (int8_t i = 0; i < sRepeats; i++) {
if (digitalRead(DEBUG_BUTTON_PIN) != LOW) {
// If debug is enabled, printing time (50 ms) is sufficient as delay
delayMicroseconds(NEC_REPEAT_DISTANCE - 20000); // 20000 is just a guess
}
IrSender.sendNEC(sAddress & 0xFF, sCommand, 0);
checkReceive(sAddress & 0xFF, sCommand);
}
delay(DELAY_AFTER_SEND); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
Serial.println(F("Send NEC with 16 bit address"));
Serial.flush();
IrSender.sendNEC(sAddress, sCommand, 0);
checkReceive(sAddress, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send NEC2 with 16 bit address"));
Serial.flush();
IrSender.sendNEC2(sAddress, sCommand, 0);
checkReceive(sAddress, sCommand);
delay(DELAY_AFTER_SEND);
#if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604. Code does not fit in program memory of ATtiny85 etc.
if (sAddress == 0xFFF1) {
# if FLASHEND >= 0x7FFF && ((defined(RAMEND) && RAMEND <= 0x6FF) || (defined(RAMSIZE) && RAMSIZE < 0x6FF)) // For 32k flash or more, like Uno. Code does not fit in program memory of ATtiny1604 etc.
/*
* Send constant values only once in this demo
*/
Serial.println(F("Send NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats"));
Serial.flush();
// This is copied to stack/ram internally
IrSender.sendPronto(F("0000 006D 0022 0000 015E 00AB " /* Pronto header + start bit */
"0017 0015 0017 0015 0017 0017 0015 0017 0017 0015 0017 0015 0017 0015 0017 003F " /* Lower address byte */
"0017 003F 0017 003E 0017 003F 0015 003F 0017 003E 0017 003F 0017 003E 0017 0015 " /* Upper address byte (inverted at 8 bit mode) */
"0017 003E 0017 0015 0017 003F 0017 0015 0017 0015 0017 0015 0017 003F 0017 0015 " /* command byte */
"0019 0013 0019 003C 0017 0015 0017 003F 0017 003E 0017 003F 0017 0015 0017 003E " /* inverted command byte */
"0017 0806"), 0); //stop bit, no repeat possible, because of missing repeat pattern
checkReceive(0x80, 0x45);
delay(DELAY_AFTER_SEND);
Serial.println(
F("Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)"));
Serial.flush();
const uint16_t irSignal[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560,
560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690,
560, 560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560,
560, 1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560,
1690, 560, 1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560,
1690/*1111 inverted 0 of command*/, 560 /*stop bit*/}; // Using exact NEC timing
IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array.
checkReceive(0xFB04 & 0xFF, 0x08);
delay(DELAY_AFTER_SEND);
/*
* With sendNECRaw() you can send 32 bit codes directly, i.e. without parity etc.
*/
Serial.println(F("Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)"));
Serial.flush();
IrSender.sendNECRaw(0x03040102, 0);
checkReceive(0x0102, 0x304);
delay(DELAY_AFTER_SEND);
/*
* With Send sendNECMSB() you can send your old 32 bit codes.
* To convert one into the other, you must reverse the byte positions and then reverse all positions of each byte.
* Use bitreverse32Bit().
* Example:
* 0xCB340102 byte reverse -> 0x020134CB bit reverse-> 40802CD3
*/
Serial.println(F("Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)"));
Serial.flush();
IrSender.sendNECMSB(0x40802CD3, 32, false);
checkReceive(0x0102, 0x34);
delay(DELAY_AFTER_SEND);
# endif
# if __INT_WIDTH__ < 32
IRRawDataType tRawData[4] = { 0xB02002, 0xA010, 0x0, 0x0 }; // LSB of tRawData[0] is sent first
# endif
# if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO)
Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants"));
Serial.flush();
# if __INT_WIDTH__ < 32
IrSender.sendPulseDistanceWidthFromArray(&KaseikyoProtocolConstants, &tRawData[0], 48, NO_REPEATS); // Panasonic is a Kaseikyo variant
checkReceive(0x0B, 0x10);
# else
IrSender.sendPulseDistanceWidth(&KaseikyoProtocolConstants, 0xA010B02002, 48, NO_REPEATS); // Panasonic is a Kaseikyo variant
checkReceivedRawData(0xA010B02002);
# endif
delay(DELAY_AFTER_SEND);
/*
* Send 2 Panasonic 48 bit codes as Pulse Distance data, once with LSB and once with MSB first
*/
Serial.println(F("Send Panasonic 0xB, 0x10 as 48 bit PulseDistance"));
Serial.println(F("-LSB first"));
Serial.flush();
# if __INT_WIDTH__ < 32
IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_LSB_FIRST, 0,
NO_REPEATS);
checkReceive(0x0B, 0x10);
# else
IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0xA010B02002, 48, PROTOCOL_IS_LSB_FIRST, 0,
NO_REPEATS);
checkReceivedRawData(0xA010B02002);
# endif
delay(DELAY_AFTER_SEND);
// The same with MSB first. Use bit reversed raw data of LSB first part
Serial.println(F("-MSB first"));
# if __INT_WIDTH__ < 32
tRawData[0] = 0x40040D00; // MSB of tRawData[0] is sent first
tRawData[1] = 0x805;
IrSender.sendPulseDistanceWidthFromArray(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, PROTOCOL_IS_MSB_FIRST, 0,
NO_REPEATS);
checkReceive(0x0B, 0x10);
# else
IrSender.sendPulseDistanceWidth(38, 3450, 1700, 450, 1250, 450, 400, 0x40040D000805, 48, PROTOCOL_IS_MSB_FIRST, 0,
NO_REPEATS);
checkReceivedRawData(0x40040D000805);
# endif
delay(DELAY_AFTER_SEND);
# endif // defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO)
# if defined(DECODE_DISTANCE_WIDTH)
# if defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER)
Serial.println(F("Send 52 bit PulseDistance 0x43D8613C and 0x3BC3B MSB first"));
Serial.flush();
# if __INT_WIDTH__ < 32
tRawData[0] = 0x43D8613C; // MSB of tRawData[0] is sent first
tRawData[1] = 0x3BC3B;
IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0,
NO_REPEATS);
checkReceivedArray(tRawData, 2);
# else
IrSender.sendPulseDistanceWidth(38, 8900, 4450, 550, 1700, 550, 600, 0x43D8613CBC3B, 52, PROTOCOL_IS_MSB_FIRST, 0, NO_REPEATS);
checkReceivedRawData(0x43D8613CBC3B);
# endif
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 52 bit PulseDistanceWidth 0x43D8613C and 0x3BC3B MSB first"));
Serial.flush();
// Real PulseDistanceWidth (constant bit length) does not require a stop bit
# if __INT_WIDTH__ < 32
IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[0], 52, PROTOCOL_IS_MSB_FIRST, 0, 0);
checkReceivedArray(tRawData, 2);
# else
IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, 0x123456789ABC, 52, PROTOCOL_IS_MSB_FIRST, 0, 0);
checkReceivedRawData(0x123456789ABC);
# endif
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 32 bit PulseWidth 0x43D8613C MSB first"));
Serial.flush();
// Real PulseDistanceWidth (constant bit length) does not require a stop bit
IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x43D8613C, 32, PROTOCOL_IS_MSB_FIRST, 0, 0);
checkReceivedRawData(0x43D8613C);
delay(DELAY_AFTER_SEND);
# else // defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER)
Serial.println(F("Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first"));
Serial.flush();
# if __INT_WIDTH__ < 32
tRawData[0] = 0x87654321; // LSB of tRawData[0] is sent first
tRawData[1] = 0xAFEDCBA9;
tRawData[2] = 0x5A;
IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0,
NO_REPEATS);
checkReceivedArray(tRawData, 3);
# else
IRRawDataType tRawData[] = { 0xAFEDCBA987654321, 0x5A }; // LSB of tRawData[0] is sent first
IrSender.sendPulseDistanceWidthFromArray(38, 8900, 4450, 550, 1700, 550, 600, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, 0,
NO_REPEATS);
checkReceivedArray(tRawData, 2);
# endif
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first"));
Serial.flush();
// Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission
# if __INT_WIDTH__ < 32
tRawData[1] = 0xDCBA9;
IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 300, 600, 600, 300, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedArray(tRawData, 2);
# else
IrSender.sendPulseDistanceWidth(38, 300, 600, 300, 600, 600, 300, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedRawData(0xDCBA987654321);
# endif
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first with inverse timing and data"));
Serial.flush();
# if __INT_WIDTH__ < 32
tRawData[2] = ~tRawData[0];
tRawData[3] = ~tRawData[1];
IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 600, 300, 300, 600, &tRawData[2], 52, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedArray(tRawData, 2);
# else
IrSender.sendPulseDistanceWidth(38, 300, 600, 600, 300, 300, 600, ~0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedRawData(0xDCBA987654321);
# endif
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 7 bit ASCII character with PulseDistanceWidth LSB first"));
Serial.flush();
// Real PulseDistanceWidth (constant bit length) does theoretically not require a stop bit, but we know the stop bit from serial transmission
IrSender.sendPulseDistanceWidth(38, 6000, 500, 500, 1500, 1500, 500, sCommand, 7, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedRawData(sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Sony12 as PulseWidth LSB first"));
Serial.flush();
uint32_t tData = (uint32_t) sAddress << 7 | (sCommand & 0x7F);
IrSender.sendPulseDistanceWidth(38, 2400, 600, 1200, 600, 600, 600, tData, SIRCS_12_PROTOCOL, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceive(sAddress & 0x1F, sCommand & 0x7F);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send 32 bit PulseWidth 0x87654321 LSB first"));
Serial.flush();
IrSender.sendPulseDistanceWidth(38, 1000, 500, 600, 300, 300, 300, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, 0, 0);
checkReceivedRawData(0x87654321);
delay(DELAY_AFTER_SEND);
# endif // defined(USE_MSB_DECODING_FOR_DISTANCE_DECODER)
# endif // defined(DECODE_DISTANCE_WIDTH)
# if defined(DECODE_MAGIQUEST)
Serial.println(F("Send MagiQuest 0x6BCDFF00, 0x176 as 55 bit PulseDistanceWidth MSB first"));
Serial.flush();
# if __INT_WIDTH__ < 32
tRawData[0] = 0x01AF37FC; // We have 1 header (start) bit and 7 start bits and 31 address bits for MagiQuest, so 0x6BCDFF00 is shifted 2 left
tRawData[1] = 0x017619; // We send only 23 bits here! 0x19 is the checksum
IrSender.sendPulseDistanceWidthFromArray(38, 287, 864, 576, 576, 287, 864, &tRawData[0], 55,
PROTOCOL_IS_MSB_FIRST | SUPPRESS_STOP_BIT, 0, 0);
# else
// 0xD79BFE00 is 0x6BCDFF00 is shifted 1 left
IrSender.sendPulseDistanceWidth(38, 287, 864, 576, 576, 287, 864, 0xD79BFE017619, 55, PROTOCOL_IS_MSB_FIRST, 0, 0);
# endif
checkReceive(0xFF00, 0x176);
if (IrReceiver.decodedIRData.decodedRawData != 0x6BCDFF00) {
Serial.print(F("ERROR: Received address=0x"));
#if (__INT_WIDTH__ < 32)
Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX);
#else
PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX);
#endif
Serial.println(F(" != sent address=0x6BCDFF00"));
Serial.println();
}
delay(DELAY_AFTER_SEND);
# endif // defined(DECODE_MAGIQUEST)
}
#endif // if FLASHEND >= 0x3FFF
Serial.println(F("Send Onkyo (NEC with 16 bit command)"));
Serial.flush();
IrSender.sendOnkyo(sAddress, (sCommand + 1) << 8 | sCommand, 0);
checkReceive(sAddress, (sCommand + 1) << 8 | sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Apple"));
Serial.flush();
IrSender.sendApple(sAddress & 0xFF, sCommand, 0);
checkReceive(sAddress & 0xFF, sCommand);
delay(DELAY_AFTER_SEND);
#if defined(DECODE_PANASONIC) || defined(DECODE_KASEIKYO)
Serial.println(F("Send Panasonic"));
Serial.flush();
IrSender.sendPanasonic(sAddress & 0xFFF, sCommand, 0);
checkReceive(sAddress & 0xFFF, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Kaseikyo with 0x4711 as Vendor ID"));
Serial.flush();
IrSender.sendKaseikyo(sAddress & 0xFFF, sCommand, 0, 0x4711);
checkReceive(sAddress & 0xFFF, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Kaseikyo_Denon variant"));
Serial.flush();
IrSender.sendKaseikyo_Denon(sAddress & 0xFFF, sCommand, 0);
checkReceive(sAddress & 0xFFF, sCommand);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_DENON)
Serial.println(F("Send Denon"));
Serial.flush();
IrSender.sendDenon(sAddress & 0x1F, sCommand, 0);
checkReceive(sAddress & 0x1F, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Denon/Sharp variant"));
Serial.flush();
IrSender.sendSharp(sAddress & 0x1F, sCommand, 0);
checkReceive(sAddress & 0x1F, sCommand);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_SONY)
Serial.println(F("Send Sony/SIRCS with 7 command and 5 address bits"));
Serial.flush();
IrSender.sendSony(sAddress & 0x1F, sCommand, 0); // SIRCS_12_PROTOCOL is default
checkReceive(sAddress & 0x1F, sCommand & 0x7F);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Sony/SIRCS with 7 command and 8 address bits"));
Serial.flush();
IrSender.sendSony(sAddress & 0xFF, sCommand, 0, SIRCS_15_PROTOCOL);
checkReceive(sAddress & 0xFF, sCommand & 0x7F);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Sony/SIRCS with 7 command and 13 address bits"));
Serial.flush();
IrSender.sendSony(sAddress & 0x1FFF, sCommand, 0, SIRCS_20_PROTOCOL);
checkReceive(sAddress & 0x1FFF, sCommand & 0x7F);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_SAMSUNG)
Serial.println(F("Send Samsung 8 bit command and 8 bit address"));
Serial.flush();
IrSender.sendSamsung(sAddress & 0xFF, sCommand, 0);
checkReceive(sAddress & 0xFF, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Samsung 16 bit command and address"));
Serial.flush();
IrSender.sendSamsung16BitAddressAndCommand(sAddress, s16BitCommand, 0);
checkReceive(sAddress, s16BitCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send Samsung48 16 bit command"));
Serial.flush();
IrSender.sendSamsung48(sAddress, s16BitCommand, 0);
checkReceive(sAddress, s16BitCommand);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_RC5)
Serial.println(F("Send RC5"));
Serial.flush();
IrSender.sendRC5(sAddress & 0x1F, sCommand & 0x3F, 0, true); // 5 address, 6 command bits
checkReceive(sAddress & 0x1F, sCommand & 0x3F);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send RC5X with 7.th MSB of command set"));
Serial.flush();
IrSender.sendRC5(sAddress & 0x1F, (sCommand & 0x3F) + 0x40, 0, true); // 5 address, 7 command bits
checkReceive(sAddress & 0x1F, (sCommand & 0x3F) + 0x40);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_RC6)
Serial.println(F("Send RC6"));
Serial.flush();
sLastSendToggleValue = sAddress & 0x01; // to modify toggling at each loop
IrSender.sendRC6(sAddress & 0xFF, sCommand, 0, true);
checkReceive(sAddress & 0xFF, sCommand);
delay(DELAY_AFTER_SEND);
Serial.println(F("Send RC6A with 14 bit 0x2711 as extra"));
Serial.flush();
IrSender.sendRC6A(sAddress & 0xFF, sCommand, 0, 0x2711, true);
checkReceive(sAddress & 0xFF, sCommand);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_BEO)
Serial.println(F("Send Bang&Olufsen"));
Serial.flush();
IrSender.sendBangOlufsen(sAddress & 0x0FF, sCommand, 0);
# if defined(ENABLE_BEO_WITHOUT_FRAME_GAP)
delay((RECORD_GAP_MICROS / 1000) + 1);
Serial.println(F("- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled"));
Serial.println(F("- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0"));
IrReceiver.printIRResultRawFormatted(&Serial, true);
uint8_t tOriginalRawlen = IrReceiver.decodedIRData.rawDataPtr->rawlen;
IrReceiver.decodedIRData.rawDataPtr->rawlen = 6;
/*
* decode first part / AGC part of frame
*/
IrReceiver.decode(); // sets IrReceiver.decodedIRData.rawlen to 6
IrReceiver.printIRResultShort(&Serial); // -> Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first
// Remove trailing 6 entries for second decode try
Serial.println();
Serial.println(
F(
"- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode"));
IrReceiver.decodedIRData.rawlen = tOriginalRawlen - 6;
IrReceiver.decodedIRData.rawDataPtr->rawlen = tOriginalRawlen - 6;
for (uint_fast8_t i = 0; i < IrReceiver.decodedIRData.rawlen; ++i) {
IrReceiver.decodedIRData.rawDataPtr->rawbuf[i] = IrReceiver.decodedIRData.rawDataPtr->rawbuf[i + 6];
}
# endif
checkReceive(sAddress & 0x0FF, sCommand);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_MAGIQUEST)
Serial.println(F("Send MagiQuest"));
Serial.flush();
IrSender.sendMagiQuest(0x6BCD0000 | (uint32_t) sAddress, s16BitCommand); // we have 31 bit address
checkReceive(sAddress, s16BitCommand & 0x1FF); // we have 9 bit command
delay(DELAY_AFTER_SEND);
#endif
/*
* Next example how to use the IrSender.write function
*/
IRData IRSendData;
// prepare data
IRSendData.address = sAddress;
IRSendData.command = sCommand;
IRSendData.flags = IRDATA_FLAGS_EMPTY;
Serial.println(F("Send next protocols with IrSender.write"));
Serial.println();
Serial.flush();
#if defined(DECODE_JVC)
IRSendData.protocol = JVC; // switch protocol
Serial.print(F("Send "));
Serial.println(getProtocolString(IRSendData.protocol));
Serial.flush();
IrSender.write(&IRSendData, 0);
checkReceive(IRSendData.address & 0xFF, IRSendData.command);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_LG) || defined(DECODE_MAGIQUEST)
IRSendData.command = s16BitCommand; // LG support more than 8 bit command
#endif
#if defined(DECODE_LG)
IRSendData.protocol = LG;
Serial.print(F("Send "));
Serial.println(getProtocolString(IRSendData.protocol));
Serial.flush();
IrSender.write(&IRSendData, 0);
checkReceive(IRSendData.address & 0xFF, IRSendData.command);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_BOSEWAVE)
IRSendData.protocol = BOSEWAVE;
Serial.println(F("Send Bosewave with no address and 8 command bits"));
Serial.flush();
IrSender.write(&IRSendData, 0);
checkReceive(0, IRSendData.command & 0xFF);
delay(DELAY_AFTER_SEND);
#endif
#if defined(DECODE_FAST)
IRSendData.protocol = FAST;
Serial.print(F("Send "));
Serial.println(getProtocolString(IRSendData.protocol));
Serial.flush();
IrSender.write(&IRSendData, 0);
checkReceive(0, IRSendData.command & 0xFF);
delay(DELAY_AFTER_SEND);
#endif
/*
* LEGO is skipped, since it is difficult to receive because of its short marks and spaces
*/
// Serial.println(F("Send Lego with 2 channel and with 4 command bits"));
// Serial.flush();
// IrSender.sendLegoPowerFunctions(sAddress, sCommand, LEGO_MODE_COMBO, true);
// checkReceive(sAddress, sCommand); // never has success for Lego protocol :-(
// delay(DELAY_AFTER_SEND);
/*
* Force buffer overflow
*/
Serial.println(F("Force buffer overflow by sending 450 marks and spaces"));
for (unsigned int i = 0; i < 225; ++i) {
// 400 + 400 should be received as 8/8 and sometimes as 9/7 or 7/9 if compensation by MARK_EXCESS_MICROS is optimal.
// 210 + 540 = 750 should be received as 5/10 or 4/11 if compensation by MARK_EXCESS_MICROS is optimal.
IrSender.mark(210); // 8 pulses at 38 kHz
IrSender.space(540); // to fill up to 750 us
}
checkReceive(sAddress, sCommand);
delay(DELAY_AFTER_SEND);
/*
* Increment values
* Also increment address just for demonstration, which normally makes no sense
*/
sAddress += 0x0101;
sCommand += 0x11;
s16BitCommand += 0x1111;
sRepeats++;
// clip repeats at 4
if (sRepeats > 4) {
sRepeats = 4;
}
/*
* Test stop and start of 50 us receiver timer
*/
Serial.println(F("Stop receiver"));
IrReceiver.stop();
delay(DELAY_AFTER_LOOP); // additional delay at the end of each loop
Serial.println(F("Start receiver"));
IrReceiver.start(); // For ESP32 timerEnableReceiveInterrupt() is sufficient here, since timer is not reconfigured by another task
}
@@ -0,0 +1,851 @@
START ../src/UnitTest.cpp from Jun 22 2024
Using library version 4.4.0
Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Bang & Olufsen, FAST, Bosewave, MagiQuest, Universal Pulse Distance Width, Hash at pin 2
Use ReceiveCompleteCallback
Receive buffer length is 200
Send IR signals at pin 3
If you connect debug pin 5 to ground, raw data is always printed
Send signal mark duration for 38kHz is 8 us, pulse narrowing correction is 3000 ns, total period is 26 us
16000 us is the (minimum) gap, after which the start of a new IR packet is assumed
20 us are subtracted from all marks and added to all spaces for decoding
address=0xFFF1 command=0x76
Send NEC with 8 bit address
Protocol=NEC Address=0xF1 Command=0x76 Raw-Data=0x89760EF1 32 bits LSB first
Send with: IrSender.sendNEC(0xF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1049200
+8900,-445
+ 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650
+ 600
Sum: 67800
Send NEC with 16 bit address
Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first
Send with: IrSender.sendNEC(0xFFF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1058500
+8950,-4450
+ 550,-1650 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,-1600
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 600
Sum: 73350
Send NEC2 with 16 bit address
Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first
Send with: IrSender.sendNEC(0xFFF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1059050
+8950,-4400
+ 600,-1600 + 600,- 550 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600
+ 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600
+ 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600
+ 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,- 550 + 600,- 550 + 600,-1600
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 600
Sum: 73300
Send Panasonic 0xB, 0x10 as 48 bit PulseDistance using ProtocolConstants
Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first
Send with: IrSender.sendPanasonic(0xB, 0x10, <numberOfRepeats>);
rawData[100]:
-1062700
+3450,-1700
+ 450,- 450 + 450,-1250 + 450,- 400 + 500,- 400
+ 450,- 400 + 450,- 450 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,- 400 + 450,- 450 + 450,- 400
+ 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400
+ 450,- 400 + 450,- 450 + 450,- 400 + 450,- 400
+ 500,-1250 + 450,-1250 + 450,- 450 + 450,-1250
+ 450,- 400 + 450,- 450 + 450,- 400 + 450,- 400
+ 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400
+ 450,- 400 + 500,- 400 + 450,- 400 + 450,- 400
+ 500,-1250 + 450,- 400 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,- 400 + 450,- 450 + 450,- 400
+ 450,- 400 + 500,-1250 + 450,- 400 + 500,-1250
+ 450
Sum: 54150
Send Panasonic 0xB, 0x10 as 48 bit PulseDistance
-LSB first
Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first
Send with: IrSender.sendPanasonic(0xB, 0x10, <numberOfRepeats>);
rawData[100]:
-1079300
+3450,-1650
+ 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,-1200 + 500,-1200 + 500,- 350 + 500,-1200
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 400 + 450,- 400
+ 450,- 400 + 450,- 400 + 450,- 350 + 500,- 350
+ 500,-1200 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 400 + 450,-1200 + 500,- 350 + 500,-1200
+ 500
Sum: 53200
-MSB first
Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B0 48 bits LSB first
Send with: IrSender.sendPanasonic(0xB, 0x10, <numberOfRepeats>);
rawData[100]:
-1074200
+3450,-1650
+ 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,-1200 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,-1200 + 500,-1200 + 500,- 350 + 500,-1200
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 400
+ 450,- 400 + 450,- 400 + 450,- 400 + 450,- 350
+ 500,-1200 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 350 + 500,- 350 + 500,- 350 + 500,- 350
+ 500,- 400 + 450,-1200 + 500,- 350 + 500,-1200
+ 500
Sum: 53200
Send 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first
Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first
Send on a 8 bit platform with:
uint32_t tRawData[]={0x87654321, 0xAFEDCBA9, 0x5A};
IrSender.sendPulseDistanceWidthFromArray(38, 8850, 4400, 600, 1650, 600, 550, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[148]:
-1079150
+8850,-4400
+ 550,-1650 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,-1650 + 600,- 550 + 600,- 550
+ 600,-1650 + 600,-1650 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,-1650 + 600,- 550
+ 600,-1650 + 600,- 550 + 600,-1650 + 600,- 550
+ 600,- 550 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 600,-1650
+ 600,-1650 + 600,- 550 + 600,- 550 + 600,-1650
+ 600,- 550 + 600,-1650 + 600,- 550 + 600,-1650
+ 600,-1650 + 600,-1650 + 600,- 550 + 600,-1650
+ 600,- 550 + 600,- 550 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,- 550 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,-1650 + 550,-1650 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,-1650 + 600,- 550 + 600,-1700
+ 550,- 550 + 600,-1650 + 600,- 550 + 600,-1650
+ 600,-1650 + 600,- 550 + 600,-1650 + 600,- 550
+ 600
Sum: 138350
Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first
Protocol=PulseDistance Raw-Data=0xDCBA9 52 bits LSB first
Send on a 8 bit platform with:
uint32_t tRawData[]={0x87654321, 0xDCBA9};
IrSender.sendPulseDistanceWidthFromArray(38, 300, 600, 350, 550, 650, 250, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[108]:
-1116150
+ 300,- 600
+ 350,- 550 + 650,- 250 + 650,- 250 + 650,- 250
+ 650,- 250 + 350,- 550 + 650,- 250 + 650,- 250
+ 350,- 600 + 300,- 600 + 650,- 250 + 650,- 250
+ 650,- 250 + 650,- 250 + 350,- 550 + 650,- 250
+ 350,- 600 + 600,- 250 + 350,- 600 + 600,- 250
+ 650,- 250 + 350,- 600 + 350,- 550 + 600,- 300
+ 350,- 550 + 350,- 550 + 350,- 550 + 650,- 250
+ 650,- 250 + 650,- 250 + 650,- 250 + 350,- 600
+ 350,- 550 + 650,- 250 + 650,- 250 + 350,- 550
+ 650,- 250 + 350,- 600 + 600,- 300 + 350,- 550
+ 350,- 550 + 350,- 550 + 650,- 250 + 350,- 550
+ 650,- 250 + 650,- 250 + 350,- 550 + 350,- 600
+ 350,- 550 + 600,- 300 + 350,- 550 + 350,- 550
+ 350
Sum: 48300
Send 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first with inverse timing and data
Protocol=PulseDistance Raw-Data=0xDCBA9 52 bits LSB first
Send on a 8 bit platform with:
uint32_t tRawData[]={0x87654321, 0xDCBA9};
IrSender.sendPulseDistanceWidthFromArray(38, 350, 550, 350, 550, 600, 300, &tRawData[0], 52, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[108]:
-1095900
+ 350,- 550
+ 350,- 550 + 650,- 250 + 650,- 250 + 650,- 250
+ 650,- 250 + 350,- 600 + 600,- 300 + 600,- 300
+ 350,- 550 + 350,- 550 + 600,- 300 + 600,- 300
+ 600,- 300 + 600,- 300 + 300,- 600 + 600,- 300
+ 350,- 550 + 600,- 300 + 350,- 550 + 600,- 300
+ 600,- 300 + 350,- 550 + 350,- 550 + 650,- 250
+ 350,- 550 + 350,- 600 + 300,- 600 + 600,- 300
+ 600,- 300 + 600,- 250 + 650,- 300 + 300,- 600
+ 350,- 550 + 650,- 250 + 650,- 250 + 350,- 600
+ 600,- 300 + 350,- 550 + 600,- 300 + 350,- 550
+ 350,- 550 + 350,- 550 + 650,- 250 + 350,- 550
+ 650,- 250 + 650,- 250 + 350,- 550 + 350,- 550
+ 350,- 600 + 600,- 250 + 400,- 550 + 300,- 600
+ 600
Sum: 48500
Send ASCII 7 bit PulseDistanceWidth LSB first
Protocol=PulseDistance Raw-Data=0x76 7 bits LSB first
Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 5950, 500, 550, 1450, 1550, 500, 0x76, 7, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[18]:
-1092450
+5950,- 500
+1500,- 500 + 500,-1450 + 550,-1450 +1550,- 450
+ 550,-1450 + 550,-1450 + 550,-1450 + 550
Sum: 20950
Send Sony12 as PulseWidth LSB first
Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first
Send with: IrSender.sendSony(0x11, 0x76, 2, 12);
rawData[26]:
-1036550
+2450,- 600
+ 600,- 550 +1250,- 550 +1250,- 550 + 650,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550
+ 650,- 550 + 650,- 550 + 650,- 550 +1250
Sum: 21050
Send 32 bit PulseWidth 0x87654321 LSB first
Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first
Send on a 8 bit platform with: IrSender.sendPulseDistanceWidth(38, 1050, 500, 650, 250, 350, 250, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[66]:
-1036150
+1050,- 500
+ 600,- 300 + 350,- 250 + 350,- 250 + 350,- 250
+ 350,- 300 + 600,- 300 + 350,- 250 + 350,- 250
+ 650,- 250 + 650,- 250 + 350,- 300 + 350,- 250
+ 350,- 250 + 350,- 300 + 600,- 300 + 300,- 300
+ 600,- 300 + 350,- 250 + 600,- 300 + 350,- 250
+ 350,- 250 + 650,- 250 + 650,- 250 + 350,- 250
+ 650,- 250 + 650,- 250 + 650,- 250 + 350,- 300
+ 350,- 250 + 350,- 250 + 350,- 250 + 650
Sum: 24600
Send MagiQuest 0x6BCDFF00, 0x176 as 55 bit PulseDistanceWidth MSB first
Protocol=MagiQuest Address=0xFF00 Command=0x176 Raw-Data=0x6BCDFF00 56 bits MSB first
Send with: IrSender.sendMagiQuest(0x6BCDFF00, 0x176, <numberOfRepeats>);
rawData[112]:
-1065600
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800
+ 600,- 550 + 600,- 550 + 350,- 800 + 600,- 550
+ 350,- 800 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 350,- 800 + 350,- 800 + 600,- 550
+ 600,- 550 + 350,- 800 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 300,- 850
+ 350,- 850 + 300,- 850 + 300,- 800 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 600,- 550
+ 350,- 800 + 650,- 500 + 600,- 600 + 550,- 550
+ 300,- 850 + 600,- 550 + 600,- 550 + 350,- 800
+ 300,- 850 + 350,- 800 + 350,- 800 + 600,- 550
+ 600,- 550 + 350,- 800 + 350,- 800 + 600
Sum: 63850
Send Onkyo (NEC with 16 bit command)
Protocol=Onkyo Address=0xFFF1 Command=0x7776 Raw-Data=0x7776FFF1 32 bits LSB first
Send with: IrSender.sendOnkyo(0xFFF1, 0x7776, <numberOfRepeats>);
rawData[68]:
-1084150
+8950,-4400
+ 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1600 + 650,-1600 + 600,-1650 + 600,-1650
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550
+ 600
Sum: 76750
Send Apple
Protocol=Apple Address=0xF1 Command=0x76 Raw-Data=0xF17687EE 32 bits LSB first
Send with: IrSender.sendApple(0xF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1058150
+8900,-4450
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,-1600
+ 600,- 550 + 600,-1650 + 600,-1600 + 600,-1650
+ 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 550 + 600,-1600
+ 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600
Sum: 72200
Send Panasonic
Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first
Send with: IrSender.sendPanasonic(0xFF1, 0x76, <numberOfRepeats>);
rawData[100]:
-1057800
+3450,-1700
+ 450,- 400 + 500,-1250 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
+ 450,- 450 + 450,- 400 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400
+ 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400
+ 450,-1250 + 450,- 450 + 450,- 400 + 450,- 400
+ 450,-1300 + 450,-1250 + 450,-1300 + 450,-1250
+ 500,-1250 + 450,-1250 + 500,-1250 + 450,-1300
+ 450,- 400 + 450,-1250 + 450,-1300 + 450,- 400
+ 450,-1250 + 450,-1300 + 450,-1250 + 500,- 400
+ 450,-1250 + 450,- 450 + 450,- 400 + 450,-1250
+ 450,-1300 + 450,- 400 + 450,- 400 + 500,-1250
+ 450
Sum: 64400
Send Kaseikyo with 0x4711 as Vendor ID
Protocol=Kaseikyo Address=0xFF1 Command=0x76 Extra=0x4711 Raw-Data=0x9A76FF13 48 bits LSB first
Send with: IrSender.sendKaseikyo(0xFF1, 0x76, <numberOfRepeats>, 0x4711);
rawData[100]:
-1078000
+3450,-1700
+ 450,-1250 + 450,- 450 + 450,- 400 + 450,- 450
+ 450,-1250 + 450,- 400 + 500,- 400 + 450,- 400
+ 450,-1300 + 450,-1250 + 450,-1300 + 450,- 400
+ 450,- 400 + 450,- 450 + 450,-1250 + 450,- 450
+ 450,-1250 + 450,-1300 + 450,- 400 + 450,- 400
+ 500,-1250 + 450,- 400 + 450,- 450 + 450,- 400
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300
+ 450,- 400 + 450,-1300 + 450,-1250 + 450,- 450
+ 450,-1250 + 450,-1250 + 500,-1250 + 450,- 400
+ 450,- 400 + 500,-1250 + 450,- 400 + 450,-1300
+ 450,-1250 + 450,- 450 + 450,- 400 + 450,-1250
+ 500
Sum: 69550
Send Kaseikyo_Denon variant
Protocol=Kaseikyo_Denon Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first
Send with: IrSender.sendKaseikyo_Denon(0xFF1, 0x76, <numberOfRepeats>);
rawData[100]:
-1078750
+3450,-1700
+ 500,- 400 + 450,- 400 + 450,-1300 + 450,- 400
+ 450,-1250 + 500,- 400 + 450,-1250 + 500,- 400
+ 450,- 400 + 450,-1250 + 450,- 450 + 450,- 400
+ 450,-1300 + 450,-1250 + 450,- 400 + 500,- 400
+ 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
+ 450,-1300 + 450,- 400 + 450,- 400 + 450,- 450
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,-1300
+ 450,- 400 + 450,-1300 + 450,-1250 + 450,- 400
+ 500,-1250 + 450,-1250 + 500,-1250 + 450,- 400
+ 500,-1250 + 450,- 400 + 450,- 400 + 450,-1300
+ 450,-1250 + 450,- 400 + 500,- 400 + 450,-1250
+ 500
Sum: 67850
Send Denon
Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0xED1 15 bits LSB first
Send with: IrSender.sendDenon(0x11, 0x76, <numberOfRepeats>);
rawData[32]:
-1076500
+ 300,-1750 + 300,- 750 + 300,- 750 + 300,- 750
+ 300,-1750 + 300,- 750 + 300,-1800 + 250,-1800
+ 300,- 750 + 300,-1750 + 300,-1800 + 300,-1750
+ 300,- 750 + 300,- 750 + 300,- 750 + 300
Sum: 23150
Send Denon/Sharp variant
Protocol=Sharp Address=0x11 Command=0x76 Raw-Data=0x4ED1 15 bits LSB first
Send with: IrSender.sendSharp(0x11, 0x76, <numberOfRepeats>);
rawData[32]:
-1018700
+ 300,-1800 + 300,- 750 + 300,- 700 + 300,- 750
+ 300,-1800 + 250,- 750 + 300,-1800 + 250,-1800
+ 300,- 750 + 300,-1750 + 300,-1800 + 300,-1750
+ 300,- 750 + 300,- 750 + 300,-1750 + 300
Sum: 24150
Send Sony/SIRCS with 7 command and 5 address bits
Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first
Send with: IrSender.sendSony(0x11, 0x76, 2, 12);
rawData[26]:
-1020900
+2450,- 550
+ 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550
+ 650,- 550 + 650,- 550 + 650,- 550 +1250
Sum: 21050
Send Sony/SIRCS with 7 command and 8 address bits
Protocol=Sony Address=0xF1 Command=0x76 Raw-Data=0x78F6 15 bits LSB first
Send with: IrSender.sendSony(0xF1, 0x76, 2, 15);
rawData[32]:
-1036650
+2450,- 550
+ 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550
+ 650,- 550 + 650,- 550 + 650,- 550 +1250,- 550
+1250,- 550 +1250,- 550 +1250
Sum: 26450
Send Sony/SIRCS with 7 command and 13 address bits
Protocol=Sony Address=0x1FF1 Command=0x76 Raw-Data=0xFF8F6 20 bits LSB first
Send with: IrSender.sendSony(0x1FF1, 0x76, 2, 20);
rawData[42]:
-1040400
+2400,- 550
+ 650,- 550 +1250,- 550 +1250,- 550 + 650,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550
+ 650,- 550 + 600,- 600 + 650,- 550 +1250,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250,- 550
+1250,- 550 +1250,- 550 +1250,- 550 +1250
Sum: 35400
Send Samsung 8 bit command and 8 bit address
Protocol=Samsung Address=0xF1 Command=0x76 Raw-Data=0x8976F1F1 32 bits LSB first
Send with: IrSender.sendSamsung(0xF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1045200
+4500,-4400
+ 600,-1650 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600
+ 600,-1650 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1600 + 650,- 500
+ 600,-1650 + 600,- 500 + 600,- 550 + 600,-1600
+ 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600
Sum: 65550
Send Samsung 16 bit command and address
Protocol=Samsung Address=0xFFF1 Command=0x9876 Raw-Data=0x9876FFF1 32 bits LSB first
Send with: IrSender.sendSamsung(0xFFF1, 0x9876, <numberOfRepeats>);
rawData[68]:
-1060350
+4500,-4450
+ 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1650 + 550,-1650 + 600,-1650
+ 600,-1650 + 600,-1600 + 650,-1600 + 600,-1650
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,-1600 + 600,-1650 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,-1650 + 600,- 550 + 600,- 500 + 600,-1650
+ 600
Sum: 68950
Send Samsung48 16 bit command
Protocol=Samsung48 Address=0xFFF1 Command=0x9876 Raw-Data=0x6798 48 bits LSB first
Send with: IrSender.sendSamsung48(0xFFF1, 0x9876, <numberOfRepeats>);
rawData[100]:
-1060250
+4500,-4450
+ 600,-1600 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550
+ 600,-1650 + 600,- 500 + 600,- 550 + 600,-1650
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,-1700
+ 550,- 550 + 600,- 500 + 600,- 550 + 600,-1650
+ 600,-1600 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550
+ 600,- 500 + 600,-1650 + 600,-1650 + 600,- 500
+ 600
Sum: 95800
Send RC5
Protocol=RC5 Address=0x11 Command=0x36 Raw-Data=0x1476 13 bits MSB first
Send with: IrSender.sendRC5(0x11, 0x36, <numberOfRepeats>);
rawData[20]:
-1076800
+ 900,- 900
+1800,-1750 +1800,- 850 + 950,- 850 + 900,-1750
+ 900,- 850 + 950,- 850 +1800,-1750 + 900,- 900
+1800
Sum: 23150
Send RC5X with 7.th MSB of command set
Protocol=RC5 Address=0x11 Command=0x76 Toggle=1 Raw-Data=0xC76 13 bits MSB first
Send with: IrSender.sendRC5(0x11, 0x76, <numberOfRepeats>);
rawData[20]:
-1035650
+1800,-1700
+ 950,- 850 +1800,- 850 + 950,- 850 + 900,-1750
+ 950,- 850 + 900,- 850 +1800,-1750 + 950,- 850
+1800
Sum: 23100
Send RC6
Protocol=RC6 Address=0xF1 Command=0x76 Raw-Data=0xF176 20 bits MSB first
Send with: IrSender.sendRC6(0xF1, 0x76, <numberOfRepeats>);
rawData[36]:
-1033000
+2650,- 850
+ 500,- 850 + 500,- 400 + 500,- 400 + 500,- 850
+1350,- 450 + 450,- 400 + 500,- 400 + 500,- 850
+ 500,- 400 + 500,- 400 + 950,- 850 + 950,- 400
+ 500,- 400 + 500,- 850 + 950,- 400 + 500,- 850
+ 500
Sum: 23300
Send RC6A with 14 bit 0x2711 as extra
Protocol=RC6A Address=0xF1 Command=0x76 Extra=0x2711 Toggle=1 Raw-Data=0xA711F176 35 bits MSB first
Send with: IrSender.sendRC6A(0xF1, 0x76, <numberOfRepeats>, 0x2711);
rawData[58]:
-1032900
+2650,- 900
+ 450,- 450 + 450,- 450 + 450,- 850 +1400,-1300
+ 950,- 850 + 500,- 400 + 950,- 400 + 500,- 450
+ 450,- 850 + 500,- 400 + 500,- 400 + 950,- 850
+ 500,- 400 + 500,- 400 + 950,- 450 + 450,- 450
+ 450,- 450 + 450,- 400 + 500,- 850 + 500,- 400
+ 500,- 400 + 950,- 850 + 950,- 400 + 500,- 400
+ 500,- 850 + 950,- 450 + 450,- 850 + 500
Sum: 36850
Send Bang&Olufsen
- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled
- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0
rawData[36]:
-1033000
+ 250,-2850
+ 250,-2850 + 250,-15250 + 250,-2850 + 250,-9050
+ 250,-6000 + 200,-5950 + 250,-6000 + 200,-2900
+ 250,-5950 + 200,-6000 + 200,-9050 + 250,-2900
+ 250,-9000 + 250,-6000 + 250,-5950 + 250,-2850
+ 250
Sum: 105700
Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first
- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode
Protocol=Bang&Olufsen Address=0xF1 Command=0x76 Raw-Data=0xF176 16 bits MSB first
Send with: IrSender.sendBang&Olufsen(0xF1, 0x76, <numberOfRepeats>);
rawData[38]:
-15250
+ 250,-2850
+ 250,-9050 + 250,-6000 + 200,-5950 + 250,-6000
+ 200,-2900 + 250,-5950 + 200,-6000 + 200,-9050
+ 250,-2900 + 250,-9000 + 250,-6000 + 250,-5950
+ 250,-2850 + 250,-9100 + 200,-5950 + 250,-2900
+ 200,-12150 + 250
Sum: 115000
Send MagiQuest
Protocol=MagiQuest Address=0xFFF1 Command=0x76 Raw-Data=0x6BCDFFF1 56 bits MSB first
Send with: IrSender.sendMagiQuest(0x6BCDFFF1, 0x76, <numberOfRepeats>);
rawData[112]:
-1088700
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 850
+ 600,- 550 + 600,- 550 + 300,- 850 + 600,- 550
+ 300,- 800 + 650,- 500 + 650,- 500 + 600,- 550
+ 600,- 550 + 350,- 800 + 350,- 800 + 600,- 550
+ 600,- 550 + 350,- 800 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 600,- 550 + 600,- 550 + 350,- 800
+ 350,- 800 + 350,- 800 + 600,- 600 + 300,- 850
+ 300,- 800 + 650,- 550 + 600,- 550 + 600,- 550
+ 300,- 800 + 600,- 550 + 600,- 550 + 350,- 850
+ 300,- 800 + 350,- 800 + 600,- 550 + 600,- 550
+ 350,- 800 + 600,- 550 + 600,- 550 + 600
Sum: 63850
Send next protocols with IrSender.write
Send JVC
Protocol=JVC Address=0xF1 Command=0x76 Raw-Data=0x76F1 16 bits LSB first
Send with: IrSender.sendJVC(0xF1, 0x76, <numberOfRepeats>);
rawData[36]:
-1085250
+8400,-4150
+ 550,-1550 + 550,- 500 + 550,- 500 + 550,- 500
+ 550,-1550 + 550,-1550 + 550,-1550 + 550,-1550
+ 550,- 500 + 550,-1550 + 550,-1550 + 550,- 500
+ 550,-1550 + 550,-1550 + 550,-1550 + 550,- 500
+ 550
Sum: 40400
Send LG
Protocol=LG Address=0xF1 Command=0x9876 Raw-Data=0xF19876E 28 bits MSB first
Send with: IrSender.sendLG(0xF1, 0x9876, <numberOfRepeats>);
rawData[60]:
-1039450
+8950,-4150
+ 550,-1550 + 500,-1550 + 500,-1550 + 550,-1550
+ 500,- 550 + 500,- 550 + 500,- 550 + 500,-1550
+ 550,-1550 + 500,- 550 + 500,- 550 + 500,-1550
+ 550,-1550 + 500,- 550 + 500,- 550 + 500,- 550
+ 500,- 500 + 550,-1550 + 500,-1550 + 550,-1550
+ 500,- 550 + 500,-1550 + 550,-1550 + 500,- 550
+ 500,-1550 + 550,-1550 + 500,-1550 + 550,- 500
+ 550
Sum: 59400
Send Bosewave with no address and 8 command bits
Protocol=BoseWave Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first
Send with: IrSender.sendBoseWave(0x0, 0x76, <numberOfRepeats>);
rawData[36]:
-1056200
+1050,-1450
+ 550,- 450 + 550,-1400 + 550,-1450 + 550,- 450
+ 550,-1400 + 550,-1450 + 550,-1400 + 550,- 450
+ 550,-1450 + 550,- 450 + 550,- 400 + 550,-1450
+ 550,- 450 + 550,- 450 + 550,- 450 + 550,-1400
+ 550
Sum: 26800
Send FAST
Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first
Send with: IrSender.sendFAST(0x0, 0x76, <numberOfRepeats>);
rawData[36]:
-1040250
+2150,-1000
+ 550,- 550 + 550,-1550 + 550,-1500 + 550,- 550
+ 550,-1550 + 550,-1550 + 550,-1550 + 500,- 550
+ 550,-1550 + 550,- 500 + 550,- 500 + 550,-1550
+ 550,- 500 + 550,- 500 + 550,- 500 + 550,-1550
+ 550
Sum: 28950
Force buffer overflow by sending 280 marks and spaces
Overflow
Try to increase the "RAW_BUFFER_LENGTH" value of 200 in ../src/UnitTest.cpp
rawData[200]:
-1039500
+ 200,- 500
+ 250,- 550 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 550
+ 200,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250,- 500 + 250,- 500
+ 250,- 500 + 250,- 500 + 250
Sum: 74500
ERROR: Unknown protocol
address=0xF2 command=0x87
Send NEC with 8 bit address and complete NEC frames as repeats to force decoding as NEC2
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-3276750
+8950,-4400
+ 600,- 550 + 600,-1600 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600
+ 600,-1650 + 600,- 550 + 600,-1600 + 650,-1600
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650
+ 550,- 550 + 600,- 500 + 650,- 500 + 600,-1650
+ 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550
+ 600
Sum: 67800
Protocol=NEC2 Address=0xF2 Command=0x87 Repeat gap=65900us Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC2(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-65900
+8900,-4450
+ 550,- 550 + 600,-1650 + 600,- 500 + 600,- 550
+ 600,-1600 + 650,-1600 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,- 500 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 500
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 600
Sum: 67750
Send NEC with 16 bit address
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1060150
+8900,-4450
+ 600,- 500 + 600,-1650 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1600 + 650,-1600
+ 600,-1650 + 600,- 550 + 600,-1600 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 600
Sum: 67800
Send NEC2 with 16 bit address
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1058650
+8900,-4400
+ 650,- 500 + 600,-1650 + 600,- 500 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,-1600 + 650,- 500 + 600,-1650 + 600,-1600
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,- 550
+ 600,-1600 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 650,-1600 + 600,-1650 + 600,-1650 + 600,- 500
+ 600
Sum: 67750
Send Onkyo (NEC with 16 bit command)
Protocol=Onkyo Address=0xF2 Command=0x8887 Raw-Data=0x888700F2 32 bits LSB first
Send with: IrSender.sendOnkyo(0xF2, 0x8887, <numberOfRepeats>);
rawData[68]:
-1059250
+8900,-4450
+ 600,- 500 + 600,-1650 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,- 550
+ 600,- 500 + 650,- 500 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,- 500
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 650,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1600
+ 600
Sum: 62150
Send Apple
Protocol=Apple Address=0xF2 Command=0x87 Raw-Data=0xF28787EE 32 bits LSB first
Send with: IrSender.sendApple(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1057650
+8900,-4400
+ 600,- 550 + 600,-1650 + 600,-1600 + 600,-1650
+ 600,- 550 + 600,-1600 + 650,-1600 + 600,-1650
+ 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 500 + 600,-1650
+ 600,- 550 + 600,-1600 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1600
+ 650
Sum: 71100
Send Panasonic
Protocol=Panasonic Address=0xF2 Command=0x87 Raw-Data=0xA8870F20 48 bits LSB first
Send with: IrSender.sendPanasonic(0xF2, 0x87, <numberOfRepeats>);
rawData[100]:
-1057750
+3450,-1700
+ 500,- 400 + 450,-1250 + 500,- 400 + 450,- 400
+ 450,- 400 + 500,- 400 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
+ 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400
+ 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
+ 450,- 450 + 450,-1250 + 450,- 400 + 500,- 400
+ 450,-1250 + 450,-1300 + 450,-1250 + 500,-1250
+ 450,- 400 + 450,- 450 + 450,- 400 + 450,- 450
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,- 400
+ 500,- 400 + 450,- 400 + 450,- 450 + 450,-1250
+ 450,- 400 + 500,- 400 + 450,- 400 + 450,-1300
+ 450,- 400 + 450,-1300 + 450,- 400 + 450,-1250
+ 500
Sum: 59350
Send Kaseikyo with 0x4711 as Vendor ID
Protocol=Kaseikyo Address=0xF2 Command=0x87 Extra=0x4711 Raw-Data=0xAB870F23 48 bits LSB first
Send with: IrSender.sendKaseikyo(0xF2, 0x87, <numberOfRepeats>, 0x4711);
rawData[100]:
-1077750
+3450,-1700
+ 450,-1250 + 450,- 450 + 450,- 400 + 450,- 400
+ 450,-1300 + 450,- 400 + 450,- 400 + 500,- 400
+ 450,-1250 + 450,-1300 + 450,-1250 + 450,- 400
+ 500,- 400 + 450,- 400 + 450,-1300 + 450,- 400
+ 450,-1250 + 450,-1300 + 450,- 400 + 500,- 400
+ 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400
+ 500,-1250 + 450,-1250 + 450,-1300 + 450,-1250
+ 500,- 400 + 450,- 400 + 450,- 400 + 500,- 400
+ 450,-1300 + 450,-1250 + 500,-1250 + 450,- 400
+ 450,- 400 + 500,- 400 + 450,- 400 + 450,-1300
+ 450,-1250 + 450,-1300 + 450,- 400 + 450,-1300
+ 450,- 400 + 450,-1250 + 450,- 450 + 450,-1250
+ 450
Sum: 66100
Send Kaseikyo_Denon variant
Protocol=Kaseikyo_Denon Address=0xF2 Command=0x87 Raw-Data=0xA8870F20 48 bits LSB first
Send with: IrSender.sendKaseikyo_Denon(0xF2, 0x87, <numberOfRepeats>);
rawData[100]:
-1078550
+3450,-1750
+ 450,- 400 + 450,- 400 + 500,-1250 + 450,- 400
+ 450,-1300 + 450,- 400 + 450,-1250 + 450,- 450
+ 450,- 400 + 450,-1300 + 450,- 400 + 450,- 400
+ 450,-1300 + 450,-1250 + 450,- 450 + 450,- 400
+ 450,- 400 + 500,- 400 + 450,- 400 + 450,- 450
+ 450,- 400 + 450,-1250 + 450,- 450 + 450,- 400
+ 450,-1250 + 500,-1250 + 450,-1250 + 450,-1300
+ 450,- 400 + 450,- 400 + 500,- 350 + 500,- 400
+ 450,-1300 + 450,-1250 + 450,-1300 + 450,- 400
+ 450,- 400 + 450,- 450 + 450,- 400 + 450,-1300
+ 450,- 400 + 450,- 400 + 500,- 400 + 450,-1250
+ 500,- 400 + 450,-1250 + 450,- 450 + 450,-1250
+ 450
Sum: 62700
Send Denon
Protocol=Denon Address=0x12 Command=0x87 Raw-Data=0x10F2 15 bits LSB first
Send with: IrSender.sendDenon(0x12, 0x87, <numberOfRepeats>);
rawData[32]:
-1076250
+ 300,- 750 + 300,-1750 + 300,- 750 + 300,- 750
+ 300,-1750 + 300,-1800 + 300,-1750 + 300,-1800
+ 250,- 750 + 300,- 750 + 300,- 750 + 300,- 750
+ 300,-1750 + 300,- 750 + 300,- 750 + 300
Sum: 22100
Send Denon/Sharp variant
Protocol=Sharp Address=0x12 Command=0x87 Raw-Data=0x50F2 15 bits LSB first
Send with: IrSender.sendSharp(0x12, 0x87, <numberOfRepeats>);
rawData[32]:
-1018800
+ 300,- 700 + 300,-1800 + 250,- 750 + 300,- 750
+ 300,-1800 + 250,-1800 + 300,-1750 + 300,-1800
+ 300,- 750 + 250,- 750 + 300,- 750 + 300,- 750
+ 300,-1750 + 300,- 750 + 300,-1800 + 250
Sum: 23050
@@ -0,0 +1,825 @@
START UnitTest.cpp from Feb 24 2023
Using library version 4.1.0
Ready to receive IR signals of protocols: NEC/NEC2/Onkyo/Apple, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Bang & Olufsen, FAST, Bosewave , MagiQuest, Universal Pulse Distance Width, Hash at pin 14
Send IR signals at pin 12
If you connect debug pin 13 to ground, raw data is always printed
Send signal mark duration for 38kHz is 8 us, pulse narrowing correction is 600 ns, total period is 26 us
16000 us is the (minimum) gap, after which the start of a new IR packet is assumed
100 us are subtracted from all marks and added to all spaces for decoding
address=0xFFF1 command=0x76
Send NEC with 8 bit address
Protocol=NEC Address=0xF1 Command=0x76 Raw-Data=0x89760EF1 32 bits LSB first
Send with: IrSender.sendNEC(0xF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1050650
+9050,-4450
+ 650,-1600 + 700,- 450 + 650,- 500 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,-1600
+ 700,- 450 + 650,-1600 + 650,-1650 + 650,-1600
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450
+ 700,- 450 + 650,-1600 + 650,-1600 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,- 450 + 700,- 450 + 650,-1600
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600
+ 700
Sum: 68500
Send NEC with 16 bit address
Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first
Send with: IrSender.sendNEC(0xFFF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1060200
+9050,-4400
+ 650,-1600 + 650,- 500 + 650,- 450 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1650 + 650,- 450
+ 650,-1600 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 450 + 650,- 500 + 650,-1600
+ 650
Sum: 74050
Send NEC2 with 16 bit address
Protocol=NEC Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first
Send with: IrSender.sendNEC(0xFFF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1060450
+9050,-4450
+ 650,-1600 + 650,- 500 + 650,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 500
+ 650,-1600 + 650,- 500 + 650,- 500 + 650,-1600
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650
Sum: 74150
Send NEC Pronto data with 8 bit address 0x80 and command 0x45 and no repeats
Protocol=NEC Address=0x80 Command=0x45 Raw-Data=0xBA457F80 32 bits LSB first
Send with: IrSender.sendNEC(0x80, 0x45, <numberOfRepeats>);
rawData[68]:
-1065600
+9200,-4400
+ 700,- 450 + 700,- 450 + 700,- 500 + 650,- 500
+ 700,- 500 + 650,- 500 + 650,- 550 + 700,-1550
+ 700,-1550 + 700,-1550 + 700,-1550 + 650,-1550
+ 700,-1550 + 700,-1550 + 700,-1550 + 700,- 450
+ 700,-1550 + 650,- 500 + 650,-1600 + 700,- 450
+ 700,- 450 + 700,- 450 + 700,-1550 + 700,- 450
+ 750,- 450 + 700,-1500 + 700,- 450 + 700,-1550
+ 700,-1550 + 700,-1550 + 700,- 450 + 700,-1550
+ 700
Sum: 68800
Send NEC sendRaw data with 8 bit address=0xFB04 and command 0x08 and exact timing (16 bit array format)
Protocol=NEC Address=0x4 Command=0x8 Raw-Data=0xF708FB04 32 bits LSB first
Send with: IrSender.sendNEC(0x4, 0x8, <numberOfRepeats>);
rawData[68]:
-1066550
+9150,-4400
+ 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450
+ 700,- 450 + 650,- 500 + 650,- 450 + 650,- 500
+ 650,-1600 + 700,-1600 + 650,- 450 + 700,-1600
+ 650,-1600 + 700,-1600 + 650,-1600 + 650,-1650
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 700
Sum: 68700
Send ONKYO with 16 bit address 0x0102 and 16 bit command 0x0304 with NECRaw(0x03040102)
Protocol=Onkyo Address=0x102 Command=0x304 Raw-Data=0x3040102 32 bits LSB first
Send with: IrSender.sendOnkyo(0x102, 0x304, <numberOfRepeats>);
rawData[68]:
-1064800
+9050,-4450
+ 650,- 450 + 650,-1600 + 700,- 450 + 650,- 500
+ 650,- 450 + 650,- 500 + 650,- 500 + 650,- 450
+ 650,-1600 + 700,- 450 + 700,- 450 + 650,- 500
+ 650,- 450 + 650,- 500 + 650,- 450 + 700,- 450
+ 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450
+ 650,- 500 + 650,- 450 + 650,- 500 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,- 500 + 650,- 450
+ 650,- 550 + 650,- 500 + 600,- 500 + 650,- 500
+ 650
Sum: 56050
Send ONKYO with 16 bit address 0x0102 and command 0x34 with old 32 bit format MSB first (0x40802CD3)
Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 32 bits LSB first
Send with: IrSender.sendNEC(0x102, 0x34, <numberOfRepeats>);
rawData[68]:
-1066900
+9050,-4400
+ 650,- 500 + 650,-1600 + 650,- 500 + 650,- 450
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,- 500
+ 650,-1600 + 650,- 500 + 650,- 450 + 650,- 550
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450
+ 650,- 500 + 650,- 450 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,- 500 + 650,- 450
+ 650,-1600 + 700,-1600 + 600,- 500 + 650,-1650
+ 650,- 450 + 700,- 450 + 650,-1600 + 650,-1600
+ 700
Sum: 61700
Send Panasonic 0xB, 0x10 as 48 bit generic PulseDistance using ProtocolConstants
Protocol=Panasonic Address=0x10B Command=0xA0 Raw-Data=0xA010B02002 48 bits LSB first
Send with: IrSender.sendPanasonic(0x10B, 0xA0, <numberOfRepeats>);
rawData[100]:
-1064700
+3550,-1650
+ 550,- 350 + 500,-1250 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,- 400 + 450,-1300 + 500,- 350 + 500,- 400
+ 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,-1250 + 500,-1250 + 500,- 350 + 500,-1250
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,-1250 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,- 350 + 550,- 350 + 500,- 350 + 550,- 350
+ 500,- 350 + 500,-1250 + 500,- 400 + 500,-1250
+ 500,- 350 + 550,- 350 + 500,- 350 + 550,- 350
+ 500,- 350 + 550,- 350 + 500,- 400 + 500,- 350
+ 500
Sum: 54750
Send Panasonic 0xB, 0x10 as generic 48 bit PulseDistance
LSB first
Protocol=Panasonic Address=0x10B Command=0xA0 Raw-Data=0xA010B02002 48 bits LSB first
Send with: IrSender.sendPanasonic(0x10B, 0xA0, <numberOfRepeats>);
rawData[100]:
-1082450
+3550,-1600
+ 550,- 350 + 550,-1150 + 550,- 300 + 600,- 300
+ 550,- 300 + 550,- 300 + 600,- 300 + 550,- 300
+ 550,- 300 + 550,- 350 + 550,- 300 + 550,- 350
+ 550,- 300 + 550,-1200 + 550,- 300 + 550,- 300
+ 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350
+ 550,-1150 + 550,-1200 + 550,- 300 + 550,-1200
+ 550,- 300 + 550,- 300 + 550,- 300 + 600,- 300
+ 550,-1150 + 600,- 300 + 550,- 300 + 550,- 300
+ 550,- 350 + 550,- 300 + 550,- 350 + 550,- 300
+ 550,- 300 + 550,-1200 + 550,- 300 + 550,-1200
+ 550,- 300 + 550,- 300 + 600,- 300 + 550,- 300
+ 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300
+ 550
Sum: 54200
MSB first
Protocol=Panasonic Address=0xB Command=0x10 Raw-Data=0xA01000B02002 48 bits LSB first
Send with: IrSender.sendPanasonic(0xB, 0x10, <numberOfRepeats>);
rawData[100]:
-1076300
+3550,-1600
+ 550,- 350 + 550,-1150 + 550,- 300 + 600,- 300
+ 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300
+ 600,- 300 + 550,- 300 + 550,- 300 + 600,- 300
+ 550,- 300 + 550,-1200 + 550,- 300 + 550,- 300
+ 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350
+ 550,-1150 + 550,-1200 + 550,- 300 + 550,-1200
+ 550,- 300 + 550,- 300 + 550,- 350 + 550,- 300
+ 550,- 350 + 550,- 350 + 550,- 300 + 550,- 300
+ 550,- 350 + 550,- 300 + 550,- 300 + 550,- 350
+ 550,-1150 + 550,- 300 + 600,- 300 + 550,- 300
+ 550,- 300 + 600,- 300 + 550,- 300 + 550,- 300
+ 600,- 300 + 550,-1150 + 550,- 350 + 550,-1150
+ 550
Sum: 54250
Send generic 72 bit PulseDistance 0x5A AFEDCBA9 87654321 LSB first
Protocol=PulseDistance Raw-Data=0x5A 72 bits LSB first
Send with:
uint64_t tRawData[]={0xAFEDCBA987654321, 0x5A};
IrSender.sendPulseDistanceWidthFromArray(38, 9000, 4350, 650, 1600, 650, 500, &tRawData[0], 72, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[148]:
-1082050
+9000,-4350
+ 700,-1600 + 650,- 500 + 700,- 500 + 650,- 500
+ 650,- 550 + 650,-1600 + 650,- 550 + 650,- 500
+ 700,-1600 + 650,-1650 + 650,- 500 + 650,- 500
+ 700,- 500 + 650,- 500 + 650,-1650 + 650,- 500
+ 650,-1650 + 650,- 500 + 650,-1650 + 650,- 500
+ 650,- 550 + 650,-1600 + 650,-1650 + 650,- 500
+ 650,-1650 + 650,-1600 + 700,-1600 + 650,- 500
+ 700,- 500 + 650,- 500 + 700,- 500 + 650,-1600
+ 700,-1600 + 650,- 500 + 700,- 500 + 650,-1600
+ 700,- 500 + 650,-1650 + 600,- 550 + 700,-1600
+ 650,-1650 + 650,-1600 + 650,- 550 + 650,-1600
+ 700,- 500 + 650,- 500 + 650,-1650 + 650,-1600
+ 650,-1650 + 650,- 500 + 700,-1600 + 650,-1650
+ 650,- 500 + 650,-1650 + 650,-1600 + 700,-1600
+ 650,-1650 + 650,-1600 + 700,-1600 + 650,-1650
+ 650,- 500 + 650,-1650 + 650,- 500 + 700,-1600
+ 650,- 500 + 700,-1600 + 650,- 550 + 650,-1600
+ 650,-1650 + 650,- 500 + 650,-1650 + 650,- 500
+ 650
Sum: 140550
Send generic 52 bit PulseDistanceWidth 0xDCBA9 87654321 LSB first
Protocol=PulseWidth Raw-Data=0xDCBA987654321 52 bits LSB first
Send with: IrSender.sendPulseDistanceWidth(38, 400, 550, 750, 150, 400, 500, 0xDCBA987654321, 52, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[106]:
-1120100
+ 400,- 550
+ 700,- 150 + 450,- 500 + 400,- 550 + 400,- 500
+ 400,- 500 + 700,- 150 + 450,- 550 + 400,- 500
+ 700,- 150 + 800,- 150 + 450,- 500 + 400,- 500
+ 400,- 550 + 350,- 550 + 700,- 200 + 400,- 550
+ 700,- 200 + 400,- 500 + 750,- 200 + 400,- 500
+ 400,- 550 + 700,- 150 + 750,- 200 + 450,- 500
+ 700,- 150 + 750,- 200 + 750,- 150 + 450,- 500
+ 400,- 550 + 400,- 500 + 400,- 500 + 700,- 150
+ 800,- 150 + 450,- 500 + 400,- 500 + 750,- 150
+ 450,- 500 + 700,- 200 + 450,- 500 + 700,- 250
+ 700,- 150 + 800,- 150 + 450,- 500 + 700,- 200
+ 450,- 500 + 400,- 500 + 700,- 200 + 750,- 150
+ 750,- 150 + 450,- 550 + 700,- 200 + 700
Sum: 48450
Send generic 32 bit PulseWidth 0x87654321 LSB first
Protocol=PulseWidth Raw-Data=0x87654321 32 bits LSB first
Send with: IrSender.sendPulseDistanceWidth(38, 1100, 400, 750, 200, 450, 200, 0x87654321, 32, PROTOCOL_IS_LSB_FIRST, <RepeatPeriodMillis>, <numberOfRepeats>);
rawData[66]:
-1090450
+1100,- 400
+ 700,- 150 + 450,- 200 + 450,- 150 + 450,- 200
+ 400,- 200 + 750,- 150 + 450,- 150 + 450,- 200
+ 700,- 200 + 750,- 200 + 400,- 200 + 400,- 200
+ 450,- 150 + 450,- 150 + 750,- 150 + 450,- 200
+ 750,- 200 + 400,- 200 + 750,- 150 + 450,- 150
+ 450,- 200 + 700,- 200 + 750,- 200 + 400,- 200
+ 750,- 150 + 750,- 200 + 700,- 200 + 450,- 150
+ 450,- 200 + 400,- 200 + 450,- 150 + 750
Sum: 24900
Send MagiQuest 0x6BCDFF00, 0x176 as generic 55 bit PulseDistanceWidth MSB first
Protocol=MagiQuest Address=0xFF00 Command=0x176 Raw-Data=0x6BCDFF00 56 bits MSB first
Send with: IrSender.sendMagiQuest(0x6BCDFF00, 0x176, <numberOfRepeats>);
rawData[112]:
-1070250
+ 400,- 800 + 400,- 750 + 450,- 800 + 400,- 750
+ 400,- 800 + 400,- 750 + 400,- 800 + 400,- 750
+ 700,- 500 + 650,- 500 + 400,- 800 + 650,- 500
+ 400,- 800 + 650,- 500 + 700,- 500 + 650,- 500
+ 700,- 450 + 450,- 750 + 400,- 750 + 700,- 500
+ 700,- 450 + 400,- 800 + 700,- 450 + 700,- 500
+ 700,- 500 + 650,- 500 + 700,- 450 + 700,- 500
+ 700,- 450 + 700,- 500 + 700,- 450 + 400,- 800
+ 350,- 800 + 400,- 800 + 400,- 750 + 400,- 800
+ 400,- 750 + 400,- 800 + 400,- 750 + 700,- 450
+ 450,- 750 + 700,- 450 + 700,- 500 + 700,- 450
+ 400,- 800 + 650,- 500 + 700,- 500 + 400,- 750
+ 400,- 800 + 400,- 750 + 450,- 750 + 700,- 450
+ 700,- 500 + 400,- 750 + 400,- 800 + 700
Sum: 65350
Send Onkyo (NEC with 16 bit command)
Protocol=Onkyo Address=0xFFF1 Command=0x7776 Raw-Data=0x7776FFF1 32 bits LSB first
Send with: IrSender.sendOnkyo(0xFFF1, 0x7776, <numberOfRepeats>);
rawData[68]:
-1086400
+9050,-4400
+ 700,-1600 + 650,- 450 + 700,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,- 450 + 700,-1600 + 650,-1600 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500
+ 650
Sum: 77500
Send Apple
Protocol=Apple Address=0xF1 Command=0x76 Raw-Data=0xF17687EE 32 bits LSB first
Send with: IrSender.sendApple(0xF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1059500
+9050,-4400
+ 700,- 500 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,- 500 + 650,-1600 + 650,-1600 + 650,-1600
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,- 450 + 700,- 450 + 700,- 450 + 650,-1600
+ 650,- 500 + 650,-1600 + 650,-1600 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,- 450 + 650,- 500 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 600
Sum: 73000
Send Panasonic
Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF102002 48 bits LSB first
Send with: IrSender.sendPanasonic(0xFF1, 0x76, <numberOfRepeats>);
rawData[100]:
-1059200
+3500,-1700
+ 500,- 350 + 500,-1250 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,-1250 + 500,- 350 + 500,- 400
+ 500,- 350 + 500,- 400 + 450,- 400 + 500,- 400
+ 500,-1250 + 500,- 350 + 500,- 400 + 450,- 400
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,- 400 + 500,-1250 + 500,-1250 + 500,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,- 400
+ 500,-1250 + 500,- 350 + 500,- 400 + 500,-1250
+ 500,-1250 + 500,- 400 + 500,- 350 + 500,-1250
+ 500
Sum: 65200
Send Kaseikyo with 0x4711 as Vendor ID
Protocol=Kaseikyo Address=0xFF1 Command=0x76 Extra=0x4711 Raw-Data=0x9A76FF134711 48 bits LSB first
Send with: IrSender.sendKaseikyo(0xFF1, 0x76, <numberOfRepeats>, 0x4711);
rawData[100]:
-1079950
+3550,-1650
+ 500,-1250 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,-1250 + 500,- 350 + 550,- 350 + 500,- 400
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,-1250 + 500,- 400
+ 500,-1250 + 500,-1250 + 500,- 350 + 500,- 400
+ 500,-1250 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,-1250 + 500,-1250 + 500,-1250 + 550,-1200
+ 550,- 350 + 500,-1250 + 500,-1250 + 500,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 550,- 350
+ 500,- 350 + 500,-1250 + 550,- 350 + 500,-1250
+ 500,-1250 + 500,- 350 + 500,- 400 + 500,-1250
+ 500
Sum: 70500
Send Kaseikyo_Denon variant
Protocol=Kaseikyo_Denon Address=0xFF1 Command=0x76 Raw-Data=0x9976FF103254 48 bits LSB first
Send with: IrSender.sendKaseikyo_Denon(0xFF1, 0x76, <numberOfRepeats>);
rawData[100]:
-1080650
+3550,-1650
+ 550,- 350 + 500,- 350 + 550,-1200 + 550,- 350
+ 500,-1250 + 500,- 350 + 550,-1200 + 500,- 400
+ 500,- 350 + 500,-1250 + 550,- 350 + 500,- 350
+ 550,-1200 + 550,-1200 + 550,- 350 + 500,- 350
+ 550,- 350 + 500,- 350 + 550,- 350 + 500,- 350
+ 550,-1200 + 550,- 350 + 500,- 350 + 550,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,- 350 + 500,-1250 + 500,-1250 + 500,- 400
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350
+ 500,-1250 + 550,- 350 + 500,- 350 + 550,-1250
+ 450,-1300 + 500,- 350 + 500,- 400 + 500,-1250
+ 500
Sum: 68750
Send Denon
Protocol=Denon Address=0x11 Command=0x76 Raw-Data=0xED1 15 bits LSB first
Send with: IrSender.sendDenon(0x11, 0x76, <numberOfRepeats>);
rawData[32]:
-1078400
+ 350,-1750 + 350,- 700 + 350,- 700 + 350,- 700
+ 350,-1750 + 350,- 700 + 300,-1800 + 350,-1750
+ 350,- 700 + 350,-1750 + 350,-1750 + 350,-1750
+ 350,- 700 + 350,- 700 + 350,- 700 + 350
Sum: 23450
Send Denon/Sharp variant
Protocol=Sharp Address=0x11 Command=0x76 Raw-Data=0x4ED1 15 bits LSB first
Send with: IrSender.sendSharp(0x11, 0x76, <numberOfRepeats>);
rawData[32]:
-1023500
+ 350,-1750 + 350,- 700 + 350,- 700 + 350,- 700
+ 350,-1750 + 350,- 700 + 350,-1750 + 350,-1750
+ 350,- 700 + 350,-1750 + 350,-1750 + 350,-1750
+ 350,- 700 + 300,- 750 + 350,-1750 + 350
Sum: 24500
Send Sony/SIRCS with 7 command and 5 address bits
Protocol=Sony Address=0x11 Command=0x76 Raw-Data=0x8F6 12 bits LSB first
Send with: IrSender.sendSony(0x11, 0x76, 2, 12);
rawData[26]:
-1025750
+2500,- 500
+ 700,- 500 +1300,- 650 +1250,- 550 + 700,- 500
+1300,- 500 +1300,- 500 +1300,- 550 +1300,- 500
+ 700,- 500 + 700,- 500 + 700,- 550 +1250
Sum: 21300
Send Sony/SIRCS with 7 command and 8 address bits
Protocol=Sony Address=0xF1 Command=0x76 Raw-Data=0x78F6 15 bits LSB first
Send with: IrSender.sendSony(0xF1, 0x76, 2, 15);
rawData[32]:
-1037600
+2500,- 550
+ 650,- 550 +1300,- 500 +1300,- 500 + 700,- 500
+1300,- 550 +1250,- 550 +1300,- 500 +1300,- 500
+ 700,- 500 + 700,- 550 + 650,- 550 +1300,- 500
+1300,- 550 +1300,- 500 +1300
Sum: 26700
Send Sony/SIRCS with 7 command and 13 address bits
Protocol=Sony Address=0x1FF1 Command=0x76 Raw-Data=0xFF8F6 20 bits LSB first
Send with: IrSender.sendSony(0x1FF1, 0x76, 2, 20);
rawData[42]:
-1041100
+2500,- 500
+ 700,- 550 +1300,- 500 +1300,- 500 + 700,- 550
+1250,- 550 +1300,- 500 +1300,- 550 +1300,- 500
+ 700,- 500 + 700,- 500 + 700,- 500 +1300,- 550
+1300,- 500 +1300,- 500 +1300,- 500 +1300,- 550
+1300,- 500 +1300,- 500 +1300,- 550 +1250
Sum: 35750
Send Samsung 8 bit command
Protocol=Samsung Address=0xFFF1 Command=0x76 Raw-Data=0x8976FFF1 32 bits LSB first
Send with: IrSender.sendSamsung(0xFFF1, 0x76, <numberOfRepeats>);
rawData[68]:
-1044850
+4550,-4400
+ 700,-1600 + 650,- 450 + 700,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,- 450 + 700,-1600 + 650,-1600 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600
+ 650
Sum: 69600
Send Samsung 16 bit command
Protocol=Samsung Address=0xFFF1 Command=0x9876 Raw-Data=0x9876FFF1 32 bits LSB first
Send with: IrSender.sendSamsung(0xFFF1, 0x9876, <numberOfRepeats>);
rawData[68]:
-1061000
+4600,-4400
+ 650,-1600 + 700,- 450 + 650,- 500 + 650,- 450
+ 700,-1550 + 700,-1600 + 650,-1600 + 650,-1600
+ 650,-1600 + 700,-1600 + 650,-1600 + 650,-1600
+ 650,-1600 + 700,-1600 + 650,-1600 + 650,-1600
+ 650,- 500 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,-1600 + 650,- 500 + 650,- 450 + 700,-1600
+ 650
Sum: 69650
Send Samsung48 16 bit command
Protocol=Samsung48 Address=0xFFF1 Command=0x9876 Raw-Data=0xFFFFFFFF8976FFF1 48 bits LSB first
Send with: IrSender.sendSamsung48(0xFFF1, 0x9876, <numberOfRepeats>);
rawData[100]:
-1066350
+4550,-4400
+ 650,-1650 + 600,- 500 + 700,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,-1600
+ 600,-1650 + 650,-1600 + 650,-1600 + 700,-1600
+ 600,-1650 + 650,-1600 + 650,-1600 + 700,-1550
+ 700,- 450 + 650,-1600 + 700,-1600 + 600,- 500
+ 650,-1600 + 700,-1600 + 650,-1600 + 650,- 500
+ 650,-1600 + 650,- 500 + 650,- 500 + 650,-1600
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 450 + 650,- 500 + 650,-1600
+ 650,-1600 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,-1600 + 650,-1600 + 650,-1650 + 650,- 450
+ 650,- 500 + 650,-1600 + 650,-1600 + 650,- 500
+ 650
Sum: 96750
Send RC5
Protocol=RC5 Address=0x11 Command=0x36 Raw-Data=0x1476 13 bits MSB first
Send with: IrSender.sendRC5(0x11, 0x36, <numberOfRepeats>);
rawData[20]:
-1079150
+1000,- 800
+1900,-1650 +1900,- 800 +1000,- 800 +1000,-1700
+1000,- 800 +1000,- 750 +1900,-1700 +1000,- 800
+1900
Sum: 23400
Send RC5X with 7.th MSB of command set
Protocol=RC5 Address=0x11 Command=0x76 Toggle=1 Raw-Data=0xC76 13 bits MSB first
Send with: IrSender.sendRC5(0x11, 0x76, <numberOfRepeats>);
rawData[20]:
-1035450
+1900,-1700
+1000,- 800 +1900,- 750 +1000,- 800 +1000,-1700
+1000,- 800 +1000,- 800 +1900,-1650 +1000,- 800
+1900
Sum: 23400
Send RC6
Protocol=RC6 Address=0xF1 Command=0x76 Raw-Data=0xF176 20 bits MSB first
Send with: IrSender.sendRC6(0xF1, 0x76, <numberOfRepeats>);
rawData[36]:
-1032650
+2750,- 800
+ 550,- 800 + 550,- 350 + 550,- 350 + 550,- 800
+1450,- 350 + 550,- 350 + 550,- 350 + 550,- 800
+ 550,- 350 + 550,- 350 +1000,- 800 +1000,- 350
+ 550,- 350 + 550,- 800 +1000,- 350 + 550,- 800
+ 550
Sum: 23450
Send RC6A with 14 bit 0x2711 as extra
Protocol=RC6A Address=0xF1 Command=0x76 Extra=0x2711 Toggle=1 Raw-Data=0xA711F176 35 bits MSB first
Send with: IrSender.sendRC6A(0xF1, 0x76, <numberOfRepeats>, 0x2711);
rawData[58]:
-1032900
+2650,- 900
+ 450,- 450 + 450,- 450 + 450,- 850 +1400,-1300
+ 950,- 850 + 500,- 400 + 950,- 400 + 500,- 450
+ 450,- 850 + 500,- 400 + 500,- 400 + 950,- 850
+ 500,- 400 + 500,- 400 + 950,- 450 + 450,- 450
+ 450,- 450 + 450,- 400 + 500,- 850 + 500,- 400
+ 500,- 400 + 950,- 850 + 950,- 400 + 500,- 400
+ 500,- 850 + 950,- 450 + 450,- 850 + 500
Sum: 36850
Send Bang&Olufsen
- ENABLE_BEO_WITHOUT_FRAME_GAP is enabled
- Now print raw data and try to decode the first 6 entries, which results in rawData 0x0!
rawData[36]:
-1032400
+ 300,-2850
+ 250,-2850 + 250,-15200 + 300,-2850 + 250,-9000
+ 300,-5950 + 250,-5950 + 250,-5900 + 300,-2850
+ 250,-5950 + 250,-9050 + 250,-2850 + 250,-9000
+ 300,-2850 + 250,-5950 + 250,-5950 + 250,-5950
+ 250
Sum: 105700
Protocol=Bang&Olufsen Address=0x0 Command=0x0 Raw-Data=0x0 0 bits MSB first
- Remove trailing 6 entries, which is equivalent to define RECORD_GAP_MICROS < 15000, to enable successful B&O decode
Protocol=Bang&Olufsen Address=0xF2 Command=0x87 Raw-Data=0xF287 16 bits MSB first
Send with: IrSender.sendBang&Olufsen(0xF2, 0x87, <numberOfRepeats>);
rawData[38]:
-15200
+ 300,-2850
+ 250,-9000 + 300,-5950 + 250,-5950 + 250,-5900
+ 300,-2850 + 250,-5950 + 250,-9050 + 250,-2850
+ 250,-9000 + 300,-2850 + 250,-5950 + 250,-5950
+ 250,-5950 + 250,-9050 + 250,-5900 + 300,-5950
+ 250,-12100 + 300
Sum: 118100
Send MagiQuest
Protocol=MagiQuest Address=0xF2 Command=0x187 Raw-Data=0x6BCD00F2 56 bits MSB first
Send with: IrSender.sendMagiQuest(0x6BCD00F2, 0x187, <numberOfRepeats>);
rawData[112]:
-1088750
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 850
+ 600,- 550 + 600,- 550 + 350,- 750 + 650,- 550
+ 300,- 850 + 600,- 550 + 600,- 550 + 600,- 550
+ 600,- 550 + 350,- 800 + 350,- 750 + 650,- 500
+ 650,- 500 + 350,- 800 + 650,- 500 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 350,- 800
+ 350,- 800 + 350,- 800 + 350,- 800 + 650,- 500
+ 650,- 500 + 650,- 500 + 650,- 500 + 350,- 800
+ 350,- 800 + 650,- 500 + 350,- 850 + 600,- 550
+ 600,- 550 + 350,- 800 + 300,- 800 + 350,- 800
+ 350,- 800 + 650,- 500 + 650,- 500 + 650,- 550
+ 350,- 800 + 300,- 800 + 650,- 500 + 350,- 800
+ 350,- 800 + 350,- 800 + 650,- 500 + 350
Sum: 63600
Send next protocols with IrSender.write
Send JVC
Protocol=JVC Address=0xF1 Command=0x76 Raw-Data=0x76F1 16 bits LSB first
Send with: IrSender.sendJVC(0xF1, 0x76, <numberOfRepeats>);
rawData[36]:
-1040750
+8500,-4150
+ 650,-1500 + 650,- 400 + 650,- 450 + 600,- 450
+ 650,-1500 + 600,-1500 + 650,-1500 + 600,-1550
+ 600,- 450 + 650,-1500 + 650,-1450 + 650,- 450
+ 650,-1450 + 650,-1500 + 650,-1500 + 600,- 450
+ 650
Sum: 41050
Send LG
Protocol=LG Address=0xF1 Command=0x9876 Raw-Data=0xF19876E 28 bits MSB first
Send with: IrSender.sendLG(0xF1, 0x9876, <numberOfRepeats>);
rawData[60]:
-1059650
+9100,-4100
+ 650,-1500 + 600,-1500 + 600,-1500 + 600,-1500
+ 600,- 500 + 600,- 450 + 600,- 450 + 650,-1500
+ 600,-1500 + 600,- 450 + 600,- 500 + 600,-1500
+ 600,-1500 + 600,- 500 + 600,- 450 + 600,- 450
+ 650,- 450 + 600,-1500 + 600,-1500 + 600,-1500
+ 650,- 450 + 600,-1500 + 600,-1500 + 600,- 500
+ 600,-1500 + 600,-1500 + 600,-1500 + 600,- 500
+ 600
Sum: 60450
Send Bosewave with no address and 8 command bits
Protocol=BoseWave Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first
Send with: IrSender.sendBoseWave(0x0, 0x76, <numberOfRepeats>);
rawData[36]:
-1050250
+1100,-1400
+ 600,- 400 + 600,-1400 + 600,-1400 + 600,- 400
+ 600,-1400 + 600,-1400 + 650,-1400 + 600,- 400
+ 600,-1400 + 600,- 400 + 600,- 400 + 600,-1400
+ 600,- 400 + 600,- 400 + 600,- 400 + 600,-1400
+ 600
Sum: 27150
Send FAST
Protocol=FAST Address=0x0 Command=0x76 Raw-Data=0x8976 16 bits LSB first
Send with: IrSender.sendFAST(0x0, 0x76, <numberOfRepeats>);
rawData[36]:
-1041350
+2200,-1000
+ 650,- 400 + 650,-1500 + 650,-1500 + 600,- 450
+ 650,-1500 + 650,-1500 + 600,-1500 + 650,- 450
+ 600,-1500 + 650,- 450 + 600,- 450 + 650,-1500
+ 600,- 450 + 650,- 450 + 600,- 450 + 650,-1500
+ 600
Sum: 29450
Force buffer overflow by sending 280 marks and spaces
Overflow
Try to increase the "RAW_BUFFER_LENGTH" value of 200 in UnitTest.cpp
rawData[200]:
-1039850
+ 300,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 300,- 500
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 500 + 300,- 450 + 350,- 450 + 300,- 500
+ 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450
+ 350,- 400 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 300,- 500 + 300,- 450 + 300,- 500
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 350,- 450 + 300,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 450 + 300,- 450 + 350,- 450
+ 300,- 450 + 350,- 400 + 350,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 300,- 500 + 300,- 450
+ 350,- 450 + 300,- 450 + 300,- 500 + 300,- 450
+ 350,- 450 + 350,- 450 + 300,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 350,- 450 + 300,- 450
+ 350,- 450 + 300,- 450 + 350
Sum: 77050
ERROR: Unknown protocol
address=0xF2 command=0x87
Send NEC with 8 bit address and complete NEC frames as repeats to force decoding as NEC2
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-3276750
+8900,-4450
+ 600,- 500 + 650,-1600 + 600,- 550 + 600,- 500
+ 650,-1600 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,-1600 + 600,- 550 + 600,-1600 + 650,-1600
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 550 + 600,-1600
+ 600,- 550 + 600,- 500 + 650,- 500 + 600,-1650
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,- 550
+ 600
Sum: 67850
Protocol=NEC2 Address=0xF2 Command=0x87 Repeat gap=65900us Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC2(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-65900
+8900,-4450
+ 600,- 500 + 600,-1650 + 600,- 500 + 600,- 550
+ 600,-1650 + 600,-1600 + 600,-1650 + 600,-1650
+ 600,-1650 + 600,- 500 + 600,-1650 + 600,-1650
+ 600,- 500 + 600,- 550 + 600,- 550 + 600,- 500
+ 600,-1650 + 600,-1650 + 600,-1600 + 600,- 550
+ 600,- 550 + 600,- 500 + 600,- 550 + 600,-1650
+ 600,- 500 + 600,- 550 + 600,- 500 + 650,-1600
+ 600,-1650 + 600,-1600 + 650,-1600 + 600,- 550
+ 600
Sum: 67800
Send NEC with 16 bit address
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1060000
+9100,-4400
+ 650,- 450 + 700,-1600 + 650,- 450 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,- 500 + 650,-1600 + 650,-1600
+ 650,- 500 + 650,- 500 + 600,- 500 + 650,- 500
+ 650,-1600 + 650,-1600 + 650,-1600 + 700,- 450
+ 650,- 500 + 600,- 500 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600
+ 700,-1550 + 700,-1600 + 650,-1600 + 650,- 500
+ 650
Sum: 68450
Send NEC2 with 16 bit address
Protocol=NEC Address=0xF2 Command=0x87 Raw-Data=0x78870DF2 32 bits LSB first
Send with: IrSender.sendNEC(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1060100
+9050,-4400
+ 700,- 450 + 650,-1600 + 650,- 500 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,-1600
+ 700,-1600 + 650,- 450 + 700,-1600 + 650,-1600
+ 650,- 500 + 600,- 500 + 650,- 500 + 650,- 450
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 650,- 500 + 650,- 450 + 650,-1600
+ 700,-1600 + 600,-1650 + 650,-1600 + 650,- 500
+ 650
Sum: 68450
Send Onkyo (NEC with 16 bit command)
Protocol=Onkyo Address=0xF2 Command=0x8887 Raw-Data=0x888700F2 32 bits LSB first
Send with: IrSender.sendOnkyo(0xF2, 0x8887, <numberOfRepeats>);
rawData[68]:
-1060700
+9100,-4400
+ 650,- 450 + 700,-1600 + 650,- 450 + 700,- 450
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,- 450
+ 700,- 450 + 650,- 500 + 650,- 450 + 650,- 500
+ 650,-1600 + 650,-1600 + 700,-1550 + 700,- 450
+ 650,- 500 + 650,- 500 + 650,- 450 + 650,-1600
+ 700,- 450 + 650,- 500 + 650,- 450 + 650,-1650
+ 650,- 500 + 650,- 450 + 700,- 450 + 650,-1600
+ 650
Sum: 62800
Send Apple
Protocol=Apple Address=0xF2 Command=0x87 Raw-Data=0xF28787EE 32 bits LSB first
Send with: IrSender.sendApple(0xF2, 0x87, <numberOfRepeats>);
rawData[68]:
-1059150
+9050,-4400
+ 650,- 500 + 650,-1600 + 650,-1600 + 700,-1600
+ 650,- 450 + 650,-1600 + 700,-1600 + 650,-1600
+ 650,-1600 + 650,-1600 + 700,-1600 + 650,- 450
+ 700,- 450 + 650,- 500 + 650,- 450 + 650,-1600
+ 700,-1600 + 650,-1600 + 650,-1600 + 650,- 500
+ 650,- 450 + 700,- 450 + 650,- 500 + 650,-1600
+ 650,- 500 + 600,-1650 + 650,- 500 + 650,- 450
+ 650,-1600 + 650,-1650 + 650,-1600 + 650,-1600
+ 650
Sum: 71800
Send Panasonic
Protocol=Panasonic Address=0xF2 Command=0x87 Raw-Data=0xA8870F202002 48 bits LSB first
Send with: IrSender.sendPanasonic(0xF2, 0x87, <numberOfRepeats>);
rawData[100]:
-1069050
+3550,-1650
+ 500,- 400 + 500,-1250 + 500,- 350 + 500,- 400
+ 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,- 350 + 500,-1250 + 500,- 400 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,- 350
+ 500,- 400 + 450,-1300 + 500,- 350 + 550,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,- 350 + 500,- 400 + 500,- 350 + 500,- 400
+ 500,-1250 + 500,-1250 + 450,-1300 + 500,- 350
+ 500,- 400 + 450,- 400 + 500,- 400 + 450,-1300
+ 500,- 350 + 550,- 350 + 500,- 350 + 500,-1250
+ 550,- 350 + 500,-1250 + 450,- 400 + 550,-1200
+ 550
Sum: 60000
Send Kaseikyo with 0x4711 as Vendor ID
Protocol=Kaseikyo Address=0xF2 Command=0x87 Extra=0x4711 Raw-Data=0xAB870F234711 48 bits LSB first
Send with: IrSender.sendKaseikyo(0xF2, 0x87, <numberOfRepeats>, 0x4711);
rawData[100]:
-1079750
+3550,-1650
+ 550,-1200 + 550,- 350 + 500,- 350 + 550,- 350
+ 500,-1250 + 500,- 350 + 550,- 350 + 500,- 350
+ 550,-1200 + 550,-1200 + 550,-1200 + 550,- 350
+ 500,- 350 + 550,- 350 + 500,-1250 + 500,- 350
+ 550,-1200 + 550,-1200 + 550,- 350 + 500,- 350
+ 550,- 350 + 500,-1250 + 500,- 350 + 550,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,-1250
+ 500,- 300 + 550,- 400 + 500,- 350 + 550,- 350
+ 500,-1250 + 500,-1250 + 500,-1250 + 500,- 350
+ 500,- 400 + 500,- 350 + 500,- 400 + 500,-1250
+ 500,-1250 + 500,-1250 + 500,- 350 + 500,-1250
+ 500,- 400 + 500,-1250 + 500,- 350 + 500,-1250
+ 550
Sum: 67000