All pastes #12336 Raw Edit

Untitled

public text v1 · immutable
#12336 ·published 2005-05-21 16:10 UTC
rendered paste body
' 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