Πίνακας περιεχομένων:

Récupérer Les Codes Infra-Rouge Et 433mhz: 4 Βήματα
Récupérer Les Codes Infra-Rouge Et 433mhz: 4 Βήματα

Βίντεο: Récupérer Les Codes Infra-Rouge Et 433mhz: 4 Βήματα

Βίντεο: Récupérer Les Codes Infra-Rouge Et 433mhz: 4 Βήματα
Βίντεο: Télécommande Infra rouge 2/3 2024, Ιούλιος
Anonim
Récupérer Les Codes Infra-Rouge Et 433mhz
Récupérer Les Codes Infra-Rouge Et 433mhz

Le but est d’afficher les codes des télécommandes du style commande de lampe, porte de garage και autre fonctionnant sous 433 mhz (RX433) mais aussi ceux des télécommandes infra-rouge de télévision au autre.

On pourra donc ensuite, grâce à une autre montage, envoyer ces codes et piloter n’importe quoi!

Βήμα 1: Le Montage

Le Montage
Le Montage

Απλό, χωρίς Arduino Nano, une diode réceptrice infra-rouge et un récepteur 433 mhz.

Βήμα 2: Le Code Arduino

// InfraRouge

#περιλαμβάνω

int recvPin = 11; // pin Arduino pour récepteur InfraRouge (TOSP4838)

IRrecv irrecv (recvPin);

// RX433

#περιλαμβάνω

RCSwitch mySwitch = RCSwitch ();

decode_results αποτελέσματα?

void setup ()

{

Serial.begin (9600);

irrecv.enableIRIn ();

irrecv.blink13 (αληθινό); // allume la LED interne lors de l'envoie InfraRouge

mySwitch.enableReceive (0); // Récepteur RX433 (XY-MK-5V) sur pin 2 de Arduino Uno et Nano

}

// affichage des codes InfraRouge

void ircode (decode_results *results)

{

// Panasonic

εάν (αποτελέσματα-> decode_type == ΠΑΝΑΣΟΝΙΚΟ) {

Serial.print (αποτελέσματα-> διεύθυνση, HEX);

Serial.print (":");

}

Serial.print (αποτελέσματα-> τιμή, HEX);

}//κενός

// afficahge des codes encodés

άκυρη κωδικοποίηση (αποκωδικοποίηση_αποτελεσμάτων *αποτελεσμάτων)

{

switch (results-> decode_type) {

Προκαθορισμένο:

περίπτωση ΑΓΝΩΣΤΟ: Serial.print ("Inconnu"); Διακοπή;

θήκη NEC: Serial.print ("NEC"); Διακοπή;

θήκη SONY: Serial.print ("SONY"); Διακοπή;

θήκη RC5: Serial.print ("RC5"); Διακοπή;

θήκη RC6: Serial.print ("RC6"); Διακοπή;

θήκη DISH: Serial.print ("DISH"); Διακοπή;

θήκη SHARP: Serial.print ("SHARP"); Διακοπή;

θήκη JVC: Serial.print ("JVC"); Διακοπή;

θήκη SANYO: Serial.print ("SANYO"); Διακοπή;

θήκη MITSUBISHI: Serial.print ("MITSUBISHI"); Διακοπή;

θήκη SAMSUNG: Serial.print ("SAMSUNG"); Διακοπή;

θήκη LG: Serial.print ("LG"); Διακοπή;

θήκη ΓΙΑΤΙ: Serial.print ("WHYNTER"); Διακοπή;

θήκη AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); Διακοπή;

θήκη PANASONIC: Serial.print ("PANASONIC"); Διακοπή;

θήκη DENON: Serial.print ("Denon"); Διακοπή;

}

}

// dump les résultats

void dumpInfo (decode_results *results)

{

// Ελέγξτε εάν το buffer ξεχείλισε

αν (αποτελέσματα-> υπερχείλιση) {

Serial.println ("Ο κώδικας IR είναι πολύ μεγάλος. Επεξεργασία IRremoteInt.h και αύξηση RAWBUF");

ΕΠΙΣΤΡΟΦΗ;

}

// Εμφάνιση προτύπου κωδικοποίησης

Serial.print ("Κωδικοποίηση:");

κωδικοποίηση (αποτελέσματα).

Serial.println ("");

// Εμφάνιση κώδικα & μήκους

Serial.print ("Κωδικός:");

ircode (αποτελέσματα)?

Serial.print ("(");

Serial.print (αποτελέσματα-> bits, DEC);

Serial.println ("bits");

}

//δομή

void dumpRaw (αποκωδικοποίηση_αποτελεσμάτων *αποτελεσμάτων)

