תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 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.
ב- pourra donc ensuite, grâce à une autre montage, שליחות קודים וחלוץ לא חשוב!
שלב 1: לה מונטאז '
פשוט, Arduino Nano, une diode réceptrice infra-rouge et un récepteur 433 mhz.
שלב 2: Le Code Arduino
// InfraRouge
#לִכלוֹל
int recvPin = 11; // סיכה Arduino pour récepteur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#לִכלוֹל
RCSwitch mySwitch = RCSwitch ();
תוצאות decode_results;
הגדרת חלל ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
irrecv.blink13 (נכון); // allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive (0); // Récepteur RX433 (XY-MK-5V) על סיכה 2 של Arduino Uno et Nano
}
// affichage des codes InfraRouge
ircode void (decode_results *results)
{
// פנסוניק
if (results-> decode_type == PANASONIC) {
Serial.print (תוצאות-> כתובת, HEX);
Serial.print (":");
}
Serial.print (תוצאות-> ערך, HEX);
}//בָּטֵל
// afficahge des codes encodés
קידוד חלל (decode_results *תוצאות)
{
switch (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 ("דנון"); לשבור;
}
}
// dump les résultats
void dumpInfo (decode_results *results)
{
// בדוק אם המאגר עלה על גדותיו
if (תוצאות-> הצפה) {
Serial.println ("קוד IR ארוך מדי. ערוך IRremoteInt.h והגדיל את RAWBUF");
לַחֲזוֹר;
}
// הצג תקן קידוד
Serial.print ("קידוד:");
קידוד (תוצאות);
Serial.println ("");
// הצג קוד ואורך
Serial.print ("קוד:");
ircode (תוצאות);
Serial.print ("(");
Serial.print (תוצאות-> סיביות, DEC);
Serial.println ("סיביות" ");
}
//מִבְנֶה
void dumpRaw (decode_results *results)
{
// הדפס נתוני גלם
Serial.print ("תזמון [");
Serial.print (תוצאות-> rawlen-1, DEC);
Serial.println ("]:");
עבור (int i = 1; i rawlen; i ++) {
ארוך לא חתום x = תוצאות-> rawbuf * USECPERTICK;
אם (! (i & 1)) {// אפילו
Serial.print ("-");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
} אחר {// מוזר
Serial.print ("");
Serial.print ("+");
if (x <1000) Serial.print ("");
if (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' אין צורך באחרון
}
if (! (i % 8)) Serial.println ("");
}
Serial.println (""); // שורה חדשה
}
//+=============================================================================
// זרוק את מבנה decode_results.
//
void dumpCode (decode_results *results)
{
// התחל בהצהרה
Serial.print ("int unsigned"); // סוג משתנה
Serial.print ("rawData ["); // שם מערך
Serial.print (תוצאות-> rawlen - 1, DEC); // גודל מערך
Serial.print ("] = {"); // התחל בהצהרה
// נתוני dump
עבור (int i = 1; i rawlen; i ++) {
Serial.print (תוצאות-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' אין צורך באחרון
if (! (i & 1)) Serial.print ("");
}
// סיום הכרזה
Serial.print ("};"); //
// תגובה
Serial.print ("//");
קידוד (תוצאות);
Serial.print ("");
ircode (תוצאות);
// שורה חדשה
Serial.println ("");
// עכשיו זרוק קודים "ידועים"
אם (results-> decode_type! = לא ידוע) {
// לפרוטוקולים מסוימים יש כתובת
if (results-> decode_type == PANASONIC) {
Serial.print ("int signr int addr = 0x");
Serial.print (תוצאות-> כתובת, HEX);
Serial.println (";");
}
// לכל הפרוטוקולים יש נתונים
Serial.print ("נתוני int לא חתומים = 0x");
Serial.print (תוצאות-> ערך, HEX);
Serial.println (";");
}
}
לולאת חלל ()
/********************************************** *InfraRouge ***************************************/
{
תוצאות decode_results; // איפשהו לאחסן את התוצאות
if (irrecv.decode (& תוצאות)) {// קח קוד IR
dumpInfo (& תוצאות); // פלט את התוצאות
dumpRaw (& תוצאות); // פלט את התוצאות בפורמט RAW
dumpCode (& תוצאות); // פלט את התוצאות כקוד מקור
Serial.println (""); // קו ריק בין הערכים
irrecv.resume (); // היכונו לערך הבא
}
/********************************************* *** RX433 *****************************************/
אם (mySwitch.available ())
{
int value = mySwitch.getReceivedValue ();
Serial.println ("RX433");
אם (ערך == 0) {
Serial.print ("Codage inconnu");
} אחר
{
Serial.print ("Reçu");
Serial.print (mySwitch.getReceivedValue ());
Serial.print (" /");
Serial.print (mySwitch.getReceivedBitlength ());
Serial.print ("ביט");
Serial.print ("פרוטוקול:");
Serial.println (mySwitch.getReceivedProtocol ());
}
mySwitch.resetAvailable ();
} // RX433
}//לוּלָאָה
שלב 3: מידע על Les Codes אינפרא-רוז '
פרוטוקולי Il plus Plusurs:
NEC: 32 סיביות (פרטי פרוטוקול)
סוני: 12 או 20 סיביות (פרטי פרוטוקול) (הבנת קודי IR מרחוק של Sony.)
RC5: 12 סיביות (פרטי פרוטוקול)
RC6: 20 או 36 סיביות (פרטי פרוטוקול)
שפכו את Sony et RC5/6, שידור צ'אקה עושה 3 רפים!
שימו לב: la librairie IRremote.h ne semble pas pouvoir שליח des codes codés sur plus de 32bits. Les RC6, 36 doivent donc êtres שליח ב- 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: מידע על קודים RX433
L’envoie se fera avec la librairie RCSwitch.h
דוגמה ל- mySwitch.send (1975778, 24);
על הטיסות המתקדמות piloter avec cela des prises commandés.