' Test FP2 avec valeur de la direction de 0 à 127
' et Calcul des secteurs
'15/03/2005
'LA
$crystal = 4000000
$baud = 9600
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'configuration de l'écran LCD sur le port B
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Dim Valeur_lue As Byte
Dim Selection As Byte
Dim Force As Byte
Dim Boucle As Byte
Dim Direction As Long
Dim Vitesse As Long
Dim Partie_entiere As Long
Dim Partie_decimale As Long
Dim Colonne As String * 3
Dim Secteur As String * 4
Dim Unite As String * 7
Ddra = &H80 ' PA7 en sortie, les autres en entrées
Ddrc = &H00
Config Pind.7 = Output 'PD7 en S; TX=PD1 en S et RX=PD0 en Entrée
Sync Alias Portd.7
Cls
Locate 1 , 1
Lcd " TEST GIROUETTE "
Locate 2 , 1
Lcd " ANEMOMETRE "
Wait 2
Cls
Do
Gosub Anemometre
Gosub Calcul_force
Gosub Choixunite
If Unite = " mph" Then
Gosub Affichage_mph
Else
Gosub Affichage_vitesse
End If
'Gosub Direction_moyenne
Gosub Direction
Gosub Calcul_secteur
Locate 2 , 1
Lcd "force:"; Force; " "
Locate 2 , 14
Lcd Secteur; " "
Waitms 10
Sync = 0
Waitus 100
Sync = 1
Print Chr(&H1b); "[10;10H";
Print "Vent de force: "; Force; " "; "et de Secteur: "; Secteur; " ";
Loop
Anemometre:
Porta.7 = 0
Waitms 10 'mesure anemometre en mph
Valeur_lue = Pina And &H7F
Vitesse = Valeur_lue
Return
Direction:
Porta.7 = 1
Waitms 10
Valeur_lue = Pina And &H7F
Direction = Valeur_lue
Waitms 50
Return
Direction_moyenne:
Porta.7 = 1
Waitms 10
Direction = 0 ' afin de limiter l'effet des tourbillons du vent,
For Boucle = 1 To 100 Step 1
Waitms 1 ' on fait un filtrage numerique (moyenne sur 100 mesures)
Valeur_lue = Pina And &H7F
Direction = Direction + Valeur_lue
Waitms 1
Next Boucle
Direction = Direction / 100
Waitms 20
Return
Calcul_secteur:
Select Case Direction
Case Is < 2 : Secteur = " N "
Case 2 To 9 : Secteur = "NNE"
Case 10 To 17 : Secteur = "NE" ' pour un potentiomètre sans butée de course électrique 340°et de course mécanique 360° continue
Case 18 To 26 : Secteur = "ENE"
Case 27 To 34 : Secteur = "E"
Case 35 To 42 : Secteur = "ESE"
Case 43 To 51 : Secteur = "SE"
Case 52 To 60 : Secteur = "SSE"
Case 61 To 68 : Secteur = "S"
Case 69 To 77 : Secteur = "SSO"
Case 78 To 85 : Secteur = "SO"
Case 86 To 93 : Secteur = "OSO"
Case 94 To 102 : Secteur = "O"
Case 103 To 110 : Secteur = "ONO"
Case 111 To 118 : Secteur = "NO"
Case 119 To 127 : Secteur = "NNO"
End Select
Return
Choixunite:
Selection = Pinc And &H03 ' lecture de l'unité d'affichage et masque pour lire PC0 et PC1
If Selection = &H00 Then 'si l'unite choisie est le mph, alors
Unite = " mph"
Else
If Selection = &H01 Then 'si l'unite choisie n'est pas le mph, alors
Unite = " km/h"
Vitesse = Vitesse * 1609 'le mot vitesse est egal a la vitesse reelle
Else
If Selection = &H02 Then 'si l'unite choisie n'est pas le mph, alors
Unite = " m/s"
Vitesse = Vitesse * 447 'le mot vitesse vaut 1000 fois la vitesse reelle
Else
If Selection = &H03 Then
Unite = " noeuds"
Vitesse = Vitesse * 869
End If
End If
End If
End If
Return
Calcul_force: ' encadrements du tableau de l'echelle Beaufort
Select Case Vitesse
Case Is < 1 : Force = 0
Case 1 To 3 : Force = 1
Case 4 To 7 : Force = 2
Case 8 To 12 : Force = 3
Case 13 To 16 : Force = 4
Case 17 To 23 : Force = 5
Case 24 To 30 : Force = 6
Case 31 To 38 : Force = 7
Case 39 To 46 : Force = 8
Case 47 To 54 : Force = 9
Case 55 To 63 : Force = 10
Case 64 To 74 : Force = 11
Case Is > 74 : Force = 12
End Select
Return
Affichage_vitesse:
Partie_entiere = Vitesse / 1000
Partie_decimale = Partie_entiere * 1000
Partie_decimale = Vitesse - Partie_decimale
Partie_decimale = Partie_decimale / 100 '1 seul chiffre aprés la virgule
Select Case Partie_entiere
Case Is < 10 : Colonne = " " '2 espaces
Case 10 To 99 : Colonne = " " '1 espace
Case Is > 99 : Colonne = "" 'pas espace
End Select
Locate 1 , 1
Lcd Colonne; Partie_entiere; "."; Partie_decimale; Unite; " "
Return
Affichage_mph:
Select Case Partie_entiere
Case Is < 10 : Colonne = " " '2 espaces
Case 10 To 99 : Colonne = " " '1 espace
Case Is > 99 : Colonne = "" 'pas espace
End Select
Locate 1 , 1
Lcd Colonne; Vitesse; Unite; " "
Return
End 'end program