Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Bu modellər, 433 mhz (RX433) sürətlə idarə olunan lampa, portable de garage və autre fonksiyona malikdir, infra-rouge de télévision au autre.
Əlavə olaraq, montaj işləri, kodların göndərilməsi və pilotun köməkçisi!
Addım 1: Le Montage
Sadə, Arduino Nano'da deyil, infraqırmızı və 433 mhz tezlikdə işləyir.
Addım 2: Le Code Arduino
// InfraRouge
#daxil edin
int recvPin = 11; // pin Arduino resreeur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#daxil edin
RCSwitch mySwitch = RCSwitch ();
decode_results nəticələri;
boş quraşdırma ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
irrecv.blink13 (doğru); // LED -lər internete daxil olmaqla, InfraRouge
mySwitch.enableReceive (0); // Récepteur RX433 (XY-MK-5V) Arduino Uno və Nano 2 pin
}
// InfraRouge kodlarını təqdim edin
boş kod kodu (decode_results *nəticələr)
{
// Panasonic
əgər (nəticələr-> decode_type == PANASONIC) {
Serial.print (nəticələr-> ünvan, HEX);
Serial.print (":");
}
Serial.print (nəticələr-> dəyər, HEX);
} // boş
// kodları kodlaşdırmaq
boş kodlaşdırma (decode_results *nəticələr)
{
keçid (nəticələr-> deşifr_tipi) {
defolt:
bilinməyən hal: Serial.print ("Inconnu"); fasilə;
dava NEC: Serial.print ("NEC"); fasilə;
hal SONY: Serial.print ("SONY"); fasilə;
halda RC5: Serial.print ("RC5"); fasilə;
halda RC6: Serial.print ("RC6"); fasilə;
halda DISH: Serial.print ("DISH"); fasilə;
hal SHARP: Serial.print ("SHARP"); fasilə;
halda JVC: Serial.print ("JVC"); fasilə;
halda SANYO: Serial.print ("SANYO"); fasilə;
halda MITSUBISHI: Serial.print ("MITSUBISHI"); fasilə;
hal SAMSUNG: Serial.print ("SAMSUNG"); fasilə;
korpus LG: Serial.print ("LG"); fasilə;
hal WHYNTER: Serial.print ("WHYNTER"); fasilə;
halda AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); fasilə;
hal PANASONIC: Serial.print ("PANASONIC"); fasilə;
dava DENON: Serial.print ("Denon"); fasilə;
}
}
// dump les résultats
void dumpInfo (decode_results *nəticələr)
{
// Tamponun daşdığını yoxlayın
if (results-> overflow) {
Serial.println ("IR kodu çox uzundur. IRremoteInt.h redaktə edin və RAWBUF artırın");
qayıtmaq;
}
// Kodlama standartını göstərin
Serial.print ("Encodage:");
kodlaşdırma (nəticələr);
Serial.println ("");
// Kodu və uzunluğu göstərin
Serial.print ("Kod:");
kod kodu (nəticələr);
Serial.print ("(");
Serial.print (nəticələr-> bit, DEC);
Serial.println ("bit"));
}
// quruluş
void dumpRaw (decode_results *nəticələr)
{
// Raw məlumatlarını çap edin
Serial.print ("Zamanlama [");
Serial.print (nəticələr-> rawlen-1, DEC);
Serial.println ("]:");
üçün (int i = 1; i rawlen; i ++) {
işarəsiz uzun x = nəticələr-> rawbuf * USECPERTICK;
if (! (i & 1)) {// hətta
Serial.print ("-");
əgər (x <1000) Serial.print ("");
əgər (x <100) Serial.print ("");
Serial.print (x, DEC);
} başqa {// qəribə
Serial.print ("");
Serial.print ("+");
əgər (x <1000) Serial.print ("");
əgər (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' sonuncu üçün lazım deyil
}
əgər (! (i % 8)) Serial.println ("");
}
Serial.println (""); // Yeni xətt
}
//+=============================================================================
// decode_results quruluşunu atın.
//
boş dumpCode (decode_results *nəticələr)
{
// Bəyanata başlayın
Serial.print ("imzasız int"); // dəyişən növü
Serial.print ("rawData ["); // serialın adı
Serial.print (nəticələr-> rawlen - 1, DEC); // massiv ölçüsü
Serial.print ("] = {"); // Bəyanata başlayın
// Məlumatları atın
üçün (int i = 1; i rawlen; i ++) {
Serial.print (nəticələr-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' sonda lazım deyil
əgər (! (i & 1)) Serial.print ("");
}
// Bəyannaməni bitir
Serial.print ("};"); //
// Şərh
Serial.print ("//");
kodlaşdırma (nəticələr);
Serial.print ("");
kod kodu (nəticələr);
// Yeni xətt
Serial.println ("");
// İndi "bilinən" kodları atın
əgər (nəticələr-> decode_type! = BİLMƏYƏN) {
// Bəzi protokolların ünvanı var
əgər (nəticələr-> decode_type == PANASONIC) {
Serial.print ("imzasız int addr = 0x");
Serial.print (nəticələr-> ünvan, HEX);
Serial.println (";");
}
// Bütün protokollarda məlumatlar var
Serial.print ("imzasız int data = 0x");
Serial.print (nəticələr-> dəyər, HEX);
Serial.println (";");
}
}
boşluq döngəsi ()
/*********************************************** *InfraRouge ****************************************/
{
decode_results nəticələri; // Nəticələri saxlamaq üçün bir yerdə
if (irrecv.decode (& nəticələr)) {// IR kodunu tutun
dumpInfo (& nəticələr); // Nəticələri çıxarın
dumpRaw (və nəticələr); // Nəticələri RAW formatında çıxarın
dumpCode (və nəticələr); // Nəticələri mənbə kodu kimi çıxarın
Serial.println (""); // Girişlər arasındakı boş xətt
irrecv. resume (); // Növbəti dəyərə hazırlaşın
}
/*********************************************** *** RX433 ******************************************/
əgər (mySwitch.available ())
{
int dəyəri = mySwitch.getReceivedValue ();
Serial.println ("RX433");
əgər (dəyər == 0) {
Serial.print ("Codage inconnu");
} başqa
{
Serial.print ("Reçu");
Serial.print (mySwitch.getReceivedValue ());
Serial.print (" /");
Serial.print (mySwitch.getReceivedBitlength ());
Serial.print ("bit");
Serial.print ("Protocole:");
Serial.println (mySwitch.getReceivedProtocol ());
}
mySwitch.resetAvailable ();
} // RX433
} // döngə
Addım 3: Infra-Rouge Kodları haqqında məlumat
Plusieurs protokolları:
NEC: 32 bit (protokol detalları)
Sony: 12 ou 20 bit (protokol detalları) (Sony IR uzaq kodlarını anlamaq.)
RC5: 12 bit (protokol detalları)
RC6: 20 ou 36 bit (protokol detalları)
Sony və RC5/6 tökün, bu zaman 3 ötürmə göndərin!
DİQQƏT: IRremote.h xidməti, üstəlik, 32 bit kodların kodlarını göndərir. Les RC6, 36 heç bir işçi tərəfindən göndərilməmişdir, həm də əvvəlcədən və daha sonra.
IRremote.h ilə əlaqəli kodların siyahısı
Nümunə: (0x devant le code) və bit irsend.sendNEC (0xA55A38C7, 32);
Addım 4: Məlumat Sur Kodları RX433
RCSwitch.h ilə əlaqə qurun
Məsələn, mySwitch.send (1975778, 24);
Peut facilement pilotu avec cela des prises commandés.