16 Commits

Author SHA1 Message Date
Wieland Schöbl
176c000cdf Added missing #endif 2018-12-27 20:03:12 +01:00
Wieland Schöbl
09d9e3a28d Updated irRecv.h to include Nerf LOP 2018-12-27 17:05:33 +01:00
Wieland Schöbl
a963e85e8c Updated IRremote.h to include NERF LOP 2018-12-27 17:03:36 +01:00
Wieland Schöbl
df0c2db187 Created NERF Laser Ops Pro file 2018-12-27 16:59:26 +01:00
Rafi Khan
2dc97b29f2 Merge pull request #555 from LSUPERMAN735/patch-1
Create readmdFrench.md
2018-03-12 17:17:02 -04:00
LSUPERMAN735
a6b9cc277b Create readmdFrench.md
French translation by @Lsuperman735
2018-03-12 18:11:55 +01:00
Rafi Khan
96186317b2 Merge pull request #542 from use-sparingly/master
Sparkfun Pro Micro Support
2018-01-03 18:52:44 -05:00
alastair.mccormack
5a2ded839c Typo
Removed erroneous `//`
2017-12-03 21:27:35 +00:00
alastair.mccormack
46b7a72da0 Sparkfun Pro Micro credit 2017-12-03 20:36:49 +00:00
alastair.mccormack
06d06019a6 Removed whitespace 2017-12-03 20:22:37 +00:00
alastair.mccormack
57ee7a670e Supported board order
Correct Sparkfun Pro Micro position in supported board order
2017-12-03 20:19:16 +00:00
alastair.mccormack
20bc39a68f Corrected TIMER4_HS output on Sparkfun Pro Micro
Use O̅C̅4̅A̅ (complimentary output pin)  to output to pin 5 (shared with OC3A) on Sparkfun Pro Micro
2017-12-03 20:09:23 +00:00
alastair.mccormack
c2d25b4dd9 Added Sparkfun timer and pins information 2017-11-23 17:30:25 +01:00
alastair.mccormack
7734a90db3 Added Sparkfun Pro Micro pinouts
Used -DARDUINO_AVR_PROMICRO to  determine which timers are available and pin mapping.

Also removed separate ifdef in
2017-11-23 15:44:56 +01:00
Rafi Khan
20a4d97f61 Merge pull request #519 from PaulStoffregen/master
Fix minor compiler warnings in examples
2017-09-09 17:53:45 -06:00
PaulStoffregen
1154607b69 Fix minor compiler warnings in examples 2017-09-04 20:48:37 -07:00
9 changed files with 256 additions and 33 deletions

View File

@@ -79,6 +79,9 @@
#define DECODE_LEGO_PF 0 // NOT WRITTEN
#define SEND_LEGO_PF 1
#define DECODE_NERF_LOP 0 // NOT WRITTEN
#define SEND_NERF_LOP 1
//------------------------------------------------------------------------------
// When sending a Pronto code we request to send either the "once" code
// or the "repeat" code
@@ -119,6 +122,7 @@ typedef
DENON,
PRONTO,
LEGO_PF,
NERF_LOP,
}
decode_type_t;
@@ -251,6 +255,10 @@ class IRrecv
# if DECODE_LEGO_PF
bool decodeLegoPowerFunctions (decode_results *results) ;
# endif
//......................................................................
# if DECODE_NERF_LOP
bool decodeNerfLOP (decode_results *results) ;
# endif
} ;
//------------------------------------------------------------------------------
@@ -339,6 +347,10 @@ class IRsend
# if SEND_LEGO_PF
void sendLegoPowerFunctions (uint16_t data, bool repeat = true) ;
# endif
//......................................................................
# if SEND_NERF_LOP
void sendNerfLOP (uint16_t data, bool repeat = true) ;
# endif
} ;
#endif

View File

