Control remoto infrarrojo con Arduino

Finalmente me siento a escribir otra nota técnica para el blog. Al igual que las anteriores, esta surge como resultado de pruebas que hice para un proyecto específico que no era justamente relacionado con el control remoto. Pero que involucra la transmisión de una señal infrarroja.

Es muy común el uso de luz infrarroja para el control a distancia de aparatos del hogar. Actualmente no existen televisores ni aire acondicionadores que no se comanden desde un control remoto. Y, por supuesto, cada vez son más los dispositivos que incorporan esta comodidad. El funcionamiento del sistema es bastante simple: cuando se presiona una tecla del control remoto, éste envía al aparato una señal lumínica invisible al ojo humano. En el otro extremo el artefacto recibe la señal, la decodifica y reacciona a la indicación.

Arduino y VS1838

En este artículo vamos a utilizar una placa de desarrollo Arduino UNO (aunque también se podría utilizar un Arduino Mega 2560 R3), y un receptor infrarrojo con filtro pasabanda VS1838. Para hacer más didáctico el experimento usaremos también una batería de 9 volt y un LED.

Primero veámoslo funcionar:

Decodificación IRAntes de avanzar con el circuito es importante agregar algo de información sobre el funcionamiento de los controles remotos infrarrojos. Si bien existen varios métodos y protocolos, con el tiempo se estandarizaron ciertas prácticas y componentes. La vasta mayoría de los controles remotos transmiten la señal lumínica en forma de pulsos a 38kHz. Aunque se utilizan también otras frecuencias de portadora que cuentan con 30kHz, 36kHz y 56kHz entre las más comunes. Además los aparatos suelen traducir la presencia de la portadora en un nivel lógico alto y la ausencia en uno bajo. Y codificar con ese mecanismo, algún protocolo de transmisión digital serie que permita identificar el comienzo de la información en el flujo. Y que impone alguna restricciones, como por ejemplo limitar la cantidad de pulsos que se puedan recibir en forma continua a un tiempo acotado. Todo esto se debe a la necesidad de filtrar el ruido que provenga de fuentes lumínicas distintas al control remoto.

En un artículo anterior había utilizado un foto transistor y un LM358 para recibir una señal infrarroja, pero de seguir ese método de recepción debería encargarme del filtrado de ruido que acabo de mencionar. Es decir, la luz del sol o cualquier otra fuente cercana al espectro infrarrojo podría introducir una señal que se confundiría con la del control. Por lo que debería implementar un complejo algoritmo en Arduino que me permita descartar una señal que persiste infinitamente en el tiempo. Por suerte en la actualidad contamos con receptores infrarrojos integrados como el VS1838 (similiar al TSOP1738 y otros) que realizan el trabajo de filtrado y decodificación a niveles lógico por nosotros. Y así podemos dedicar nuestro esfuerzo a decodificar la información transmitida.

Arduino con VS1838

vs1838El armado del circuito consiste en montar el VS1838 en un protoboard y conectar la alimentación de 5V  a la pata 3 y la tierra a la pata 2. La salida de la señal decodificada es la pata 1, y ésta se conecta a la entrada digital 2 del Arduino UNO. En la figura de la derecha se encuentra el esquema del encapsulado con sus medidas y la indicación de las terminales. Adicionalmente conectamos el ánodo del LED en forma directa al pin 13 del Arduino, que cuenta con una resistencia para limitar la corriente. Usaremos ese pin como salida para indicar la recepción correcta de los comandos enviados por el control remoto.

Osciloscopio a la salida de VS1838Para este tipo de proyectos es muy práctico tener un osciloscopio. En la actualidad existen algunas versiones de osciloscopio USB que son considerablemente más baratas que las clásicas. Aún así no se trata de un instrumento fácil de adquirir. En este punto del armado es conveniente revisar la recepción, midiendo la salida del VS1838. En la figura de la izquierda podemos ver la forma de onda recibida (decodificada). El período más pequeño es de 1,17mS  (es decir 851Hz). Lo que dista mucho de los 38kHz transmitidos desde el control. Esto se debe a que el integrado decodifica la señal y emite en la salida un nivel alto mientras hay portadora y uno bajo cuando no la hay. Del gráfico podemos inferir que el control emitió la señal de 38kHz durante 4,40mS, luego hizo una pausa de 0,59mS, luego emitió durante 0,51mS y así varias veces, hasta que comenzó a emitir en lapsos de 1,61mS. Esa es la codificación que utiliza este control remoto. Básicamente emite un pulso largo para indicar el comienzo de un dato. Luego emite pulsos de 500µS o pulsos de 1,6mS según corresponda un uno o cero lógico. Así emite 32 bits después del pulso inicial. No es importante en este caso saber a qué pulso corresponde el uno o el cero. Arbitrariamente decidí que los pulsos menores a 600µS serán unos y los menores a 1,8mS serán ceros. Con ese criterio desarrollé este pequeño programa que nos permite decodificar las teclas presionadas:

