Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Le but est d’afficher les Code des télécommandes du style commande de lampe, porte de gara et autre fonctionnant sous 433 mhz (RX433) mais aussi ceux des télécommandes Infra-rouge de télévision au autre.
Trên pourra donc ensuite, bản dựng phim grâce à une autre, envoyer ces Code et piloter n’importe quoi!
Bước 1: Le Montage
Đơn giản, không Arduino Nano, diode réceptrice Infra-rouge et un récepteur 433 mhz.
Bước 2: Le Code Arduino
// InfraRouge
#bao gồm
int recvPin = 11; // pin Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv không thể thay đổi (recvPin);
// RX433
#bao gồm
RCSwitch mySwitch = RCSwitch ();
giải mã kết quả;
void setup ()
{
Serial.begin (9600);
không thể thay đổi.enableIRIn ();
Uncv.blink13 (true); // allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive (0); // Chân cắm Récepteur RX433 (XY-MK-5V) 2 de Arduino Uno et Nano
}
// mã affichage des InfraRouge
void ircode (decode_results * results)
{
// Panasonic
if (results-> decode_type == PANASONIC) {
Serial.print (kết quả-> địa chỉ, HEX);
Serial.print (":");
}
Serial.print (results-> value, HEX);
} // vô hiệu
// afficahge des mã encodés
mã hóa void (decode_results * kết quả)
{
switch (results-> decode_type) {
vỡ nợ:
case UNKNOWN: Serial.print ("Inconnu"); nghỉ;
case NEC: Serial.print ("NEC"); nghỉ;
case SONY: Serial.print ("SONY"); nghỉ;
case RC5: Serial.print ("RC5"); nghỉ;
case RC6: Serial.print ("RC6"); nghỉ;
case DISH: Serial.print ("DISH"); nghỉ;
case SHARP: Serial.print ("SHARP"); nghỉ;
case JVC: Serial.print ("JVC"); nghỉ;
case SANYO: Serial.print ("SANYO"); nghỉ;
case MITSUBISHI: Serial.print ("MITSUBISHI"); nghỉ;
case SAMSUNG: Serial.print ("SAMSUNG"); nghỉ;
case LG: Serial.print ("LG"); nghỉ;
case WHYNTER: Serial.print ("WHYNTER"); nghỉ;
case AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); nghỉ;
case PANASONIC: Serial.print ("PANASONIC"); nghỉ;
case DENON: Serial.print ("Denon"); nghỉ;
}
}
// kết xuất les résultats
void dumpInfo (decode_results * results)
{
// Kiểm tra xem bộ đệm có bị tràn không
if (kết quả-> tràn) {
Serial.println ("Mã IR quá dài. Chỉnh sửa IRremoteInt.h và tăng RAWBUF");
trở lại;
}
// Hiển thị tiêu chuẩn mã hóa
Serial.print ("Mã hóa:");
mã hóa (kết quả);
Serial.println ("");
// Hiển thị mã & độ dài
Serial.print ("Mã:");
ircode (kết quả);
Serial.print ("(");
Serial.print (kết quả-> bit, DEC);
Serial.println ("bit)");
}
//kết cấu
void dumpRaw (decode_results * results)
{
// In dữ liệu thô
Serial.print ("Timing [");
Serial.print (results-> rawlen-1, DEC);
Serial.println ("]:");
for (int i = 1; i rawlen; i ++) {
unsigned long x = results-> rawbuf * USECPERTICK;
if (! (i & 1)) {// chẵn
Serial.print ("-");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
} else {// lẻ
Serial.print ("");
Serial.print ("+");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' không cần thiết cho cái cuối cùng
}
if (! (i% 8)) Serial.println ("");
}
Serial.println (""); // Dòng mới
}
//+=============================================================================
// Kết xuất cấu trúc decode_results.
//
void dumpCode (decode_results * results)
{
// Bắt đầu khai báo
Serial.print ("int không dấu"); // kiểu biến
Serial.print ("rawData ["); // tên mảng
Serial.print (results-> rawlen - 1, DEC); // kích thước mảng
Serial.print ("] = {"); // Bắt đầu khai báo
// Kết xuất dữ liệu
for (int i = 1; i rawlen; i ++) {
Serial.print (results-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' không cần thiết trên cái cuối cùng
if (! (i & 1)) Serial.print ("");
}
// Kết thúc khai báo
Serial.print ("};"); //
// Bình luận
Serial.print ("//");
mã hóa (kết quả);
Serial.print ("");
ircode (kết quả);
// Dòng mới
Serial.println ("");
// Bây giờ kết xuất các mã "đã biết"
if (results-> decode_type! = UNKNOWN) {
// Một số giao thức có địa chỉ
if (results-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (kết quả-> địa chỉ, HEX);
Serial.println (";");
}
// Tất cả các giao thức đều có dữ liệu
Serial.print ("int data = 0x");
Serial.print (results-> value, HEX);
Serial.println (";");
}
}
void loop ()
/ ************************************************* * Hồng ngoại ********************************************** /
{
giải mã kết quả; // Nơi nào đó để lưu trữ kết quả
if (Uncv.decode (& results))) {// Lấy mã IR
dumpInfo (& kết quả); // Xuất kết quả
dumpRaw (& kết quả); // Xuất kết quả ở định dạng RAW
dumpCode (& kết quả); // Xuất kết quả dưới dạng mã nguồn
Serial.println (""); // Dòng trống giữa các mục nhập
không thể tìm thấy (); // Chuẩn bị cho giá trị tiếp theo
}
/ ************************************************* *** RX433 ******************************************** /
if (mySwitch.available ())
{
int value = mySwitch.getReceiveValue ();
Serial.println ("RX433");
if (giá trị == 0) {
Serial.print ("Mã hóa giải mã");
} khác
{
Serial.print ("Reçu");
Serial.print (mySwitch.getReceiveValue ());
Serial.print ("/");
Serial.print (mySwitch.getReceiveBitlength ());
Serial.print ("bit");
Serial.print ("Protocole:");
Serial.println (mySwitch.getReceiveProtocol ());
}
mySwitch.resetAvailable ();
} // RX433
}//vòng
Bước 3: Infos Sur Les Codes Infra-Rouge
Là giao thức plusieurs:
NEC: 32 bit (chi tiết giao thức)
Sony: 12 ou 20 bit (chi tiết giao thức) (Hiểu mã điều khiển từ xa IR của Sony.)
RC5: 12 bit (chi tiết giao thức)
RC6: 20 ou 36 bit (chi tiết giao thức)
Đổ Sony et RC5 / 6, hộp truyền động chaque doit être répétés 3 fois!
CHÚ Ý: la libraryirie IRremote.h ne semble pas pouvoir envoyer des mã 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 Code se fera avec laosystemirie IRremote.h
Exemple: (0x devant le code) et le nombre de bits irsend.sendNEC (0xA55A38C7, 32);
Bước 4: Infos Sur Codes RX433
L’envoie se fera avec laosystemirie RCSwitch.h
Exemple mySwitch.send (1975778, 24);
Trên peut facilement piloter avec cela des prises commandés.