Paso 5: Escribir el código
El programa consta de tres partes principales:
1) código IR Buffering
2) interpretación de código IR
3) PWM Control (color RGB fijo, pérdida de color y modo de luz blanca).
Código de infrarrojos almacenamiento en búfer:
Mediante el proceso descrito en el paso 4 - "Hacking el mando a distancia" Aprendí que la longitud de 0, 1, empezar a pulso, y pulso de repetición todos los valores únicos y repetibles. Cada vez que el PIC detecta un flanco descendente en el pin 17 (interrupción-en-cambio) sería registrar el tiempo desde el último borde descendente y luego comparar ese valor a una serie de tiempo "windows" para determinar que tipo de pulso sólo vino en. Puedes ver un diagrama de flujo aproximada de este proceso en las imágenes de abajo. El código de comparación de ventana no es original, lo encontré en el excelente sitio web PICLIST (http://www.piclist.org/techref/piclist/index.htm). Si la longitud no cae en cualquier ventana, puse una bandera mal código (A.C.) y omitir todo hasta el siguiente pulso.
Interpretación del código de infrarrojos:
Cada vez que se detecta un 1 o 0, el PIC empuja ese valor en un registro de 8-bit FIFO. A pesar de que el tren de pulsos desde el mando a distancia es más de 8 bits, siempre terminamos con el pasado 8 en el registro, que contienen un único valor para cada clave de interés. Comparar este código para el conocido valor digital de cada clave (éstos fueron medidos en el osciloscopio en el paso 4) para averiguar qué botón fue presionado y que acción tomar (luz blanca modo, modo RGB, aumentar velocidad de Fader, etc.). Este valor de 8 bits se guarda en un segundo registro por lo que si aparece el pulso de repetición, se sabe que comando se repite.
Control PWM:
La 16F1829 de la PIC tiene 4 registros PWM de 10 bits hardware que lo hace ideal para el control de color RGB. Mediante el uso de los módulos de hardware PWM PIC es libre para hacer otras cosas mientras que el PWM se va al fondo.
La intensidad de cada color está controlada por 10 bits. Cuando la lámpara se enciende, cada valor está en max para dar luz blanca. Cuando se presiona el botón "CONV", un bucle de la parte 3 comienza en el software.
Parte 1) disminuyendo rojo, verde, incrementar, azul = 0
Parte 2) verde reducir, incrementar azul, rojo = 0
Parte 3) azul reducir, incrementar, verde rojo = 0
El programa continúa hasta que se selecciona el modo de luz blanco, o se pulsa el botón "Estático" para poner en pausa la lámpara en el color actual de bucle a través de estas tres partes.