สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 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.
บนห้องน้ำที่มีห้องน้ำในตัว, grâce à une autre montage, envoyer ces codes et piloter n'importe quoi !
ขั้นตอนที่ 1: Le Montage
ง่าย, un Arduino Nano, une diode réceptrice infra-rouge และ un récepteur 433 mhz
ขั้นตอนที่ 2: Le Code Arduino
//อินฟรารูจ
#รวม
int recvPin = 11; // ปักหมุด Arduino สำหรับเรเซปเตอร์ InfraRouge (TOSP4838)
IRrecv irrecv(recvPin);
//RX433
#รวม
RCSwitch mySwitch = RCSwitch ();
ผลลัพธ์ decode_results;
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);// ภาพรวมของ LED ภายใน lors de l'envoie InfraRouge
mySwitch.enableReceive(0); // Récepteur RX433 (XY-MK-5V) กับพิน 2 ของ Arduino Uno et Nano
}
// แนบรหัส InfraRouge
เป็นโมฆะ ircode (decode_results * ผลลัพธ์)
{
// พานาโซนิค
ถ้า (ผล->decode_type == PANASONIC) {
Serial.print(ผลลัพธ์->ที่อยู่ HEX);
Serial.print(":");
}
Serial.print (ผลลัพธ์ -> ค่า HEX);
}//เป็นโมฆะ
// afficahge des codes encodes
การเข้ารหัสเป็นโมฆะ (decode_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"); หยุดพัก;
กรณี WHYNTER: Serial.print ("WHYNTER"); หยุดพัก;
กรณี AIWA_RC_T501: Serial.print("AIWA_RC_T501"); หยุดพัก;
กรณี PANASONIC: Serial.print ("PANASONIC"); หยุดพัก;
กรณี DENON: Serial.print ("Denon"); หยุดพัก;
}
}
// dump les résultats
เป็นโมฆะ dumpInfo (decode_results * ผลลัพธ์)
{
// ตรวจสอบว่าบัฟเฟอร์ล้น
ถ้า (ผลลัพธ์ -> ล้น) {
Serial.println("รหัส IR ยาวเกินไป แก้ไข IRremoteInt.h และเพิ่ม RAWBUF");
กลับ;
}
// แสดงมาตรฐานการเข้ารหัส
Serial.print("การเข้ารหัส: ");
การเข้ารหัส (ผลลัพธ์);
Serial.println("");
// แสดงรหัส & ความยาว
Serial.print("รหัส: ");
ircode(ผลลัพธ์);
Serial.print("(");
Serial.print(ผล->บิต ธ.ค.);
Serial.println("บิต)");
}
//โครงสร้าง
เป็นโมฆะ dumpRaw (decode_results * ผลลัพธ์)
{
// พิมพ์ข้อมูลดิบ
Serial.print("ระยะเวลา[");
Serial.print(ผล->รอว์เลน-1 ธ.ค.);
Serial.println("]: ");
สำหรับ (int i = 1; i rawlen; i++) {
unsigned long x = results->rawbuf * USECPERTICK;
if (!(i & 1)) { // เท่ากัน
Serial.print("-");
ถ้า (x < 1000) Serial.print(" ");
ถ้า (x < 100) Serial.print(" ");
Serial.print(x, ธ.ค.);
} อื่น ๆ { // คี่
Serial.print(" ");
Serial.print("+");
ถ้า (x < 1000) Serial.print(" ");
ถ้า (x < 100) Serial.print(" ");
Serial.print(x, ธ.ค.);
ถ้า (ฉัน rawlen-1) Serial.print(", "); //',' ไม่จำเป็นสำหรับอันสุดท้าย
}
ถ้า (!(i % 8)) Serial.println("");
}
Serial.println(""); // ขึ้นบรรทัดใหม่
}
//+=============================================================================
// ดัมพ์โครงสร้าง decode_results ออก
//
เป็นโมฆะ dumpCode (decode_results * ผลลัพธ์)
{
// เริ่มการประกาศ
Serial.print("unsigned int "); // ประเภทตัวแปร
Serial.print("ข้อมูลดิบ["); // ชื่ออาร์เรย์
Serial.print(ผล->รอว์เลน - 1 ธ.ค.); // ขนาดอาร์เรย์
Serial.print("] = {"); // เริ่มการประกาศ
// ดัมพ์ข้อมูล
สำหรับ (int i = 1; i rawlen; i++) {
Serial.print(ผล->rawbuf * USECPERTICK ธ.ค.);
ถ้า (ฉัน rawlen-1) Serial.print(", "); // ', ' ไม่จำเป็นในอันสุดท้าย
ถ้า (!(i & 1)) Serial.print(" ");
}
// สิ้นสุดการประกาศ
Serial.print("};"); //
// ความคิดเห็น
Serial.print(" // ");
การเข้ารหัส (ผลลัพธ์);
Serial.print(" ");
ircode(ผลลัพธ์);
// ขึ้นบรรทัดใหม่
Serial.println("");
// ตอนนี้ดัมพ์รหัส "ที่รู้จัก"
ถ้า (ผล->decode_type != UNKNOWN) {
// โปรโตคอลบางตัวมีที่อยู่
ถ้า (ผล->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(ผลลัพธ์->ที่อยู่ HEX);
Serial.println(";");
}
// โปรโตคอลทั้งหมดมี data
Serial.print("ข้อมูล int ที่ไม่ได้ลงชื่อ = 0x");
Serial.print (ผลลัพธ์ -> ค่า HEX);
Serial.println(";");
}
}
วงโมฆะ ()
/****************************************************** * InfraRouge ************************************************/
{
ผลลัพธ์ decode_results; // ที่ไหนสักแห่งที่จะเก็บผลลัพธ์
if (irrecv.decode (&results)) { // หยิบ IR code
dumpInfo(&ผลลัพธ์); // ส่งออกผลลัพธ์
dumpRaw(&ผลลัพธ์); // ส่งออกผลลัพธ์ในรูปแบบ RAW
dumpCode(&ผลลัพธ์); // ส่งออกผลลัพธ์เป็นซอร์สโค้ด
Serial.println(""); // ช่องว่างระหว่างรายการ
irrecv.resume(); // เตรียมรับค่าต่อไป
}
/****************************************************** *** RX433 **************************************************/
ถ้า (mySwitch.available())
{
ค่า int = mySwitch.getReceivedValue();
Serial.println("RX433");
ถ้า (ค่า == 0) {
Serial.print("Codage inconnu");
} อื่น
{
Serial.print("บันทึก");
Serial.print(mySwitch.getReceivedValue());
Serial.print(" / ");
Serial.print(mySwitch.getReceivedBitlength());
Serial.print("บิต");
Serial.print("โปรโตคอล: ");
Serial.println(mySwitch.getReceivedProtocol());
}
mySwitch.resetAvailable();
}//RX433
}//ลูป
ขั้นตอนที่ 3: Infos Sur Les Codes Infra-Rouge
Il y a plusiers โปรโตคอล:
NEC: 32 บิต (รายละเอียดโปรโตคอล)
Sony: 12 ou 20 บิต (รายละเอียดโปรโตคอล) (ทำความเข้าใจกับรีโมทควบคุมของ Sony IR)
RC5: 12 บิต (รายละเอียดโปรโตคอล)
RC6: 20 ou 36 บิต (รายละเอียดโปรโตคอล)
เท Sony et RC5/6, เกียร์ chaque 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) et le nombre de bits irsend.sendNEC(0xA55A38C7, 32);
ขั้นตอนที่ 4: ข้อมูลรหัส Sur RX433
L'envoie se fera avec la librairie RCSwitch.h. แชร์
ตัวอย่าง mySwitch.send(1975778, 24);
เกี่ยวกับนักบินอำนวยความสะดวก peut avec cela des prises commandés