Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Le but est d’afficher les code des télécommandes du style commandnde de lampe, porte de garage et autre fonctionnant s 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 montaža, izaslanik ces kodove i piloter nije uvezio!
Korak 1: Le Montage
Jednostavno, bez Arduino Nano-a, bez dioda za infracrvenu vezu i prijemnik od 433 mhz.
Korak 2: Le Code Arduino
// InfraRouge
#include
int recvPin = 11; // pin Arduino za prijemnik InfraRouge (TOSP4838)
IRrecv irecv (recvPin);
// RX433
#include
RCSwitch mySwitch = RCSwitch ();
decode_results rezultati;
void setup ()
{
Serial.begin (9600);
unrecv.enableIRIn ();
unrecv.blink13 (true); // allume la LED internetske veze za slanje InfraRouge
mySwitch.enableReceive (0); // Receiveur RX433 (XY-MK-5V) sur pin 2 de Arduino Uno et Nano
}
// afiksacija kodova InfraRouge
void ircode (decode_results *rezultati)
{
// Panasonic
if (rezultati-> decode_type == PANASONIC) {
Serial.print (rezultati-> adresa, HEX);
Serial.print (":");
}
Serial.print (rezultati-> vrijednost, HEX);
} // void
// afficahge des code encodés
kodiranje praznine (decode_results *rezultati)
{
switch (rezultati-> decode_type) {
zadano:
case UNKNOWN: Serial.print ("Inconnu"); break;
kućište NEC: Serial.print ("NEC"); break;
kućište SONY: Serial.print ("SONY"); break;
kućište RC5: Serial.print ("RC5"); break;
kućište RC6: Serial.print ("RC6"); break;
kućište DISH: Serial.print ("DISH"); break;
kućište SHARP: Serial.print ("SHARP"); break;
kućište JVC: Serial.print ("JVC"); break;
kućište SANYO: Serial.print ("SANYO"); break;
kućište MITSUBISHI: Serial.print ("MITSUBISHI"); break;
kućište SAMSUNG: Serial.print ("SAMSUNG"); break;
kućište LG: Serial.print ("LG"); break;
slučaj WHYNTER: Serial.print ("WHYNTER"); break;
slučaj AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); break;
kućište PANASONIC: Serial.print ("PANASONIC"); break;
kućište DENON: Serial.print ("Denon"); break;
}
}
// dump les résultats
void dumpInfo (decode_results *rezultati)
{
// Provjerite je li bafer preplavljen
if (rezultati-> prelijevanje) {
Serial.println ("IR kod predug. Uredite IRremoteInt.h i povećajte RAWBUF");
return;
}
// Prikaži standard kodiranja
Serial.print ("Encodage:");
kodiranje (rezultati);
Serial.println ("");
// Prikaži kôd i dužinu
Serial.print ("Kod:");
ircode (rezultati);
Serial.print ("(");
Serial.print (rezultati-> bitovi, DEC);
Serial.println ("bitovi")));
}
//struktura
void dumpRaw (decode_results *rezultati)
{
// Ispis sirovih podataka
Serial.print ("Timing [");
Serial.print (rezultati-> rawlen-1, DEC);
Serial.println ("]:");
for (int i = 1; i rawlen; i ++) {
unsigned long x = results-> rawbuf * USECPERTICK;
if (! (i & 1)) {// parno
Serial.print ("-");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
} else {// neparno
Serial.print ("");
Serial.print ("+");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' nije potrebno za zadnji
}
if (! (i % 8)) Serial.println ("");
}
Serial.println (""); // Novi red
}
//+=============================================================================
// Izbacivanje strukture decode_results.
//
void dumpCode (decode_results *rezultati)
{
// Pokretanje deklaracije
Serial.print ("unsigned int"); // tip varijable
Serial.print ("rawData ["); // ime niza
Serial.print (rezultati-> neobrađeno - 1, DEC); // veličina niza
Serial.print ("] = {"); // Pokretanje deklaracije
// Izbaci podatke
for (int i = 1; i rawlen; i ++) {
Serial.print (rezultati-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' nije potrebno na zadnjoj
if (! (i & 1)) Serial.print ("");
}
// Kraj deklaracije
Serial.print ("};"); //
// Komentar
Serial.print ("//");
kodiranje (rezultati);
Serial.print ("");
ircode (rezultati);
// Novi red
Serial.println ("");
// Sada izbacite "poznate" kodove
if (rezultati-> decode_type! = NEPOZNATO) {
// Neki protokoli imaju adresu
if (rezultati-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (rezultati-> adresa, HEX);
Serial.println (";");
}
// Svi protokoli imaju podatke
Serial.print ("unsigned int data = 0x");
Serial.print (rezultati-> vrijednost, HEX);
Serial.println (";");
}
}
void loop ()
/************************************************* *InfraRouge ******************************************/
{
decode_results rezultati; // Negdje za spremanje rezultata
if (unrecv.decode (& results)) {// Uhvatite IR kod
dumpInfo (& rezultati); // Ispisati rezultate
dumpRaw (& rezultati); // Rezultate ispišite u RAW formatu
dumpCode (& rezultati); // Rezultate ispišite kao izvorni kod
Serial.println (""); // Prazna linija između unosa
unrecv.resume (); // Pripremite se za sljedeću vrijednost
}
/************************************************* *** RX433 ********************************************/
if (mySwitch.available ())
{
int vrijednost = mySwitch.getReceivedValue ();
Serial.println ("RX433");
if (vrijednost == 0) {
Serial.print ("Codage inconnu");
} else
{
Serial.print ("Reçu");
Serial.print (mySwitch.getReceivedValue ());
Serial.print (" /");
Serial.print (mySwitch.getReceivedBitlength ());
Serial.print ("bit");
Serial.print ("Protokol:");
Serial.println (mySwitch.getReceivedProtocol ());
}
mySwitch.resetAvailable ();
} // RX433
}//petlja
Korak 3: Infos Sur Les Codes Infra-Rouge
Il y a plusieurs protokoli:
NEC: 32 bita (detalji protokola)
Sony: 12 ili 20 bita (detalji protokola) (Razumevanje Sonyjevih IR daljinskih kodova.)
RC5: 12 bita (detalji protokola)
RC6: 20 ili 36 bita (detalji protokola)
Sipajte Sony i RC5/6, prijenos u obliku ručke do 3 étre repétés!
PAŽNJA: Laborairie IRremote.h nije poslao pošiljaoca kodova za šifre nad 32 bita. Les RC6, 36 doivent donc êtres envoyer en raw, qui prennent plus de taille mémoire.
L’envoie des code se fera avec la librairie IRremote.h
Primjer: (0x devant le code) i nombre de bits irsend.sendNEC (0xA55A38C7, 32);
Korak 4: Infos Sur kodovi RX433
L’envoie se fera avec la librairie RCSwitch.h
Primjer mySwitch.send (1975778, 24);
On peut facilement pilote avec cela des prises commandes.