La structure du programme écrit en GCBasic est très simple. Le programme principal est la boucle infinie suivante:
returnsub = 1 do Select case returnsub case 1: Startbit case 2: Decode_frame case 3: Process_frame end Select loop
La fonction startbit est elle même une boucle infinie dont on sort lorsque le 1er signal Pulsadis à 175Hz a été détecté. Si ce signal est de qualité le code retour est mis à 2 et le retour au programme principal va lancer l’exécution de la routine decode_frame. Comme son nom le suggère celle-ci va décoder les 40 impulsions Pulsadis et les stocker dans le vecteur »vect ». Une fois le décodage terminé le programme continue sur l’exécution de la routine process_frame qui va analyser les impulsions, vérifier leur cohérence logique et afficher le résultat sur un écran LCD 2×16 et sur un terminal série (si »debug »=1).
Le cœur de ce programme est la fonction Detect175Hz qui, comme son nom le suggère, retourne 1 si le signal 175Hz est détecté, 0 sinon. L’algorithme utilisé est celui proposé par Matthieu Benoit mais l’échantillonnage se fait ici sur 40ms à 700Hz. Lorsque la variable »debug » est activée on peut vérifier la qualité du signal associé aux impulsions (25= signal max correspondant à 25x40ms=1 sec à 175Hz).
Bonjour,
Je vous félicite pour la clarté de ce blog. J’ai néanmoins une interrogation. Je souhaite afficher le numéro de toutes les impulsions détectées (afficher le vect(index) autrement dit…)
Donc, sub Code_Tempo, sub Code_EJP, function coherent, sub Affiche_EJP et sub Affiche_Tempo disparaissent.
Mon souci : Ecrire le Sub Affiche_Impulsion…
Peut-on converser par mail en MP?
Cordialement.
Xavier
Bonjour
Pour afficher le numéro d’impulsion et sa valeur (0 ou 1) vous pouvez modifier le début du code de la routine Process_frame
for index = 1 to 40 'Vect est transformé en 0 ou 1 selon seuil
if (vect(index) > treshold2 ) then
vect(index) = 1
else
vect(index)=0
end if
hserprint index
hserprint " "
hserprint vect(index)
hserprintcrlf
next
L’impression se fait dans ce cas sur la sortie série COM1. Voir manuel gcbasic http://gcbasic.sourceforge.net/help…
Cdlt
Merci beaucoup !