Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 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.
On pourra donc ensuite, grâce à une autre montage, envoyer ces codes et piloter n’importe quoi!
Paso 1: Le Montage
Simple, un Arduino Nano, un diodo réceptrice infra-rouge y un récepteur 433 mhz.
Paso 2: Le Code Arduino
// InfraRouge
#incluir
int recvPin = 11; // pin Arduino para récepteur InfraRouge (TOSP4838)
IRrecv irrecv (recvPin);
// RX433
#incluir
RCSwitch mySwitch = RCSwitch ();
decode_results resultados;
configuración vacía ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
irrecv.blink13 (true); // allume la LED interne lors de l'envoie InfraRouge
mySwitch.enableReceive (0); // Récepteur RX433 (XY-MK-5V) sur pin 2 de Arduino Uno et Nano
}
// affichage des codes InfraRouge
void ircode (decode_results * resultados)
{
// Panasonic
if (resultados-> decode_type == PANASONIC) {
Serial.print (resultados-> dirección, HEX);
Serial.print (":");
}
Serial.print (resultados-> valor, HEX);
}//vacío
// afficahge des codes encodés
codificación vacía (decode_results * resultados)
{
switch (resultados-> decode_type) {
defecto:
caso DESCONOCIDO: Serial.print ("Inconnu"); rotura;
caso NEC: Serial.print ("NEC"); rotura;
caso SONY: Serial.print ("SONY"); rotura;
caso RC5: Serial.print ("RC5"); rotura;
caso RC6: Serial.print ("RC6"); rotura;
caso DISH: Serial.print ("PLATO"); rotura;
caso SHARP: Serial.print ("SHARP"); rotura;
caso JVC: Serial.print ("JVC"); rotura;
caso SANYO: Serial.print ("SANYO"); rotura;
caso MITSUBISHI: Serial.print ("MITSUBISHI"); rotura;
caso SAMSUNG: Serial.print ("SAMSUNG"); rotura;
caso LG: Serial.print ("LG"); rotura;
case WHYNTER: Serial.print ("WHYNTER"); rotura;
caso AIWA_RC_T501: Serial.print ("AIWA_RC_T501"); rotura;
caso PANASONIC: Serial.print ("PANASONIC"); rotura;
caso DENON: Serial.print ("Denon"); rotura;
}
}
// dump les résultats
void dumpInfo (decode_results * resultados)
{
// Verifica si el búfer se desbordó
if (resultados-> desbordamiento) {
Serial.println ("Código IR demasiado largo. Edite IRremoteInt.hy aumente RAWBUF");
regreso;
}
// Mostrar estándar de codificación
Serial.print ("Codificación:");
codificación (resultados);
Serial.println ("");
// Mostrar código y longitud
Serial.print ("Código:");
ircode (resultados);
Serial.print ("(");
Serial.print (resultados-> bits, DEC);
Serial.println ("bits)");
}
//estructura
void dumpRaw (decode_results * resultados)
{
// Imprimir datos brutos
Serial.print ("Tiempo [");
Serial.print (resultados-> rawlen-1, DEC);
Serial.println ("]:");
para (int i = 1; i rawlen; i ++) {
unsigned long x = resultados-> rawbuf * USECPERTICK;
if (! (i & 1)) {// par
Serial.print ("-");
if (x <1000) Serial.print ("");
si (x <100) Serial.print ("");
Serial.print (x, DEC);
} más {// impar
Serial.print ("");
Serial.print ("+");
si (x <1000) Serial.print ("");
si (x <100) Serial.print ("");
Serial.print (x, DEC);
if (i rawlen-1) Serial.print (","); // ',' no es necesario para el último
}
if (! (i% 8)) Serial.println ("");
}
Serial.println (""); // Nueva línea
}
//+=============================================================================
// Elimina la estructura decode_results.
//
void dumpCode (decode_results * resultados)
{
// Iniciar declaración
Serial.print ("unsigned int"); // tipo de variable
Serial.print ("rawData ["); // nombre de la matriz
Serial.print (resultados-> rawlen - 1, DEC); // tamaño de la matriz
Serial.print ("] = {"); // Iniciar declaración
// Volcar datos
para (int i = 1; i rawlen; i ++) {
Serial.print (resultados-> rawbuf * USECPERTICK, DEC);
if (i rawlen-1) Serial.print (","); // ',' no es necesario en el último
if (! (i & 1)) Serial.print ("");
}
// Fin de la declaración
Serial.print ("};"); //
// Comentario
Serial.print ("//");
codificación (resultados);
Serial.print ("");
ircode (resultados);
// Nueva línea
Serial.println ("");
// Ahora vuelca los códigos "conocidos"
if (results-> decode_type! = UNKNOWN) {
// Algunos protocolos tienen una dirección
if (resultados-> decode_type == PANASONIC) {
Serial.print ("unsigned int addr = 0x");
Serial.print (resultados-> dirección, HEX);
Serial.println (";");
}
// Todos los protocolos tienen datos
Serial.print ("datos int sin firmar = 0x");
Serial.print (resultados-> valor, HEX);
Serial.println (";");
}
}
bucle vacío ()
/ *********************************************** * InfraRouge **************************************** /
{
decode_results resultados; // En algún lugar para almacenar los resultados
if (irrecv.decode (& results)) {// Coge un código IR
dumpInfo (& resultados); // Salida de los resultados
dumpRaw (& resultados); // Salida de los resultados en formato RAW
dumpCode (& resultados); // Muestra los resultados como código fuente
Serial.println (""); // Línea en blanco entre entradas
irrecv.resume (); // Prepárate para el próximo valor
}
/ *********************************************** *** RX433 ****************************************** /
si (mySwitch.available ())
{
valor int = mySwitch.getReceivedValue ();
Serial.println ("RX433");
si (valor == 0) {
Serial.print ("Codage inconnu");
} demás
{
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
}//círculo
Paso 3: Infos Sur Les Codes Infra-Rouge
Il y a plusieurs protocoles:
NEC: 32 bits (detalles del protocolo)
Sony: 12 o 20 bits (detalles del protocolo) (Comprensión de los códigos remotos de infrarrojos de Sony).
RC5: 12 bits (detalles del protocolo)
RC6: 20 ou 36 bits (detalles del protocolo)
Vierta Sony et RC5 / 6, chaque transmisión doit être répétés 3 fois!
ATENCIÓN: 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
Ejemplo: (0x devant le code) et le nombre de bits irsend.sendNEC (0xA55A38C7, 32);
Paso 4: Códigos Infos Sur RX433
L'envoie se fera avec la librairie RCSwitch.h
Ejemplo mySwitch.send (1975778, 24);
Sobre peut facilement piloter avec cela des prises commandés.