Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Le but est d’afficher les codes des télécommandes du style commande de lampe, porte de garage et 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!
Pasul 1: Le Montage
Simple, un Arduino Nano, une diode réceptrice infra-rouge și un récepteur 433 mhz.
Pasul 2: Le Code Arduino
// InfraRouge
#include
int recvPin = 11; // pin Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#include
RCSwitch mySwitch = RCSwitch ();
rezultate decode_results;
configurare nulă ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
irrecv.blink13 (true); // 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
cod nul irid (rezultate decode_results *)
{
// Panasonic
if (results-> decode_type == PANASONIC) {
Serial.print (rezultate-> adresă, HEX);
Serial.print (":");
}
Serial.print (rezultate-> valoare, HEX);
} // nul
// afficahge des codes encodés
codificare nulă (decode_results * rezultate)
{
comutare (rezultate-> decodare_tip) {
Mod implicit:
caz NECUNOSCUT: Serial.print ("Inconnu"); pauză;
caz NEC: Serial.print ("NEC"); pauză;
carcasa SONY: Serial.print ("SONY"); pauză;
caz RC5: Serial.print ("RC5"); pauză;
caz RC6: Serial.print ("RC6"); pauză;
caz DISH: Serial.print ("DISH"); pauză;
carcasa SHARP: Serial.print ("SHARP"); pauză;
caz JVC: Serial.print ("JVC"); pauză;
caz SANYO: Serial.print ("SANYO"); pauză;
carcasa MITSUBISHI: Serial.print ("MITSUBISHI"); pauză;
caz SAMSUNG: Serial.print ("SAMSUNG"); pauză;
carcasa LG: Serial.print ("LG"); pauză;
caz WHYNTER: Serial.print ("WHYNTER"); pauză;
caz AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); pauză;
caz PANASONIC: Serial.print ("PANASONIC"); pauză;
caz DENON: Serial.print ("Denon"); pauză;
}
}
// aruncați rezultatele
void dumpInfo (decode_results * rezultate)
{
// Verificați dacă bufferul s-a revărsat
if (rezultate-> depășire) {
Serial.println ("Codul IR prea lung. Editați IRremoteInt.h și măriți RAWBUF");
întoarcere;
}
// Afișare standard de codare
Serial.print ("Codare:");
codificare (rezultate);
Serial.println ("");
// Afișați codul și lungimea
Serial.print ("Cod:");
ircode (rezultate);
Serial.print ("(");
Serial.print (rezultate-> biți, DEC);
Serial.println ("biți)");
}
//structura
void dumpRaw (decode_results * rezultate)
{
// Imprimați date brute
Serial.print ("Timing [");
Serial.print (rezultate-> rawlen-1, DEC);
Serial.println ("]:");
for (int i = 1; i rawlen; i ++) {
unsigned long x = results-> rawbuf * USECPERTICK;
if (! (i & 1)) {// chiar
Serial.print ("-");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
} else {// ciudat
Serial.print ("");
Serial.print ("+");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' nu este necesar pentru ultima
}
if (! (i% 8)) Serial.println ("");
}
Serial.println (""); // Linie nouă
}
//+=============================================================================
// Renunțați la structura decode_results.
//
void dumpCode (decode_results * rezultate)
{
// Începeți declarația
Serial.print ("unsigned int"); // tip variabil
Serial.print ("rawData ["); // numele matricei
Serial.print (rezultate-> rawlen - 1, DEC); // dimensiunea matricei
Serial.print ("] = {"); // Începeți declarația
// Renunțați la date
for (int i = 1; i rawlen; i ++) {
Serial.print (rezultate-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' nu este necesar pe ultimul
if (! (i & 1)) Serial.print ("");
}
// Declarație de încheiere
Serial.print ("};"); //
// Cometariu
Serial.print ("//");
codificare (rezultate);
Serial.print ("");
ircode (rezultate);
// Linie nouă
Serial.println ("");
// Acum aruncați codurile „cunoscute”
if (results-> decode_type! = UNKNOWN) {
// Unele protocoale au o adresă
if (results-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (rezultate-> adresă, HEX);
Serial.println (";");
}
// Toate protocoalele au date
Serial.print ("nesemnate int data = 0x");
Serial.print (rezultate-> valoare, HEX);
Serial.println (";");
}
}
bucla nulă ()
/ ************************************************** * InfraRouge ******************************************* /
{
rezultate decode_results; // Undeva pentru a stoca rezultatele
if (irrecv.decode (& results)) {// Prindeți un cod IR
dumpInfo (& rezultate); // Afișați rezultatele
dumpRaw (& rezultate); // Afișați rezultatele în format RAW
dumpCode (& rezultate); // Afișați rezultatele ca cod sursă
Serial.println (""); // Linie goală între intrări
irrecv.resume (); // Pregătește-te pentru următoarea valoare
}
/ ************************************************** *** RX433 ******************************************** /
if (mySwitch.available ())
{
valoare int = mySwitch.getReceivedValue ();
Serial.println ("RX433");
if (valoare == 0) {
Serial.print ("Codage inconnu");
} altfel
{
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
}//buclă
Pasul 3: Infos Sur Les Codes Infra-Rouge
Il și mai multe protocoale:
NEC: 32 biți (detalii protocol)
Sony: 12 sau 20 de biți (detalii protocol) (Înțelegerea codurilor de la distanță IR Sony.)
RC5: 12 biți (detalii protocol)
RC6: 20 sau 36 biți (detalii protocol)
Pour Sony et RC5 / 6, chaque transmission doit être répétés 3 fois!
ATENȚIE: 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 cu la librairie IRremote.h
Exemplu: (0x în fața codului) și numărul de biți irsend.sendNEC (0xA55A38C7, 32);
Pasul 4: Informații privind codurile RX433
L’envoie se fera cu la librairie RCSwitch.h
Exemple mySwitch.send (1975778, 24);
On peut facilement piloter with cela des prises commandés.