Nota: tras la publicación de este artículo recibí varias consultas sobre cómo modificar el siguiente código. Finalmente decidí publicar una nota separada donde se utiliza esta decodificación para imprimir en una pantalla LCD.
// Cantidad de pulsos
#define TRAIN_LENGTH 32
// En microsegundos
#define LOW_LIMIT 600
#define HIGH_LIMIT 1800
#define INIT_LIMIT 4000

#define IN 2
#define LED 13

long start, delta = 0;
uint32_t value;
int pos = 0;
boolean has_value = false;
unsigned int key[10];

void inputPin() {
  noInterrupts();
  if (has_value) return;
  if (digitalRead(IN) == HIGH) {
    start = micros();
  }
  else {
    delta = micros() - start;
    if (delta < LOW_LIMIT) {
      value <<= 1;
      value |= 1;
      ++pos;
    }
    else if (delta < HIGH_LIMIT) {
      value <<= 1;
      value |= 0;
      ++pos;
    }
    else if (delta > INIT_LIMIT) {
      value = 0;
      pos = 0;
    }

    if (pos == TRAIN_LENGTH) {
      has_value = true;
    }
  }
  interrupts();
}

void setup()
{
  key[0] = 0x9768;
  key[1] = 0xCF30;
  key[2] = 0xE718;
  key[3] = 0x857A;
  key[4] = 0xEF10;
  key[5] = 0xC738;
  key[6] = 0xA55A;
  key[7] = 0xBD42;
  key[8] = 0xB54A;
  key[9] = 0xAD52;

  Serial.begin(115200);
  pinMode(IN, INPUT);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);

  attachInterrupt(0, inputPin, CHANGE);
}

void loop()
{
  int i;
  if (has_value) {
    Serial.print("V: ");
    Serial.println(value & 0x0000FFFF, HEX);
    i = 0;
    while(i<10 && (key[i] != (value & 0x0000FFFF))) ++i;
    Serial.println(i);
    while(i--) {
      digitalWrite(LED, HIGH);
      delay(400);
      digitalWrite(LED, LOW);
      delay(200);
    }
    has_value = false;
    pos = 0;
  }
}

Al incio del código se define la cantidad de bits en un dato; los límites de tiempo de los pulsos correspondientes a uno, cero y al inicio del dato; el pin de entrada y el LED.

La función de inicialización setup() define los valores correspondientes a las teclas numérica del control remoto. Sólo los 16 bits posteriores, ya que los 16 bits iniciales son fijos en este control. Vale aclarar que cada control utiliza un protocolo y valores determinados. Por lo que para poder armar esta tabla primero debí decodificar los valores de cada tecla con un programa similar a este. Luego configura el puerto serie a 115200 bps y establece la configuración de los pines que se utilizan. Finalmente conecta la interrupción de hardware del pin 2 a la función inputPin().

Esto significa que cada ver que hay un cambio de nivel de tensión en el pin 2, se ejecuta el código de dicha función. Lo que hace básicamente es medir el tiempo de duración del pulso. Si el estado del pin es alto (1) toma el tiempo con la función micros(). Cuando el estado es bajo (0) calcula el delta de tiempo. Y así determina cuánto duró el pulso, y en función de esa duración procede a insertar un uno o un cero en la variable value y desplazar hacia la izquierda hasta completar los 32 bits. Cuando la duración determina que se recibió el pulso de inicio, pone value y pos en cero para asegurar el sincronismo. Se utiliza un la variable has_value a modo de indicador de que se recibió un valor completo, y se ignoran los datos recibidos hasta que el bucle principal de ejecución haya utilizado el valor y haya puesto el indicador has_value en falso.

