Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Le but est d’afficher les code 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.
On pourra donc ensuite, grace à une autre montage, envoyer ces code et piloter n’importe quoi!
Krok 1: Le Montage
Prosty, Arduino Nano, jednodiodowy odbiornik podczerwieni i odbiornik 433 MHz.
Krok 2: Le Code Arduino
//InfraRouge
#włączać
int recvPin = 11; //pin Arduino do gniazda InfraRouge (TOSP4838)
IRrecv nieodwoł(recvPin);
//RX433
#włączać
RCSwitch mójPrzełącznik = RCSwitch();
decode_results wyniki;
pusta konfiguracja ()
{
Serial.początek(9600);
nieodwoł.enableIRIn();
irrecv.blink13(true);//allume la LED infra lors de l'envoie InfraRouge
mySwitch.enableReceive(0); // Receptur RX433 (XY-MK-5V) na pin 2 Arduino Uno i Nano
}
// umieszczenie kodów InfraRouge
void ircode (decode_results *wyniki)
{
// Panasonic
if (results->decode_type == PANASONIC) {
Serial.print(wyniki->adres, HEX);
Serial.print(":");
}
Serial.print(wyniki->wartość, HEX);
}//próżnia
// afficahge des codes encodes
void kodowanie (decode_results *results)
{
przełącznik (wyniki->typ_dekodowania) {
domyślny:
przypadek NIEZNANY: Serial.print("Inconnu"); przerwa;
przypadek NEC: Serial.print("NEC"); przerwa;
case SONY: Serial.print("SONY"); przerwa;
przypadek RC5: Serial.print("RC5"); przerwa;
przypadek RC6: Serial.print("RC6"); przerwa;
case DISH: Serial.print("DISH"); przerwa;
case SHARP: Serial.print("SHARP"); przerwa;
case JVC: Serial.print("JVC"); przerwa;
przypadek SANYO: Serial.print("SANYO"); przerwa;
przypadek MITSUBISHI: Serial.print("MITSUBISHI"); przerwa;
sprawa SAMSUNG: Serial.print("SAMSUNG"); przerwa;
sprawa LG: Serial.print("LG"); przerwa;
case WHYNTER: Serial.print("WHYNTER"); przerwa;
sprawa AIWA_RC_T501: Serial.print("AIWA_RC_T501"); przerwa;
case PANASONIC: Serial.print("PANASONIC"); przerwa;
przypadek DENON: Serial.print("Denon"); przerwa;
}
}
// zrzuć wyniki
void dumpInfo (decode_results *results)
{
// Sprawdź, czy bufor się przepełnił
if (wyniki->przepełnienie) {
Serial.println("Kod IR jest za długi. Edytuj IRremoteInt.h i zwiększ RAWBUF");
powrót;
}
// Pokaż standard kodowania
Serial.print("Kodowanie: ");
kodowanie(wyniki);
Serial.println("");
// Pokaż kod i długość
Serial.print("Kod: ");
ircode(wyniki);
Serial.print(" (");
Serial.print(wyniki->bity, DEC);
Serial.println("bity)");
}
//Struktura
void dumpRaw (decode_results *results)
{
// Drukuj surowe dane
Serial.print("Czas [");
Serial.print(wyniki->rawlen-1, DEC);
Serial.println("]: ");
for (int i = 1; i rawlen; i++) {
unsigned long x = results->rawbuf * USECPERTICK;
if (!(i i 1)) { // parzyste
Serial.print("-");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
} inny { // nieparzysty
Serial.print(" ");
Serial.print("+");
if (x < 1000) Serial.print(" ");
if (x < 100) Serial.print(" ");
Serial.print(x, DEC);
if (i rawlen-1) Serial.print(", "); //', ' nie potrzebne dla ostatniego
}
if (!(i % 8)) Serial.println("");
}
Serial.println(""); // Nowa linia
}
//+=============================================================================
// Zrzuć strukturę decode_results.
//
void dumpCode (decode_results *results)
{
// Rozpocznij deklarację
Serial.print("unsigned int "); // typ zmiennej
Serial.print("rawData["); // nazwa tablicy
Serial.print(wyniki->rawlen - 1, DEC); // rozmiar tablicy
Serial.print("] = {"); // Rozpocznij deklarację
// Zrzuć dane
for (int i = 1; i rawlen; i++) {
Serial.print(wyniki->rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print(", "); // ', ' nie potrzebne na ostatnim
if (!(i & 1)) Serial.print(" ");
}
// Końcowa deklaracja
Serial.print("};"); //
// Komentarz
Serial.print(" // ");
kodowanie(wyniki);
Serial.print(" ");
ircode(wyniki);
// Nowa linia
Serial.println("");
// Teraz zrzuć "znane" kody
if (wyniki->typ_dekodowania != NIEZNANE) {
// Niektóre protokoły mają adres
if (results->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(wyniki->adres, HEX);
Serial.println(";");
}
// Wszystkie protokoły mają dane
Serial.print("unsigned int data = 0x");
Serial.print(wyniki->wartość, HEX);
Serial.println(";");
}
}
pusta pętla ()
/************************************************** * InfraRouge ***********************************************/
{
decode_results wyniki; // Gdzieś do przechowywania wyników
if (irrecv.decode(&results)) { // Złap kod IR
dumpInfo(&wyniki); // wyślij wyniki
dumpRaw(&wyniki); // Prześlij wyniki w formacie RAW
dumpCode(&wyniki); // Wypisz wyniki jako kod źródłowy
Serial.println(""); // Pusta linia między wpisami
nieodzysk.wznowienie(); // Przygotuj się na następną wartość
}
/************************************************** *** RX433 **************************************************/
jeśli (mySwitch.available())
{
int wartość = mySwitch.getReceivedValue();
Serial.println("RX433");
jeśli (wartość == 0) {
Serial.print("Kod inconnu");
} w przeciwnym razie
{
Serial.print("Reçu");
Serial.print(mySwitch.getReceivedValue());
Serial.print(" / ");
Serial.print(mySwitch.getReceivedBitlength());
Serial.print("bit");
Serial.print("Protokół: ");
Serial.println(mySwitch.getReceivedProtocol());
}
mójPrzełącznik.resetDostępny();
}//RX433
}//pętla
Krok 3: Infos Sur Les Codes Infra-Rouge
Protokoły plusieurs:
NEC: 32 bity (szczegóły protokołu)
Sony: 12 lub 20 bitów (szczegóły protokołu) (Zrozumienie kodów zdalnych Sony IR).
RC5: 12 bitów (szczegóły protokołu)
RC6: 20 lub 36 bitów (szczegóły protokołu)
Wlać Sony et RC5/6, transmisja chaque doit être répétés 3 fois!
UWAGA: 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 code se fera avec la librairie IRremote.h
Przykład: (0x kod devant) i nazwa bitów irsend.sendNEC (0xA55A38C7, 32);
Krok 4: Informacje Sur Kody RX433
L'envoie se fera z biblioteką RCSwitch.h
Przykład mySwitch.send(1975778, 24);
Na peut facilement pilot avec cela des prises commandés.