' 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