Étape 3: Ré-implémenter le protocole sur votre microcontrôleur
Commencer par écrire des fonctions pour les impulsions longues et courtes. Voici quelques pseudo-code pour vous aider à démarrer, implémentations individuelles peuvent varier.
Sub bit_long()
{
set_pin_high() ;
Delay(HIGH_TIME_LONG) ;
set_pin_low() ;
Delay(LOW_TIME_LONG) ;
}
Sub bit_short()
{
set_pin_high() ;
Delay(HIGH_TIME_SHORT) ;
set_pin_low() ;
Delay(LOW_TIME_SHORT) ;
}
Vous obtenez les constantes de temps en mesurant la largeur d’impulsion avec votre analyseur ou fonctions de curseur de lunette. Utilisez la fonction de délai approprié (microseconde/milliseconde) pour mieux s’adapter à la largeur mesurée. Sur AVR ce sont _delay_us() et _delay_ms(), tous deux de la bibliothèque de < util/delay.h >.
Ensuite, commencer à mettre en œuvre vos transmissions. Commencez par faire une fonction pour le préambule et une fonction pour la séquence de fin, puis faire des fonctions pour les données internes de chaque bouton. Vous pouvez soit écrire une fonction pour chaque bouton, ou si vous pouvez comprendre ce que le protocole fait vous pouvez écrire une fonction qui génère le message approprié de nombre de sortie et on/off entrées. J’ai choisi le premier, que le protocole ne semble pas directement établir une corrélation entre le nombre de sortie et marche/arrêt État dans ses données, plutôt que c’était juste une impulsion longue pour le bouton actionné. Par exemple :
Sub send_preamble()
{
bit_short() ;
bit_long() ;
bit_long() ;
bit_short() ;
bit_long() ;
bit_short() ;
}
Enfin, utiliser ces fonctions dans une boucle for pour leur envoyer environ 10 à 20 fois, avec le délai approprié entre les transmissions (vous pouvez mesurer ce retard avec votre portée ou analyseur). Par exemple :
pour (int i = 0; i < 10; i ++)
{
send_preamble() ;
send_outlet_1_on() ;
send_end_sequence() ;
_delay_ms(10) ;
}
Puis construire un switch/case ou en cascade if/else instruction avec l’un de ces blocs pour chaque bouton, utilisent l’état du nombre et interrupteur prise tant que vos conditions d’if/else.
Enfin, importez une bibliothèque de série ou écrire votre propre routine d’interruption du port série. Dans celui interrompre la routine, définir le nombre de sortie et l’état de commutation de données reçues. Utiliser des variables volatiles afin qu’ils peuvent être modifiés de dans un rapport de recherche internationale, pour que la boucle principale puisse revenir sur les variables set et effectuer la transmission désiré. N’oubliez pas d’initialiser votre port série et réglez votre bauds avant de commencer votre boucle principale !