@@ -33,6 +33,7 @@ Whether you use the Adafruit Neopixel lib, or FastLED, interrupts get disabled o
- ATtiny 84 / 85
- ESP32 (receive only)
- ESP8266 is supported in a fork based on an old codebase that isn't as recent, but it works reasonably well given that perfectly timed sub millisecond interrupts are different on that chip. See https://github.com/markszabo/IRremoteESP8266
- Sparkfun Pro Micro
We are open to suggestions for adding support to new boards, however we highly recommend you contact your supplier first and ask them to provide support from their side.
@@ -51,6 +52,7 @@ We are open to suggestions for adding support to new boards, however we highly r
| [ATmega64, ATmega128](https://github.com/MCUdude/MegaCore) | **13** | **1** |
| ATmega1280, ATmega2560 | 5, 6, **9**, 11, 46 | 1, **2**, 3, 4, 5 |
| [ESP32](http://esp32.net/) | N/A (not supported) | **1** |
| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4_HS |
| [Teensy 1.0](https://www.pjrc.com/teensy/) | **17** | **1** |
| [Teensy 2.0](https://www.pjrc.com/teensy/) | 9, **10**, 14 | 1, 3, **4_HS** |
| [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 |

View File

@@ -15,6 +15,8 @@
//
// JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
// Whynter A/C ARC-110WD added by Francesco Meschia
// Sparkfun Pro Micro support by Alastair McCormack
//******************************************************************************
#ifndef boarddefs_h
@@ -70,8 +72,14 @@
// switch IRremote to use a different timer.
//
// Sparkfun Pro Micro
#if defined(ARDUINO_AVR_PROMICRO)
//#define IR_USE_TIMER1 // tx = pin 9
#define IR_USE_TIMER3 // tx = pin 5
//#define IR_USE_TIMER4_HS // tx = pin 5
// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
//#define IR_USE_TIMER1 // tx = pin 11
#define IR_USE_TIMER2 // tx = pin 9
//#define IR_USE_TIMER3 // tx = pin 5
@@ -246,19 +254,18 @@
# define TIMER_PWM_PIN CORE_OC1A_PIN // Teensy
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
# define TIMER_PWM_PIN 11 // Arduino Mega
#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
# define TIMER_PWM_PIN 13 // MegaCore
#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__)
# define TIMER_PWM_PIN 13 // MightyCore
|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \
|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
# define TIMER_PWM_PIN 13 // MightyCore, MegaCore
#elif defined(__AVR_ATtiny84__)
# define TIMER_PWM_PIN 6
#else
# define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, etc
# define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, Sparkfun Pro Micro etc
#endif // ATmega48, ATmega88, ATmega168, ATmega328
//---------------------------------------------------------
@@ -291,8 +298,8 @@
//-----------------
#if defined(CORE_OC3A_PIN)
# define TIMER_PWM_PIN CORE_OC3A_PIN // Teensy
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
# define TIMER_PWM_PIN 5 // Arduino Mega
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(ARDUINO_AVR_PROMICRO)
# define TIMER_PWM_PIN 5 // Arduino Mega, Sparkfun Pro Micro
#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)
# define TIMER_PWM_PIN 6 // MightyCore
#else
@@ -305,12 +312,21 @@
#elif defined(IR_USE_TIMER4_HS)
#define TIMER_RESET
#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1))
#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1)))
#if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro
#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A0)) // Use complimentary O̅C̅4̅A̅ output on pin 5
#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A0))) // (Pro Micro does not map PC7 (32/ICP3/CLK0/OC4A)
// of ATmega32U4 )
#else
#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1))
#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1)))
#endif
#define TIMER_ENABLE_INTR (TIMSK4 = _BV(TOIE4))
#define TIMER_DISABLE_INTR (TIMSK4 = 0)
#define TIMER_INTR_NAME TIMER4_OVF_vect
#define TIMER_CONFIG_KHZ(val) ({ \
const uint16_t pwmval = SYSCLOCK / 2000 / (val); \
TCCR4A = (1<<PWM4A); \
@@ -339,6 +355,8 @@
//-----------------
#if defined(CORE_OC4A_PIN)
# define TIMER_PWM_PIN CORE_OC4A_PIN // Teensy
#elif defined(ARDUINO_AVR_PROMICRO)
# define TIMER_PWM_PIN 5 // Sparkfun Pro Micro
#elif defined(__AVR_ATmega32U4__)
# define TIMER_PWM_PIN 13 // Leonardo
#else

View File

@@ -45,7 +45,7 @@ int toggle = 0; // The RC5/6 toggle state
// Most of this code is just logging
void storeCode(decode_results *results) {
codeType = results->decode_type;
int count = results->rawlen;
//int count = results->rawlen;
if (codeType == UNKNOWN) {
Serial.println("Received unknown code, saving as raw");
codeLen = results->rawlen - 1;

View File

@@ -61,7 +61,7 @@ void setup()
// Wait for the gap between tests, to synchronize with
// the sender.
// Specifically, wait for a signal followed by a gap of at last gap ms.
void waitForGap(int gap) {
void waitForGap(unsigned long gap) {
Serial.println("Waiting for gap");
while (1) {
while (digitalRead(RECV_PIN) == LOW) {
@@ -125,7 +125,7 @@ void dump(decode_results *results) {
// The motivation behind this method is that the sender and the receiver
// can do the same test calls, and the mode variable indicates whether
// to send or receive.
void test(char *label, int type, unsigned long value, int bits) {
void test(const char *label, int type, unsigned long value, int bits) {
if (mode == SENDER) {
Serial.println(label);
if (type == NEC) {
@@ -175,7 +175,7 @@ void test(char *label, int type, unsigned long value, int bits) {
// Test raw send or receive. This is similar to the test method,
// except it send/receives raw data.
void testRaw(char *label, unsigned int *rawbuf, int rawlen) {
void testRaw(const char *label, unsigned int *rawbuf, int rawlen) {
if (mode == SENDER) {
Serial.println(label);
irsend.sendRaw(rawbuf, rawlen, 38 /* kHz */);

View File

@@ -192,12 +192,12 @@ void loop()
ac_activate(AC_TEMPERATURE, AC_FLOW);
break;
case 2:
if ( b == 0 | b == 1 ) {
if ( b == 0 || b == 1 ) {
ac_change_air_swing(b);
}
break;
case 3: // 1 : clean on, power on
if ( b == 0 | b == 1 ) {
if ( b == 0 || b == 1 ) {
ac_air_clean(b);
}
break;

View File

@@ -1,10 +1,10 @@
#include "IRremote.h"
#include "IRremoteInt.h"
#ifdef IR_TIMER_USE_ESP32
hw_timer_t *timer;
void IRTimer(); // defined in IRremote.cpp
#endif
#ifdef IR_TIMER_USE_ESP32
hw_timer_t *timer;
void IRTimer(); // defined in IRremote.cpp
#endif
//+=============================================================================
// Decodes the received IR message
@@ -89,6 +89,11 @@ int IRrecv::decode (decode_results *results)
DBG_PRINTLN("Attempting Lego Power Functions");
if (decodeLegoPowerFunctions(results)) return true ;
#endif
#if DECODE_NERF_LOP
DBG_PRINTLN("Attempting Nerf Laser Ops Pro Functions");
if (decodeNerfLOP(results)) return true ;
#endif
// decodeHash returns a hash on any input.
// Thus, it needs to be last in the list.
@@ -122,17 +127,17 @@ IRrecv::IRrecv (int recvpin, int blinkpin)
//
void IRrecv::enableIRIn ( )
{
// Interrupt Service Routine - Fires every 50uS
#ifdef ESP32
// ESP32 has a proper API to setup timers, no weird chip macros needed
// simply call the readable API versions :)
// 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up
timer = timerBegin(1, 80, 1);
timerAttachInterrupt(timer, &IRTimer, 1);
// every 50ns, autoreload = true
timerAlarmWrite(timer, 50, true);
timerAlarmEnable(timer);
#else
// Interrupt Service Routine - Fires every 50uS
#ifdef ESP32
// ESP32 has a proper API to setup timers, no weird chip macros needed
// simply call the readable API versions :)
// 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up
timer = timerBegin(1, 80, 1);
timerAttachInterrupt(timer, &IRTimer, 1);
// every 50ns, autoreload = true
timerAlarmWrite(timer, 50, true);
timerAlarmEnable(timer);
#else
cli();
// Setup pulse clock timer interrupt
// Prescale /8 (16M/8 = 0.5 microseconds per tick)
@@ -146,7 +151,7 @@ void IRrecv::enableIRIn ( )
TIMER_RESET;
sei(); // enable interrupts
#endif
#endif
// Initialize state machine variables
irparams.rcvstate = STATE_IDLE;

89
ir_NerfLaserOpsPro.cpp Normal file
View File

@@ -0,0 +1,89 @@
#include "IRremote.h"
#include "IRremoteInt.h"
//==============================================================================
//
//
// NERF LASER OPS PRO
//
//
//==============================================================================
#define BITS 15 // The number of bits in the command
#define HDR_MARK 2800 // The length of the Header:Mark
#define HDR_SPACE 6000 // The lenght of the Header:Space
#define ONE_MARK 1800 // The length of a Bit:Mark for 1's
#define ZERO_MARK 800 // The length of a Bit:Mark for 0's
#define ALL_SPACE 2100 // The length of a Bit:Space
#define purpule 0x440
#define red 0x400
#define blue 0x420
//+=============================================================================
//
#if SEND_NERF_LOP
void IRsend::sendNerfLOP (unsigned long data, int nbits)
{
// Set IR carrier frequency
enableIROut(40);
// Header
mark (HDR_MARK);
space(HDR_SPACE);
mark (HDR_MARK);
// Data
for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) {
if (data & mask) {
space(ALL_SPACE);
mark (ONE_MARK);
} else {
space(ALL_SPACE);
mark (ZERO_MARK);
}
}
space(0); // Always end with the LED off
}
#endif
//+=============================================================================
//
#if DECODE_NERF_LOP
bool IRrecv::decodeNerfLOP (decode_results *results)
{
//NOT IMPLEMENTED YET
return false;
unsigned long data = 0; // Somewhere to build our code
int offset = 1; // Skip the Gap reading
// Check we have the right amount of data
if (irparams.rawlen != 1 + 2 + (2 * BITS) + 1) return false ;
// Check initial Mark+Space match
if (!MATCH_MARK (results->rawbuf[offset++], HDR_MARK )) return false ;
if (!MATCH_SPACE(results->rawbuf[offset++], HDR_SPACE)) return false ;
// Read the bits in
for (int i = 0; i < SHUZU_BITS; i++) {
// Each bit looks like: MARK + SPACE_1 -> 1
// or : MARK + SPACE_0 -> 0
if (!MATCH_MARK(results->rawbuf[offset++], BIT_MARK)) return false ;
// IR data is big-endian, so we shuffle it in from the right:
if (MATCH_SPACE(results->rawbuf[offset], ONE_SPACE)) data = (data << 1) | 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], ZERO_SPACE)) data = (data << 1) | 0 ;
else return false ;
offset++;
}
// Success
results->bits = BITS;
results->value = data;
results->decode_type = SHUZU;
return true;
}
#endif

97
readmdFrench.md Normal file
View File

@@ -0,0 +1,97 @@
## IRremote Library
Cette bibliothèque vous permet d'envoyer et de recevoir des signaux infrarouges sur un Arduino.
Des tutoriels et plus d'informations seront disponibles sur la page d'accueil officielle.
## Version - 2.2.3
## Installation
1. Allez à la [Releases](https://github.com/z3t0/Arduino-IRremote/releases) page.
2. Téléchargez la dernière version.
3. Extraire le fichier zip
4. Déplacez le dossier "IRremote" vers vos bibliothèques.
5. Assurez-vous de supprimer Arduino_Root / libraries / RobotIRremote. Où Arduino_Root fait référence au répertoire d'installation d'Arduino. La bibliothèque RobotIRremote a des définitions similaires à IRremote et provoque des erreurs.
## FAQ
Je ne travaille pas correctement en utilisant Neopixels (aka WS2811 / WS2812 / WS2812B)
Que vous utilisiez la librairie Adafruit Neopixel ou FastLED, les interruptions sont désactivées sur de nombreux processeurs bas de gamme comme les arduinos de base. À son tour, cela empêche le gestionnaire IR de s'exécuter quand il le faut. Il y a quelques solutions à ce processus, voir cette page de Marc MERLIN
[cette page de Marc MERLIN](http://marc.merlins.org/perso/arduino/post_2017-04-03_Arduino-328P-Uno-Teensy3_1-ESP8266-ESP32-IR-and-Neopixels.html)
## Conseils pris en charge
- Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 / Teensy-LC; Crédits: @PaulStoffregen (Teensy Team)
- Sanguino
- ATmega8, 48, 88, 168, 328
- ATmega8535, 16, 32, 164, 324, 644, 1284,
- ATmega64, 128
- ATtiny 84 / 85
- ESP32 (recevoir seulement)
- ESP8266 est basé sur un ancien code qui n'est pas très récent, mais cela fonctionne raisonnablement bien. Voir https://github.com/markszabo/IRremoteESP8266
Sparkfun Pro Micro
Nous sommes ouverts aux suggestions d'ajout de support pour les nouveaux tableaux, cependant, nous vous recommandons fortement de contacter votre fournisseur et de fournir un soutien de leur côté.
## Spécifications matérielles
| Carte/CPU | Envoyer Pin | Compteurs |
|--------------------------------------------------------------------------|---------------------|-------------------|
| [ATtiny84](https://github.com/SpenceKonde/ATTinyCore) | **6** | **1** |
| [ATtiny85](https://github.com/SpenceKonde/ATTinyCore) | **1** | **TINY0** |
| [ATmega8](https://github.com/MCUdude/MiniCore) | **9** | **1** |
| Atmega32u4 | 5, 9, **13** | 1, 3, **4** |
| [ATmega48, ATmega88, ATmega168, ATmega328](https://github.com/MCUdude/MiniCore) | **3**, 9 | 1, **2** |
| [ATmega1284](https://github.com/MCUdude/MightyCore) | 13, 14, 6 | 1, **2**, 3 |
| [ATmega164, ATmega324, ATmega644](https://github.com/MCUdude/MightyCore) | 13, **14** | 1, **2** |
| [ATmega8535 ATmega16, ATmega32](https://github.com/MCUdude/MightyCore) | **13** | **1** |
| [ATmega64, ATmega128](https://github.com/MCUdude/MegaCore) | **13** | **1** |
| ATmega1280, ATmega2560 | 5, 6, **9**, 11, 46 | 1, **2**, 3, 4, 5 |
| [ESP32](http://esp32.net/) | N/A (insupporté) | **1** |
| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4_HS |
| [Teensy 1.0](https://www.pjrc.com/teensy/) | **17** | **1** |
| [Teensy 2.0](https://www.pjrc.com/teensy/) | 9, **10**, 14 | 1, 3, **4_HS** |
| [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 |
| [Teensy 3.0 / 3.1](https://www.pjrc.com/teensy/) | **5** | **CMT** |
| [Teensy-LC](https://www.pjrc.com/teensy/) | **16** | **TPM1** |
## Patchs expérimentaux
Voici les correctifs strictement pris en charge qui n'ont pas encore été intégrés. Si vous avez des questions, n'hésitez pas à demander ici. Si cela fonctionne, faites le nous savoir!
[Arduino 101](https://github.com/z3t0/Arduino-IRremote/pull/481#issuecomment-311243146)
Le tableau ci-dessus répertorie les temporisations actuellement supportées et les broches d'envoi correspondantes, beaucoup de ces broches supplémentaires sont ouvertes.
## Utilisation
- À faire TODO (Vérifier les exemples pour l'instant)
## Contribution
Si vous voulez contribuer à ce projet:
- Signaler les bogues et les erreurs
- Demander des améliorations
- Créer des problèmes et tirer des requêtes
- Parlez de cette bibliothèque à d'autres personnes
- Contribuer de nouveaux protocoles
Vérifiez ici [ici](Contributing.md) pour quelques guidelines
## Contact
Email: zetoslab@gmail.com
Please only email me if it is more appropriate than creating an Issue / PR. I **will** not respond to requests for adding support for particular boards, unless of course you are the creator of the board and would like to cooperate on the project. I will also **ignore** any emails asking me to tell you how to implement your ideas. However, if you have a private inquiry that you would only apply to you and you would prefer it to be via email, by all means.
## Contributeurs
Check [here](Contributors.md)
@Lsuperman735 French translation
## Copyright
Copyright 2009-2012 Ken Shirriff