{

// Εκτύπωση ωμών δεδομένων

Serial.print ("Timing [");

Serial.print (αποτελέσματα-> rawlen-1, DEC);

Serial.println ("]:");

για (int i = 1; i rawlen; i ++) {

χωρίς υπογραφή long x = results-> rawbuf * USECPERTICK;

αν (! (i & 1)) {// ζυγό

Serial.print ("-");

if (x <1000) Serial.print ("");

if (x <100) Serial.print ("");

Serial.print (x, DEC);

} else {// περιττός

Serial.print ("");

Serial.print ("+");

if (x <1000) Serial.print ("");

if (x <100) Serial.print ("");

Serial.print (x, DEC);

if (i rawlen-1) Serial.print (","); // ',' δεν χρειάζεται για το τελευταίο

}

εάν (! (i % 8)) Serial.println ("");

}

Serial.println (""); // Νέα γραμμή

}

//+=============================================================================

// Απορρίψτε τη δομή decode_results.

//

void dumpCode (decode_results *results)

{

// Έναρξη δήλωσης

Serial.print ("unsigned int"); // μεταβλητός τύπος

Serial.print ("rawData ["); // όνομα πίνακα

Serial.print (αποτελέσματα-> rawlen - 1, DEC); // μέγεθος πίνακα

Serial.print ("] = {"); // Έναρξη δήλωσης

// Απόρριψη δεδομένων

για (int i = 1; i rawlen; i ++) {

Serial.print (αποτελέσματα-> rawbuf * USECPERTICK, DEC);

if (i rawlen-1) Serial.print (","); // ',' δεν χρειάζεται στο τελευταίο

εάν (! (i & 1)) Serial.print ("");

}

// Λήξη δήλωσης

Serial.print ("};"); //

// Σχόλιο

Serial.print ("//");

κωδικοποίηση (αποτελέσματα).

Serial.print ("");

ircode (αποτελέσματα)?

// Νέα γραμμή

Serial.println ("");

// Τώρα απορρίψτε "γνωστούς" κωδικούς

εάν (αποτελέσματα-> τύπος αποκωδικοποίησης! = ΑΓΝΩΣΤΟ) {

// Ορισμένα πρωτόκολλα έχουν διεύθυνση

εάν (αποτελέσματα-> decode_type == ΠΑΝΑΣΟΝΙΚΟ) {

Serial.print ("unsigned int addr = 0x");

Serial.print (αποτελέσματα-> διεύθυνση, HEX);

Serial.println (";");

}

// Όλα τα πρωτόκολλα έχουν δεδομένα

Serial.print ("unsigned int data = 0x");

Serial.print (αποτελέσματα-> τιμή, HEX);

Serial.println (";");

}

}

κενός βρόχος ()

/********************************************* *InfraRouge ***************************************

{

decode_results αποτελέσματα? // Κάπου για να αποθηκεύσετε τα αποτελέσματα

if (irrecv.decode (& results)) {// Πιάστε έναν κωδικό IR

dumpInfo (& αποτελέσματα); // Εξάγετε τα αποτελέσματα

dumpRaw (& αποτελέσματα); // Εξάγετε τα αποτελέσματα σε μορφή RAW

dumpCode (& αποτελέσματα); // Εξάγετε τα αποτελέσματα ως πηγαίο κώδικα

Serial.println (""); // Κενή γραμμή μεταξύ καταχωρήσεων

irrecv.resume (); // Προετοιμασία για την επόμενη τιμή

}

/********************************************* *** RX433 ****************************************/

εάν (mySwitch.available ())

{

int value = mySwitch.getReceivedValue ();

Serial.println ("RX433");

εάν (τιμή == 0) {

Serial.print ("Codage inconnu");

} άλλο

{

Serial.print ("Reçu");

Serial.print (mySwitch.getReceivedValue ());

Serial.print (" /");

Serial.print (mySwitch.getReceivedBitlength ());

Serial.print ("bit");

Serial.print ("Protocole:");

Serial.println (mySwitch.getReceivedProtocol ());

}

mySwitch.resetAvailable ();

} // RX433

}//βρόχος

Βήμα 3: Infos Sur Les Codes Infra-Rouge

Πρωτόκολλα Il y a plusieurs:

NEC: 32 bit (λεπτομέρειες πρωτοκόλλου)

Sony: 12 ή 20 bits (λεπτομέρειες πρωτοκόλλου) (Κατανόηση απομακρυσμένων κωδικών Sony IR.)

RC5: 12 bit (λεπτομέρειες πρωτοκόλλου)

RC6: 20 ή 36 bit (λεπτομέρειες πρωτοκόλλου)

Ρίξτε Sony et RC5/6, chaque transmission doit être répétés 3 fois!

ΠΡΟΣΟΧΗ: la librairie IRremote.h ne semble pas pouvoir envoyer des codes codés sur plus de 32bits. Les RC6, 36 doivent donc êtres envoyer en raw, qui prennent plus de taille mémoire.

L’envoie des codes se fera avec la librairie IRremote.h

Παράδειγμα: (0x devant le code) και nombre de bits irsend.sendNEC (0xA55A38C7, 32);

Βήμα 4: Πληροφορίες Sur Codes RX433

L’envoie se fera avec la librairie RCSwitch.h

Παράδειγμα mySwitch.send (1975778, 24);

On peut facilement piloter avec cela des prises commandés.

Συνιστάται: