Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
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.
Di pourra donc ensuite, grâce une autre montage, envoyer ces codes et piloter n'importe quoi !
Langkah 1: Le Montage
Sederhana, tanpa Arduino Nano, penerima dioda infra-rouge dan penerima 433 mhz.
Langkah 2: Le Kode Arduino
//InfraRouge
#termasuk
int recvPin = 11; //pin Arduino tuangkan penerima InfraRouge (TOSP4838)
IRrecv irecv(recvPin);
//RX433
#termasuk
RCSwitch mySwitch = RCSwitch();
hasil decode_results;
batalkan pengaturan ()
{
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);//allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive(0); // Penerima RX433 (XY-MK-5V) dengan pin 2 dari Arduino Uno dan Nano
}
// affichage des kode InfraRouge
void ircode (decode_results *results)
{
//Panasonic
if (hasil->decode_type == PANASONIC) {
Serial.print(hasil->alamat, HEX);
Serial.print(":");
}
Serial.print(hasil->nilai, HEX);
}//ruang kosong
// afficahge des codes encodes
pengkodean batal (decode_results *results)
{
beralih (hasil->decode_type) {
bawaan:
kasus TIDAK DIKETAHUI: Serial.print("Inconnu"); merusak;
kasus NEC: Serial.print("NEC"); merusak;
kasus SONY: Serial.print("SONY"); merusak;
kasus RC5: Serial.print("RC5"); merusak;
kasus RC6: Serial.print("RC6"); merusak;
kasus DISH: Serial.print("DISH"); merusak;
kasus SHARP: Serial.print("SHARP"); merusak;
kasus JVC: Serial.print("JVC"); merusak;
kasus SANYO: Serial.print("SANYO"); merusak;
kasus MITSUBISHI: Serial.print("MITSUBISHI"); merusak;
kasus SAMSUNG: Serial.print("SAMSUNG"); merusak;
kasus LG: Serial.print("LG"); merusak;
kasus MENGAPA: Serial.print("MENGAPA"); merusak;
kasus AIWA_RC_T501: Serial.print("AIWA_RC_T501"); merusak;
kasus PANASONIC: Serial.print("PANASONIC"); merusak;
kasus DENON: Serial.print("Denon"); merusak;
}
}
// dump les hasil
void dumpInfo (decode_results *results)
{
// Periksa apakah buffer meluap
if (hasil->melimpah) {
Serial.println("Kode IR terlalu panjang. Edit IRremoteInt.h dan tingkatkan RAWBUF");
kembali;
}
// Tampilkan standar Pengkodean
Serial.print("Enkodasi: ");
pengkodean (hasil);
Serial.println("");
// Tampilkan Kode & panjang
Serial.print("Kode: ");
ircode(hasil);
Serial.print("(");
Serial.print(hasil->bit, DEC);
Serial.println("bit)");
}
//struktur
void dumpRaw (decode_results *results)
{
// Mencetak data mentah
Serial.print("Waktu[");
Serial.print(hasil->rawlen-1, DEC);
Serial.println("]: ");
for (int i = 1; i rawlen; i++) {
unsigned long x = hasil->rawbuf * USECPERTICK;
if (!(i & 1)) { // genap
Serial.print("-");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
} else { // ganjil
Serial.print("");
Serial.print("+");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
if (i rawlen-1) Serial.print(", "); //', ' tidak diperlukan untuk yang terakhir
}
if (!(i % 8)) Serial.println("");
}
Serial.println(""); // Garis baru
}
//+=============================================================================
// Buang struktur decode_results.
//
void dumpCode (decode_results *results)
{
// Mulai deklarasi
Serial.print("int tidak bertanda"); // tipe variabel
Serial.print("Data mentah["); // nama larik
Serial.print(hasil->rawlen - 1, DEC); // ukuran larik
Serial.print("] = {"); // Mulai deklarasi
// Membuang data
for (int i = 1; i rawlen; i++) {
Serial.print(hasil->rawbuf * USECPERTICK, DEC);
if (saya rawlen-1) Serial.print(", "); // ', ' tidak diperlukan pada yang terakhir
if (!(i & 1)) Serial.print(" ");
}
// Akhiri deklarasi
Serial.print("};"); //
// Komentar
Serial.print(" // ");
pengkodean (hasil);
Serial.print("");
ircode(hasil);
// Garis baru
Serial.println("");
// Sekarang buang kode "dikenal"
if (hasil->decode_type != TIDAK DIKETAHUI) {
// Beberapa protokol memiliki alamat
if (hasil->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(hasil->alamat, HEX);
Serial.println(";");
}
// Semua protokol memiliki data
Serial.print("data int tidak ditandatangani = 0x");
Serial.print(hasil->nilai, HEX);
Serial.println(";");
}
}
lingkaran kosong ()
/************************************************* * InfraRouge ******************************************/
{
hasil decode_results; // Tempat untuk menyimpan hasil
if (irrecv.decode(&results)) { // Ambil kode IR
dumpInfo(&hasil); // Keluarkan hasilnya
dumpRaw(&hasil); // Keluarkan hasil dalam format RAW
dumpCode(&hasil); // Keluarkan hasilnya sebagai kode sumber
Serial.println(""); // Baris kosong di antara entri
irrecv.resume(); // Siapkan untuk nilai berikutnya
}
/************************************************ *** RX433 ********************************************/
jika (mySwitch.available())
{
int nilai = mySwitch.getReceivedValue();
Serial.println("RX433");
jika (nilai == 0) {
Serial.print("Codage inconnu");
} lain
{
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
}//lingkaran
Langkah 3: Infos Sur Les Codes Infra-Rouge
I y a plusieurs protokol:
NEC: 32 bit (detail protokol)
Sony: 12 ou 20 bit (detail protokol)(Memahami kode remote IR Sony.)
RC5: 12 bit (detail protokol)
RC6: 20 ou 36 bit (detail protokol)
Tuang Sony et RC5/6, transmisi chaque doit tre répétés 3 fois !
PERHATIAN: la librairie IRremote.h ne semble pas pouvoir envoyer des codes codes 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
Contoh: (0x devant le code) et le nombre de bits irsend.sendNEC(0xA55A38C7, 32);
Langkah 4: Infos Sur Codes RX433
L'envoie se fera avec la librairie RCSwitch.h
Contoh mySwitch.send(1975778, 24);
Di peut facilement piloter avec cela des prises commandés.