INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Le but est d'afficher les codes des télécommandes du style commande de lampe, porte de garage en autre fonctionnant sous 433 mhz (RX433) mais aussi ceux des télécommandes infra-rouge de télévision au autre.
Op pourra donc ensuite, grâce à une autre montage, gesant ces codes en piloter n’importe quoi!
Stap 1: Le Montage
Eenvoudig, Arduino Nano, une diode réceptrice infra-rouge en un récepteur 433 mhz.
Stap 2: Le Code Arduino
// InfraRouge
#insluit
int recvPin = 11; // pen Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#insluit
RCSwitch mySwitch = RCSwitch ();
resultate van dekode_resultate;
leemte opstelling ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
irrecv.blink13 (waar); // allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive (0); // Récepteur RX433 (XY-MK-5V) op pen 2 van Arduino Uno et Nano
}
// affichage des codes InfraRouge
ongeldig ircode (dekodeeresultate *resultate)
{
// Panasonic
as (resultate-> decode_type == PANASONIC) {
Serial.print (resultate-> adres, HEX);
Serial.print (":");
}
Serial.print (resultate-> waarde, HEX);
} // leeg
// afficahge des codes encodés
leemte -kodering (dekode_resultate *resultate)
{
skakelaar (resultate-> dekodeertipe) {
verstek:
saak onbekend: Serial.print ("Inconnu"); breek;
saak NEC: Serial.print ("NEC"); breek;
saak SONY: Serial.print ("SONY"); breek;
geval RC5: Serial.print ("RC5"); breek;
saak RC6: Serial.print ("RC6"); breek;
saak GEREG: Serial.print ("GEREG"); breek;
geval SHARP: Serial.print ("SHARP"); breek;
saak JVC: Serial.print ("JVC"); breek;
saak SANYO: Serial.print ("SANYO"); breek;
saak MITSUBISHI: Serial.print ("MITSUBISHI"); breek;
saak SAMSUNG: Serial.print ("SAMSUNG"); breek;
geval LG: Serial.print ("LG"); breek;
geval WHYNTER: Serial.print ("WHYNTER"); breek;
saak AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); breek;
saak PANASONIC: Serial.print ("PANASONIC"); breek;
saak DENON: Serial.print ("Denon"); breek;
}
}
// dump les résultats
leegte dumpInfo (dekodeeresultate *resultate)
{
// Kyk of die buffer oorloop
as (resultate-> oorloop) {
Serial.println ("IR -kode te lank. Wysig IRremoteInt.h en verhoog RAWBUF");
terugkeer;
}
// Toon koderingstandaard
Serial.print ("Encodage:");
kodering (resultate);
Serial.println ("");
// Wys kode en lengte
Serial.print ("Kode:");
ircode (resultate);
Serial.print ("(");
Serial.print (resultate-> bits, DEC);
Serial.println ("bits)");
}
// struktuur
void dumpRaw (decode_results *resultate)
{
// Druk rou data af
Serial.print ("Tydsberekening [");
Serial.print (resultate-> rawlen-1, DEC);
Serial.println ("]:");
vir (int i = 1; i rawlen; i ++) {
ongetekende lang x = resultate-> rawbuf * USECPERTICK;
as (! (i & 1)) {// selfs
Serial.print ("-");
as (x <1000) Serial.print ("");
as (x <100) Serial.print ("");
Serial.print (x, DEC);
} anders {// vreemd
Serial.print ("");
Serial.print ("+");
as (x <1000) Serial.print ("");
as (x <100) Serial.print ("");
Serial.print (x, DEC);
as (i rawlen-1) Serial.print (","); // ',' nie nodig vir die laaste een nie
}
as (! (i % 8)) Serial.println ("");
}
Serial.println (""); // Nuwe lyn
}
//+=============================================================================
// Verwyder die decode_results -struktuur.
//
void dumpCode (decode_results *resultate)
{
// Begin verklaring
Serial.print ("unsigned int"); // veranderlike tipe
Serial.print ("rawData ["); // skikking naam
Serial.print (resultate-> rawlen - 1, DES); // skikking grootte
Serial.print ("] = {"); // Begin verklaring
// stort data
vir (int i = 1; i rawlen; i ++) {
Serial.print (resultate-> rawbuf * USECPERTICK, DEC);
as (i rawlen-1) Serial.print (","); // ',' nie nodig op die laaste een nie
as (! (i & 1)) Serial.print ("");
}
// Beëindig verklaring
Serial.print ("};"); //
// Lewer kommentaar
Serial.print ("//");
kodering (resultate);
Serial.print ("");
ircode (resultate);
// Nuwe lyn
Serial.println ("");
// Gooi nou "bekende" kodes weg
if (results-> decode_type! = UNKNOWN) {
// Sommige protokolle het 'n adres
as (resultate-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (resultate-> adres, HEX);
Serial.println (";");
}
// Alle protokolle het data
Serial.print ("unsigned int data = 0x");
Serial.print (resultate-> waarde, HEX);
Serial.println (";");
}
}
leemte lus ()
/************************************************ *InfraRouge ****************************************/
{
resultate van dekode_resultate; // Iewers om die resultate te stoor
if (irrecv.decode (& resultate)) {// Gryp 'n IR -kode
dumpInfo (& resultate); // Gee die resultate
dumpRaw (& resultate); // Stel die resultate in RAW -formaat af
dumpCode (& resultate); // Stel die resultate as bronkode in
Serial.println (""); // Leë lyn tussen inskrywings
irrecv.resume (); // Berei voor vir die volgende waarde
}
/************************************************ *** RX433 *******************************************/
as (mySwitch.available ())
{
int waarde = mySwitch.getReceivedValue ();
Serial.println ("RX433");
as (waarde == 0) {
Serial.print ("Codage inconnu");
} anders
{
Serial.print ("Reçu");
Serial.print (mySwitch.getReceivedValue ());
Serial.print (" /");
Serial.print (mySwitch.getReceivedBitlength ());
Serial.print ("bietjie");
Serial.print ("Protocole:");
Serial.println (mySwitch.getReceivedProtocol ());
}
mySwitch.resetAvailable ();
} // RX433
} // lus
Stap 3: Infos Sur Les Codes Infra-Rouge
Die plusprotokolle:
NEC: 32 bis (protokolbesonderhede)
Sony: 12 of 20 bisse (protokolbesonderhede) (Sony IR -afstandskodes verstaan.)
RC5: 12 bisse (protokolbesonderhede)
RC6: 20 ou 36 bisse (protokolbesonderhede)
Giet Sony et RC5/6, chaque transmissie kan drie répétés gee!
AANDAG: 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
Voorbeeld: (0x devant le code) et le nombre de bits irsend.sendNEC (0xA55A38C7, 32);
Stap 4: Inligting oor kodes RX433
L'envoie se fera avec la librairie RCSwitch.h
Voorbeeld mySwitch.send (1975778, 24);
Op peiling facilement piloter avec cela des prises commandés.