La función principal loop() en Arduino es ejecutada constantemente. Cuando se detecta que el indicador has_value está marcado, se imprimen en el puerto serie los 16 bits menos significativos del dato recibido. Y se busca en la tabla de teclas un valor que coincida. La posición del valor en la tabla key no indica el número de la tecla presionada. Hice esto porque es una forma práctica de obtener el valor numérico. En un programa que recibe comandos seguramente se utilizará una estructura del tipo switch/case. Finalmente el programa prende y apaga el LED la cantidad de veces que indica el número presionado en el control. Y pone has_value en falso para recibir el próximo dato.

 

46 thoughts on “Control remoto infrarrojo con Arduino”

  1. muy bueno tu post mi pregunta es si ya tengo el codigo de una tecla y lo quiero enviar a un aire acondicionado como lo mandaria?

    1. Tu pregunta es un poco amplia, voy a responderte en forma general: En primer lugar deberías utilizar un mecanismo similar al que presenté en el artículo para obtener el código (o los códigos) para las funciones, desde el control remoto del AA. Lo más práctico es guardar el código de cada tecla como un número. Pero para eso es necesario ver la señal recibida y comprender cómo están codificados los unos y ceros. Ya que existen distintos tipos de codificación y cada marca utiliza uno u otro.

      Una vez conocido el mecanismo de codificación y los valores numéricos de cada tecla, deberías escribir un programa que pueda reproducir la señal en función del número a enviar. Y esa reproducción debería enviarse a una salida del microcontrolador. A su vez ésta debería terminar en un transistor que trabaje en corte y saturación. Cerrando y abriendo el circuito de un LED infrarrojo que reciba constantemente una señal de 38kHz (si esta es la frecuencia de trabajo del equipo). El transistor entonces activaría la señal de 38kHz en el LED cuando la salida del micro está en 1, y la apagaría en 0. Enviando así pulsos según lo enviado a la salida del micro.

      La señal de 38kHz podrías crearla con un oscilador independiente, para completar lo que expliqué más arriba. La otra opción es que intentes crear los 38Khz con el propio microcontrolador, lo que es más barato. Pero más complicado también.

  2. Excelente artículo… Un saludo desde Venezuela..

    Yo estoy tratando de hacer lo contrario. Crear un circuito controlado por un Arduino UNO que sirva como control universal con el que pueda enviar señales a un aparato con control remoto. Mi preguntar es: ¿cualquier emisor IR puede servir para enviar datos a los diferentes aparatos con control remoto?.

    PD: Ya se que debo identificar las señales enviadas por el control remoto original para así emularlas desde el arduino.

    1. Los receptores tienen dos características principales: la longitud de onda del color de la luz y la frecuencia de portadora de la señal. La primera anda entre 850 y 950nm y la segunda va desde 32kHz hasta los 56kHz, aunque lo más común es 38kHz. Dependiendo de la calidad del receptor puede o no que acepte la señal que transmitas. Asumiendo que uses un LED (que es lo que fija el color de la luz) y una portadora fija. Cambiar la portadora es más fácil, ya que podrías hacerlo desde el mismo software. No deberías tener problemas en genera la portadora con el Arduino. Igual tengo entendido que la enorme mayoría de los aparatos usan 38kHz.

  3. Gran aporte amigo , una pregunta si quiero usar un led para cada una de las teclas configuradas , solo tengo que definirlos al principio ? o tambien debo modificar el void setup y el void loop ? soy nuevo en esto perdon por la ignorancia

    1. Después de la línea 75 del código, la variable i contiene un número entre el 0 y el 9 que identifica la tecla. Si quisieras podrías poner LEDs desde el pin 2 al 11 y llamar a digitalWrite(2+i, HIGH); para encenderlo. Luego deberías apagarlo o hacer algo más, depende lo que hayas imaginado. En el setup() deberías definir todos los pines con LED como salida con pinMode(n, OUTPUT); y no olvides que salvo el PIN 13, en el resto debés poner una resistencia en serie con el LED para limitar la corriente. Podés usar una de 330Ω o bien hacer el cálculo correcto según el color de tu LED.
      La respuesta que te doy no es la única forma de hacer lo que sugerís, como siempre pasa en la informática y la electrónica.

      1. Ya he logrado encender los puertos, pero el problema es hacer que se apaguen utilizando el mismo botón del control, intenté con “for”, con “else if” y aun no consigo nada, tienes idea de como hacerlo?

        1. Debería ver el código para indicarte cómo arreglarlo. Pero no lo copies acá en un comentario, mejor usá pastebin.com y poné el enlace al código acá así lo puedo ver.

  4. Que tal amigo buenas tardes una pregunta yo necesito enviar una cierta palabra por medio de un infrarrojo escrita por teclado y a su vez recibirla y me muestre la palabra que envíe, todo esto en un arduino uno como podría realizar todo esto apoyándome de procesing agradecería tu ayuda saludos

    1. Salvador, la pregunta es un poco amplia. Lo que puedo darte es una respuesta conceptual, a nivel general.

      Por un lado deberías tener un Arduino para la transmisión. Debería estar conectado a un teclado, y tener el código necesario para recibir las teclas que presiona el usuario. Ha muchos ejemplos de este tipo de proyectos en la web, incluso con teclados de PC. Una vez recibida la palabra desde el teclado, el Arduino debería codificar pulsos en un LED infrarrojo. Aquí deberías establecer previamente un protocolo (frecuencia de portadora, ancho de pulsos, etc) que te permita decodificar datos en el otro extremo. Podrías usar la codificación que expliqué en el artículo o inventar cualquier otra mientras que lo definido te permita codificar y decodificar inequívocamente un número. Entonces deberías transmitir cada letra ingresada en su formato numérico, que también deberías especificar de antemano para que ambos extremos sepan que la A es el 01, la B el 02, etcétera. Aunque podrías usar otra convención, como por ejemplo la tabla ASCII.
      En el extremo receptor deberías tener un Arduino programado en forma muy similar al artículo presente. Pero en lugar de tener una tabla de teclas del 0 al 9, deberías tener todas las teclas válidas para tu proyecto, según la convención que hayas elegido.

  5. Con respecto a la distancia cual seria la distancia maxima en la que se puede enviar las señales o depende del tipo de control que utilices por ejemplo el que utilizas en el video o un control remoto de una tv. o reproductor de dvd… Gracias

    1. Sara, la distancia depende de la capacidad de recepción del detector infrarrojo, de la calidad del led emisor, y de la corriente que se utilice en el mismo. En caso de usar control remoto, esto dependerá de cómo fue fabricado. Los control de TV y aire acondicionadores que he probado tienen alcance de más de cinco metros.

  6. Hola amigo, disculpa soy nuevo, tengo otro control distinto, de hecho ya otuve la codificacion en Hexadecimal para ese control, en que parte tengo que modificar para hacer que el Led se prenda conforme a la tecla Presionada.

  7. sera posible q puedan configurarlo el programa para que con cada boton se prenda una diferente salida del arduino (Ej. q con el boton 8 del control se prenda el led de la salida 8 del arduino) y asi funcionen con los 9 botones.
    me ayudarian mucho mucho:3 <3

    1. Hay que reemplazar el lazo que está en la línea 77 por un switch/case apropiado. Pero esto no es una cuestión de configuración. Se trata de programar. E implica mucho más que lo explicado en tu comentario. Por ejemplo: ¿cuanto tiempo tiene que prenderse la salida? ¿queda activa hasta que se reciba otra tecla? ¿dura un tiempo? ¿queda encendida si se continúa recibiendo la pulsación?

  8. Hola, quisiera saber si este programa podria funcionar para controlar la cantidad de pulsos que quiero mandarle a un motor?

    1. Este programa hace lo que hace. Pero por supuesto se puede modificar, reemplazando el lazo que arranca en la línea 78 por el código necesario para hacer otra cosa. Que podría ser enviar pulsos a un motor según la tecla recibida. Desde luego ese código (el que envía pulsos al motor) no está presente en este ejemplo. Es necesario programarlo.

  9. Que tal un gusto en saludarte, tengo una gran duda de una practica de laboratorio que tengo que realizar el cual consiste en construir un emisor y un receptor de IR, el emisor debe constar de dos teclas y el receptor de dos led, cada tecla del emisor debe encender solo uno de los led y la otra tecla el otro led, como sugerencia me dijeron que podía hacerlo con un PIC 18f4550 o algún pic 16f. disculpa es que tengo conocimientos muy básicos de electrónica, Alguna sugerencia.

    Saludos.

    1. El gusto es mío. Tu consulta es un poco amplia. Lo que se me ocurre comentarte es que incluso con los PICs más baratos como el 12F675 y 12F629 que vienen en encapsulado de ocho patas podrías resolver esa práctica sin problemas. Para la transmisión podrías usar dos patas como entradas de las teclas y una pata conectada a un transistor para manejar el LED infrarrojo. Y aún te sobrarían tres pines. Por software deberías generar pulsos a 38kHz para tener tu portadora. Y luego crear interrupciones en ella. Eso resultaría del lado receptor en un pulso por cada interrupción. Allí te recomiendo que uses un integrado del tipo VS1838 o similar. Porque la decodificación es mucho más complicada sin eso. El software del lado del PIC receptor debería sensar la salida del VS1838 y contar los pulsos en un espacio de tiempo. Según definas vos mismo tu protocolo, para saber qué tecla se está presionando, y por lo tanto qué LED debe encender.

      Otra opción es uno modular pulsos, sino enviar dos señales lumínicas de distinta frecuencia según la tecla presionada. En ese caso del lado receptor podrías evitar el uso del VS1838 y podrías sensar la frecuencia directamente con el PIC. Y encender el LED que corresponda.

  10. Hola, Gracias por compartir la info.
    Se que esto se sale un poco del tema…Estaba buscando la manera de decodificar señales con Arduino, por ahora necesito trasmitir una señal RF con un solo arduino, ¿esto se puede solo con un solo arduino? ¿Tendría que poner un modulador y en el transmisor y que el arduino se a capaz de decodificar esa información?
    Muchas Gracias

    1. David,

      Utilizando sólo un Arduino no se puede transmitir una señal RF ni tampoco recibirla. Para enviar necesitás aplicar en la antena una señal eléctrica de bastante potencia y por encima de 30kHz. Para recibir necestiás leer en la antena una señal eléctrica en el orden de los microvolts. Arduino no puede hacer esto per sé. Existen muchos módulos para ardunio que sirven para transmitir información por RF. Podés buscar en google “Arduino RF” o “Arduino Bluetooth”. Pero esos módulos por lo general codifican datos y luego los pasan por el modulador. Y del otro lado vuelven a decodificar. Intuyo que esto no te interesa porque es lo que vos querés hacer. En ese caso tendrías que construir un modulador y demodulador (FM por ejemplo) y conectar la entrada a un Arduino. Y la salida del demodulador a otro arduino. Si el canal de comunicación está funcionando podrías enviar señales (PWM por ejemplo) y leerlas del otro lado.

  11. Tengo una duda sobre la emisión del código, mi duda es ¿Cuándo esta apretado el botón del control cuántas veces se manda el código o siempre lo está mandando?

  12. Soy muy nuevo y tengo un proyecto que parecia sencillo al principio para mi, pero despues se me ha covertido en un quebradero que cabeza.
    Tengo un mando de una estufa y quiero poder encendenla con Arduino al alimentarlo de tensión, con lo cual tengo que repicar solo la tecla de encendiodo como podria hacerlo?
    gracias.

    1. Para poder opinar debería saber al menos cómo es el mecanismo de encendido de tu estufa. Normalmente son mecánicos así que vas a necesitar algún tipo de actuador.

  13. Hola, sobre el receptor fuiste claro, ahora sobre el control remoto, que caracteristica tiene . Lo digo para implementar este mismo proyecto

    1. El control remoto vino en un kit de Arduino que compré en DX. Y no trajo especificaciones, ni modelo o marca. Así que usé el receptor y el osciloscopio para ver la señal que emitía cada botón y deduje así cómo estaba codificado.

  14. que tal, desearía saber como es que puedo configurar mis propios botones, es decir, obtener el código de cada uno de ellos, he probado con la configuración que tienes pero solo consigo que el led haga 10 parpadeos. no logro identificar como obtener esos códigos de los botones. Gracias por tu respuesta.

  15. Hola amigo, tengo un problema, pues no me funciona, por mas que presiono el control no prende el led, he usado varios control remoto pero nada, que puede ser?, quizas se daño el VS1838, si fuera asi como lo compruebo?

    1. Los problemas pueden ser varios. Lo ideal es contar con un osciloscopio para poder medir la salida del VS1838. El control remoto se puede probar apuntando el LED a la cámara del celular y presionando una tecla. Deberías ver en la pantalla que el LED del control se ilumina. Debés tener en cuenta que si el control no transmite 38kHz el VS1838 no lo va a detectar. Para probar el VS1838 deberías hacer un programa simple que lea el pin de datos del VS y que entre en un bucle hasta que el valor cambie. Y que si sale del bucle prenda el LED del pin 13.

  16. hola soy diego estoy tratando de buscar un código para un mando universal que con las tecas numéricas ingrese una clave y me habilite un relay y luego siga tomando distintas teclas hasta que presione una para apagarlo y que vuelva a pedir clave se puede hacer algo asi aclaro soy nuevo con arduino es para mi un gusto leer gente como ustedes que la tienen tan clara

    1. Hola Diego, eso se puede programar. No tengo un código que haga eso. Y en este momento no tengo las herramientas para programarlo. Pero es posible que encuentres algo parecido buscando en internet.

  17. Hola Leandro, estoy haciendo una maqueta de coche a escala y para las leds normales, me sale bien pero….para los intermitentes….no, no se como hacer para asignarle un código del mando en el programa, podrías ayudarme??

  18. Hola Leandro, estoy haciendo un coche a escala con leds y control remoto infrarrojos, en arduino nano, los leds que se encienden y apagan con el mando, no tengo problema pero…..con los intermitentes, no hay manera, tengo que poner un código (1 botón del mando) para intermitente izquierdo, el derecho y otro para los 4, pero no se como hacer, podrías ayudarme??

  19. Hola buenas noches,
    Mira yo tengo un mando IR parecido a este http://img.focalprice.com//860×666/YE/YE0749/YE0749G-9.jpg es un mando de un helicóptero que ya no funciona, que tiene para acelerar y disminuir la velocidad y a su vez doblar derecha e izquierda.
    yo e echo con el Arduino el receptor y puedo ver los numero que retorna pero me estoy volviendo loco ya que por cada variación que tiene el control cambia el numero,
    trate de ver si los números tienen alguna lógica (ej si al acelerar se hacen cada vez mas grande o algo asi) pero no le encontré ninguna.

    tenes idea de como puedo hacer para saber desde el arduino los movimientos que estoy realizando con el control?

    desde ya muchas gracias,
    Matias

  20. Bom dia!

    Como pode observar sou do BR, bem ao sul, em Içara – SC – BR!
    Estou tentando usar o controle com chip na NEC e conectar um VS1838 em um PIC16F628, e estou com algumas dúvidas, por exemplo:

    _ Qual o sinal na saída do VS1838 quando em repouso, I ou O (5vcc ou Gnd)?
    _ Como eu descubro o momento inicial do “start” de 9 ms?
    _ Pelo que observei, é recebido o Start de 9 ms em I (5vcc), 4,5 ms em O (Gnd), estou certo?
    _ Imagino que seja da seguinte maneira: A saída do VS1838 esta sempre em I (5vcc) e quando recebe o sinal do controle remoto joga a O (Gnd) e depois vai I (5vvcc) novamente, estou certo?

    Desde já agradeço a sua atenção!

    1. ¡Hola Odair!

      La salida del VS1838 es cero (gnd) cuando no recibe una señal válida (en este caso una señal de 38kHz). La salida es 1 (5V) a partir del momento en que se detecta una señal de 38kHz. El integrado tiene un límite y su salida no permanece en 1 indefinidamente aunque la señal de la entrada permanezca. Esto se debe a los filtros para aislar fuentes lumínicas constantes.

      La mejor forma de detectar la señal es utilizar una interrupción del micro que se dispare con un cambio positivo (flanco ascendente) de nivel de la entrada. De esta forma el código de la interrupción se ejecutará cuando aparezca el primer pulso. El código deberá medir el tiempo hasta que cambie el nivel de la señal. De esa forma sabrás cuanto mide el pulso y podrás decidir si se trata del pulso de inicio. En ese caso deberías borrar el último valor leído y comenzar a comparar los anchos de los pulsos siguientes con los valores de referencia. Determinando en cada caso si se trata de un 1 o un 0, y almacenando el valor del bit recibido en una variable hasta recibir el pulso completo.

      Te recomiendo que leas y entiendas cómo funcionar el programa del artículo porque vos tenés que hacer lo mismo con el PIC.

  21. muy bien, me trabajo a la primera perfectamente. como podria modificar que la salida 1 corresponda a la tecla 1, la salida 2 a la tecla 2 y asi suscecivamente?, algun tip?

Leave a Reply