Paso 3: Volver a aplicar el protocolo en el microcontrolador
Empezar por escribir funciones para pulsos cortos y largos. A continuación es un pseudocódigo para empezar, implementaciones individuales pueden variar.
void bit_long()
{
set_pin_high();
Delay(HIGH_TIME_LONG);
set_pin_low();
Delay(LOW_TIME_LONG);
}
void bit_short()
{
set_pin_high();
Delay(HIGH_TIME_SHORT);
set_pin_low();
Delay(LOW_TIME_SHORT);
}
Obtener las constantes de tiempo mediante la medición de los anchos de pulso con su analizador o funciones de cursor de alcance. Utilice la función de retardo apropiado (microsegundos/milisegundo) que mejor se adapte a la anchura medida. En AVR son _delay_us() y _delay_ms(), ambos de la biblioteca de < util/delay.h >.
Luego, comenzar a implementar sus transmisiones. Empezar por hacer una función para el preámbulo y una función para la secuencia final, luego hacer funciones para datos internos de cada botón. Cualquiera puede escribir una función para cada botón, o si usted puede averiguar lo que el protocolo te está haciendo puede escribir una función que se construye el mensaje apropiado de número de salida y entradas de encendido/apagado. Elegí la primera, como el Protocolo no parecen correlacionar directamente el número de la toma y de encendido y apagado en sus datos, más bien era un pulso largo para la tecla presionada. Por ejemplo:
void send_preamble()
{
bit_short();
bit_long();
bit_long();
bit_short();
bit_long();
bit_short();
}
Por último, usar estas funciones en un bucle enviar aproximadamente 10 - 20 veces, con el correspondiente retraso entre transmisiones (puede medir este retraso con su alcance o analizador). Por ejemplo:
para (int i = 0; i < 10; i ++)
{
send_preamble();
send_outlet_1_on();
send_end_sequence();
_delay_ms(10);
}
Entonces construir una interruptor/caja o cascada de if/else instrucción con uno de estos bloques para cada botón, usando estado de número y el interruptor de salida como su las condiciones if/else.
Por último, importar una biblioteca de serial o escribir su propia rutina de interrupción del puerto serie. En interrumpir la rutina, el número de salida y el estado del interruptor de datos recibidos. Utilizar variables volátiles que se pueden cambiar desde dentro un ISR, por lo que el bucle principal puede recoger en las variables de sistema y realizar la transmisión deseada. No olvide inicializar el puerto serie y establecer su velocidad antes de iniciar el lazo principal!