Bonjour
oui ils ont simplifié l'interface mais ça fait que les anciens scripts ont des alertes... essayez avec ce code (non testé, j'ai mis la console à 115200 bauds):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <IRremote.h>
const byte brocheCapteurIR = 8;
void afficherData()
{
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
Serial.println(F("protocole Inconnu"));
} else {
Serial.print(F("protocole : "));
Serial.println(getProtocolString(IrReceiver.decodedIRData.protocol));
Serial.print(F("Valeur = 0x"));
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
Serial.write('\t');
Serial.println(IrReceiver.decodedIRData.decodedRawData, DEC);
}
}
void setup()
{
Serial.begin(115200); // <<=== ATTENTION CONSOLE SERIE À 115200 BAUDS
IrReceiver.begin(brocheCapteurIR);
}
void loop() {
if (IrReceiver.decode()) { // reçoit un code IR
afficherData();
IrReceiver.resume(); // Valeur suivante
}
} |
Une fois décodées, les données sont maintenant dans la structure IrReceiver.decodedIRData qui est de type IRData:
1 2 3 4 5 6 7 8 9 10
| struct IRData {
decode_type_t protocol; ///< UNKNOWN, NEC, SONY, RC5, ...
uint16_t address; ///< Decoded address
uint16_t command; ///< Decoded command
uint16_t extra; ///< Used by MagiQuest and for Kaseikyo unknown vendor ID
uint8_t numberOfBits; ///< Number of bits received for data (address + command + parity) - to determine protocol length if different length are possible (currently only Sony).
uint8_t flags; ///< See definitions above
uint32_t decodedRawData; ///< up to 32 bit decoded raw data, formerly used for send functions.
irparams_struct *rawDataPtr; /// pointer of the raw timing data to be decoded
}; |
Vous y retrouvez donc aussi le protocole, et d'autres infos suivant ce que vous voulez faire.
Pour l'affichage du protocole, plutôt que de faire vous même les test et afficher son nom, autant utiliser la bibliothèque qui comprend une fonction getProtocolString() qui vous rend un pointeur vers une chaîne de caractères pour l'affichage. ça simplifie donc le code.
au lieu d'imprimer vous même les infos à la main, vous pourriez aussi appeler
IrReceiver.printIRResultShort(&Serial);
Partager