IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Timer supérieur à 65535 ms j'ai une erreur exécution 380


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut Timer supérieur à 65535 ms j'ai une erreur exécution 380
    Bonjour
    Je débute en visual basic, et j'ai un soucis avec une erreur d'exécution 380, j'utilise un temps en ms, donc 1000 = 1s mais dès que je dépasse 65000 et quelques, une erreur d'exécution 380 apparait lorsque je clique sur le bouton radio concerné, je pense que c'est du à "interger" je mets "long" a la place mais ca n'accepte pas ce changement
    Qui a une idée ?
    SVP help
    Merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    bonjour,

    Sans connaître ton code et avec quel évenement de quel contrôle, il faudrait être devin.

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Utilise un entier supplémentaire...

    ben tu peu limiter ton "temps" (timer..?) à 1000 ... et à chaque fois qu'il arrive à 1000 tu "resete" .. ce temps et tu incrémente un variable (integer) séparé... ainsi tu multiplie par 1000 tes possibilités de temporisation...


  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut Oui voila plus de précision
    Désolé, voila plus de précision (je suis débutant, enfin j'essai lol)
    Voila un morceau du code

    ---------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Private Sub option_1_min_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_1_min_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    ...
    ...
    ...
     
    Private Function update_sample_rate()
        If option_1_sec Then
            Timer1.Interval = 1000
        ElseIf option_60_sec Then
            Timer1.Interval = 60000
        ElseIf option_15_min Then
            Timer1.Interval = 900000
        ElseIf option_60_min Then
            Timer1.Interval = 3600000
        Else
            Timer1.Interval = 1000
        End If
    End Function
    -----------------------------------
    Pour 15 minutes et 60 minutes l'erreur apparait
    Merci encore

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Voilà donc :

    Laisse l'intervalle en paix (à la valeur la plus petite qui te convient) et joue avec une variable dans ton timer et avec l'heure en cours.

    Bonne continuation...

  6. #6
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    La propriété Interval du controle timer ne peut pas excéder 65535 (voir l'aide de VB) donc un peu plus d'une minute.
    Plutot que d'utiliser un controle timer, tu pourrais stocker dans une variable la valeur de la fonction Timer qui te donne le nombre de secondes écoulées depuis minuit, avec une précision au centième de seconde en théorie.

    Donc quand tu veux déclencher ton chrono tu fais un truc du style :
    TempsDepart = Timer

    et pour voir si le temps est écoulé tu boucles en attendant que
    Timer >= TempsDepart + IntervalAttenteEnSeconde

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re bonjour,

    Se servir de la fonction Timer dans l'événement Timer du contrpôle Timer est en effet également une solution.

    Ainsi donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private montempo As Integer
     
    Private Sub Form_Load()
      montempo = 5
    End Sub
     
    Private Sub Timer1_Timer()
      Static le_dernier As Long
      If Timer >= le_dernier + montempo Then
        MsgBox "bonjour"
        le_dernier = Timer
      End If
    End Sub

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par ucfoutu
    ....
    Se servir de la fonction Timer dans l'événement Timer du contrpôle Timer est en effet également une solution....
    ... on complique un peu la non ..? avec tous les utilisateurs de VB qui confonde le contrôle Timer et la fonction Timer ... si en plus l'on mélange les 2..


    christophe_s46 ... l'on peu voir ta fonction timer..?

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour Bbil,

    C'est pourtant tout-à-fait çà, non ?
    On a utilisé la fonction Timer dans l'événement Timer du Contrôle Timer.
    Ce sont les termes choisis par Monsieur Bill pour son VB6

    edit : et je ne vois nulle part (je viens de tout relire) que le demandeur n'a pas réellement besoin d'une action répétitive, donc d'un Timer .

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut fonction timer
    Voici la fonction timer
    mais c'est pas moi qui les faites, c'est un petit programme qui permet de lire la température sur un capteur ds1621, il y a 4 choix d'intervalle pour acquérir la température 1s 5s 30s et 1 minute, mais mois je souhaite avoir une plage plus longe que 1 minute ! je voulais donc mofifier en 1s 1minute 15 minutes et 1 heure, et donc pour 15 minutes et 1 heure ca ne marche pas puisque je dépesse effectivement ce fameux 65..., je me suis bien débrouiller pour le reste lol c trop facile mais apres je calle sérieusement, car je découvre tout ca depuis hier soir, si c'était pas limité a 65... tout ce serait bien passé mais voila

    Voila le code en entier hors mis pour gérer le port série
    Vu mes grandes connaissances sur le sujet je suis pas contre à ce que vous le modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
     
    Private Sub Form_Load()
        ReadIni
        update_com_port
        update_sample_rate
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
        close_iic_bus
        SaveIni
    End Sub
     
    Private Sub option_1_heu_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_1_heu_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_1_sec_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_1_sec_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_15_min_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_15_min_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_1_min_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_1_min_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_com1_Click()
        update_com_port
    End Sub
     
    Private Sub option_com1_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com2_Click()
        update_com_port
    End Sub
     
    Private Sub option_com2_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com3_Click()
        update_com_port
    End Sub
     
    Private Sub option_com3_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com4_Click()
        update_com_port
    End Sub
     
    Private Sub option_com4_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub Timer1_Timer()
        Dim t As Double
        Dim unit As String
        If check_farenheit Then
            unit = "°F"
        Else
            unit = "°C"
        End If
     
        t = temperature(0)
     
        If t = ERROR_TEMPERATURE_NOT_READ Then
            MsgBox "Unable to read internal temperature", vbOKOnly, "Error"
            Timer1.Enabled = False
            label_temperature_indoor.Caption = "--.-" + unit
        Else
            If check_farenheit Then
                t = farenheit(t)
            End If
            label_temperature_indoor.Caption = Format(t, "#0.0" + unit)
       End If
     
       If option_double Then
            t = temperature(1)
            If t = ERROR_TEMPERATURE_NOT_READ Then
                MsgBox "Unable to read external temperature", vbOKOnly, "Error"
                Timer1.Enabled = False
                label_temperature_outside.Caption = "--.-" + unit
            Else
                If check_farenheit Then
                    t = farenheit(t)
                End If
                label_temperature_outside.Caption = Format(t, "#0.0" + unit)
            End If
       Else
            label_temperature_outside.Caption = "--.-" + unit
       End If
     
       If option_double Then
            frm_thermometer.Caption = label_temperature_indoor.Caption + "    ( out " + label_temperature_outside.Caption + " )"
       Else
            frm_thermometer.Caption = label_temperature_indoor.Caption
       End If
     
       log_to_file
     
    End Sub
     
    Private Function temperature(address As Integer) As Double
     
        Dim temperature_int As Long
        Dim temperature_frac As Long
     
        address = address * 2
        On Error GoTo errors
        open_iic_bus MSComm1.object
     
        '/*resettiamo bene il chip*/
        IIC_stop
        '/**/
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HAC
        IIC_tx_byte &H2
     
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HEE
     
        IIC_stop
     
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HAA
        IIC_start
        IIC_tx_byte &H91 + address
        temperature_int = IIC_rx_byte(1)
     
        temperature_frac = IIC_rx_byte(0)
        temperature = (temperature_int * 256 + temperature_frac) / 128 * 5 / 10
        If temperature_int >= 128 Then
            temperature = temperature - 256
        End If
        IIC_stop
        Exit Function
     
    errors:
        temperature = ERROR_TEMPERATURE_NOT_READ
    End Function
     
    Private Function update_sample_rate()
        If option_1_sec Then
            Timer1.Interval = 1000
        ElseIf option_1_min Then
            Timer1.Interval = 5000
        ElseIf option_15_min Then
            Timer1.Interval = 900000
        ElseIf option_1_heu Then
            Timer1.Interval = 3600000
        Else
            Timer1.Interval = 1000
        End If
    End Function
    Private Function update_com_port()
        If MSComm1.PortOpen Then
            MSComm1.PortOpen = False
        End If
     
        If option_com1 Then
            MSComm1.CommPort = 1
            Timer1.Enabled = True
        ElseIf option_com2 Then
            MSComm1.CommPort = 2
            Timer1.Enabled = True
        ElseIf option_com3 Then
            MSComm1.CommPort = 3
            Timer1.Enabled = True
        ElseIf option_com4 Then
            MSComm1.CommPort = 4
            Timer1.Enabled = True
        Else
            MSComm1.CommPort = 1
            Timer1.Enabled = False
        End If
     
    End Function
     
    Private Function farenheit(t As Double)
        farenheit = 32 + 9 / 5 * t
    End Function
     
    Private Function log_to_file()
        If check_log_to_file Then
            Open "pc_thermometer.txt" For Append As #1
            Print #1, Date$, Time$, label_temperature_outside.Caption, label_temperature_indoor.Caption
            Close #1
        End If
    End Function
    Merci

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bon tu rajoute donc une variable iPeriodeAcquisition ( dans laquelle tu stocke la période d'acquisition à réaliser ... et une variable iCptSecondes : qui va te permettre de compter les secondes..
    tout en haut de ton code , et tu initialise ton Timer.Interval ) 1000 (1s)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim iPeriodeAcquisition as integer
    Dim iCptSecondes as integer 
    Private Sub Form_Load()
        Timer1.Interval = 1000
        ReadIni
        update_com_port
        update_sample_rate
    End Sub
    Tu modifie ta fonction de sélection en exprimant les temps en secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Function update_sample_rate()
        If option_1_sec Then
            iPeriodeAcquisition = 1
        ElseIf option_60_sec Then
            iPeriodeAcquisition  = 6
        ElseIf option_15_min Then
            iPeriodeAcquisition = 900
        ElseIf option_60_min Then
            iPeriodeAcquisition = 3600
        Else
            iPeriodeAcquisition  = 1
        End If
    End Function
    tu renomme ta procédure Timer en subAcquisition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Private Sub Timer1_Timer()
    Private Sub  subAcquisition()
       Dim t As Double
        Dim unit As String
        If check_farenheit Then
            unit = "°F"
        Else
            unit = "°C"
        End If
    ...
       log_to_file
     
    End Sub
    ensuite tu crée ta nouvelle procédure timer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Timer1_Timer()
      iCptSecondes = iCptSecondes +1
      if iCptSecondes >= iPeriodeAcquisition
       iCptSecondes  = 0
       Call subAcquisition ()
      endif
    End sub

    bon j'espère avoir été assez clair..

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut Merci je vais essayer
    Merci encore

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut Re
    Me revoila,
    Je n'ai plus l'erreur 380 et l'acquisition de la température se fait bien tous les secondes quand 1s sélectionné, le problème c'est que quand je sélectionne 1minute ou 15 minutes ou 1 heure, l'acquisition se faire toutes les secondes, ca ne tient pas compte de mon choix

    J'ai du aussi rajouter des ligne pour déclarer des variables su'il me réclamé pour générer le .exe

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
     
     
    Option Explicit
     
    Private Sub Form_Load()
    Dim iPeriodeAcquisition As Integer
    Dim iCptSecondes As Integer
        Timer1.Interval = 1000
        ReadIni
        update_com_port
        update_sample_rate
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
        close_iic_bus
        SaveIni
    End Sub
     
    Private Sub option_60_min_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_60_min_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_1_sec_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_1_sec_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_15_min_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_15_min_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_60_sec_Click()
        update_sample_rate
    End Sub
     
    Private Sub option_60_sec_KeyPress(KeyAscii As Integer)
        update_sample_rate
    End Sub
     
    Private Sub option_com1_Click()
        update_com_port
    End Sub
     
    Private Sub option_com1_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com2_Click()
        update_com_port
    End Sub
     
    Private Sub option_com2_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com3_Click()
        update_com_port
    End Sub
     
    Private Sub option_com3_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
    Private Sub option_com4_Click()
        update_com_port
    End Sub
     
    Private Sub option_com4_KeyPress(KeyAscii As Integer)
        update_com_port
    End Sub
     
     
     
     
    Private Sub subAcquisition()
        Dim t As Double
        Dim unit As String
        If check_farenheit Then
            unit = "°F"
        Else
            unit = "°C"
        End If
     
        t = temperature(0)
     
        If t = ERROR_TEMPERATURE_NOT_READ Then
            MsgBox "Unable to read internal temperature", vbOKOnly, "Error"
            Timer1.Enabled = False
            label_temperature_indoor.Caption = "--.-" + unit
        Else
            If check_farenheit Then
                t = farenheit(t)
            End If
            label_temperature_indoor.Caption = Format(t, "#0.0" + unit)
       End If
     
       If option_double Then
            t = temperature(1)
            If t = ERROR_TEMPERATURE_NOT_READ Then
                MsgBox "Unable to read external temperature", vbOKOnly, "Error"
                Timer1.Enabled = False
                label_temperature_outside.Caption = "--.-" + unit
            Else
                If check_farenheit Then
                    t = farenheit(t)
                End If
                label_temperature_outside.Caption = Format(t, "#0.0" + unit)
            End If
       Else
            label_temperature_outside.Caption = "--.-" + unit
       End If
     
       If option_double Then
            frm_thermometer.Caption = label_temperature_indoor.Caption + "    ( out " + label_temperature_outside.Caption + " )"
       Else
            frm_thermometer.Caption = label_temperature_indoor.Caption
       End If
     
       log_to_file
     
    End Sub
     
     
    Private Sub Timer1_Timer()
    Dim iPeriodeAcquisition As Integer
    Dim iCptSecondes As Integer
      iCptSecondes = iCptSecondes + 1
      If iCptSecondes >= iPeriodeAcquisition Then
       iCptSecondes = 0
       Call subAcquisition
      End If
    End Sub
     
     
    Private Function temperature(address As Integer) As Double
     
        Dim temperature_int As Long
        Dim temperature_frac As Long
     
        address = address * 2
        On Error GoTo errors
        open_iic_bus MSComm1.object
     
        '/*resettiamo bene il chip*/
        IIC_stop
        '/**/
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HAC
        IIC_tx_byte &H2
     
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HEE
     
        IIC_stop
     
        IIC_start
        IIC_tx_byte &H90 + address
        IIC_tx_byte &HAA
        IIC_start
        IIC_tx_byte &H91 + address
        temperature_int = IIC_rx_byte(1)
     
        temperature_frac = IIC_rx_byte(0)
        temperature = (temperature_int * 256 + temperature_frac) / 128 * 5 / 10
        If temperature_int >= 128 Then
            temperature = temperature - 256
        End If
        IIC_stop
        Exit Function
     
    errors:
        temperature = ERROR_TEMPERATURE_NOT_READ
    End Function
     
    Private Function update_sample_rate()
    Dim iPeriodeAcquisition As Integer
        If option_1_sec Then
            iPeriodeAcquisition = 1
        ElseIf option_60_sec Then
            iPeriodeAcquisition = 60
        ElseIf option_15_min Then
            iPeriodeAcquisition = 900
        ElseIf option_60_min Then
            iPeriodeAcquisition = 3600
        Else
            iPeriodeAcquisition = 1
        End If
    End Function
     
     
    Private Function update_com_port()
        If MSComm1.PortOpen Then
            MSComm1.PortOpen = False
        End If
     
        If option_com1 Then
            MSComm1.CommPort = 1
            Timer1.Enabled = True
        ElseIf option_com2 Then
            MSComm1.CommPort = 2
            Timer1.Enabled = True
        ElseIf option_com3 Then
            MSComm1.CommPort = 3
            Timer1.Enabled = True
        ElseIf option_com4 Then
            MSComm1.CommPort = 4
            Timer1.Enabled = True
        Else
            MSComm1.CommPort = 1
            Timer1.Enabled = False
        End If
     
    End Function
     
    Private Function farenheit(t As Double)
        farenheit = 32 + 9 / 5 * t
    End Function
     
    Private Function log_to_file()
        If check_log_to_file Then
            Open "pc_thermometer.txt" For Append As #1
            Print #1, Date$, Time$, label_temperature_outside.Caption, label_temperature_indoor.Caption
            Close #1
        End If
    End Function
    Ca doit pas etre grand chose
    Help lol
    Merci

  14. #14
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    J'avoue me noyer un peu dans tous tes controles command et option
    Pour démo, voici un code de démonstration supplémentaire. Sur un nouveau projet, créé 3 boutons radio nommés tous les 3 "Option1", leur index allant de 0 à 2, leur caption doit être simplement un nombre représentant le nombre de secondes d'attentes que tu sélectionneras en cliquant sur le bouton correspondant, donc pour le test, mets par exemple 10,60 et 120.
    Ajoute un bouton de commande (Command1) et 2 controles Labels (Label1 et Label2)
    Ajoute enfin un controle Timer (Timer1), c'est tout côté contrôles, maintenant le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     Option Explicit
    Dim Attente       As Integer
    Dim TimerDepart   As Single
     
    Private Sub Form_Load()
    'Pour initialiser le controle Timer1
    Timer1.Enabled = False
    Timer1.Interval = 1000
    End Sub
     
    Private Sub Command1_Click()
    Dim i As Byte
     
    'On cherche quel bouton d'option a été sélectionné
    'Le délai d'attente sera la valeur du caption de ce bouton
    For i = 0 To 2
      If Option1(i).Value = True Then
        Attente = Val(Option1(i).Caption)
      End If
    Next i
     
    'On mémorise le temps de départ
    TimerDepart = Timer
    Label1.Caption = "Nouveau compte à rebours déclenché à " & Time
    Timer1.Enabled = True
    End Sub
     
    Private Sub Timer1_Timer()
    'Ce code est exécuté toutes les secondes
    'Propriété Interval de Timer1 = 1000
     
    If Timer >= TimerDepart + Attente Then
      'Le délai est écoulé
      'Pour la démo ici, on met à jour 2 labels
      'Mais on peut faire autre chose...
      'aller chercher une bière par exemple mais dans ce cas ne pas mettre le timer à 10 secondes
      Label2.Caption = "Delai d'attente atteint à " & Time
      'On réinitialise le temps de départ
      TimerDepart = Timer
      Label1.Caption = "Nouveau compte à rebours déclenché à " & Time
    End If
    End Sub
    Pour marcher à toute heure, ce code devrait envisager le passage à minuit, ce que je n'ai pas fait ici, à minuit - 1 s, la fonction Timer renvoit 86399, à minuit, elle renvoit 0, à toi de gérer ça

    En regardant un chouille ton code, ton problème vient du fait que à chaque déclenchement du controle Timer, tu déclare les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim iPeriodeAcquisition As Integer
    Dim iCptSecondes As Integer
    Donc celles ci repartent à 0. Il va te falloir apprendre ce qu'est une portée de variable, où, quand et comment on déclare des variables. Un peu de lecture t'attend je pense...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut bbil t la ? Help
    Bonjour
    T la Bbil ?
    Je trouve pas d ou peut venir le problème, j'ai juste remarqué que le programme prends la valeur tiemer intervale = 1000 car quand je mets 10000 l'acquisition se fait toute les 10 secondes quelque soit le choix choisi dans le programme

  16. #16
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour Christophe, merci de relire toutes les réponses:

    Citation Envoyé par bbil
    Bon tu rajoute donc une variable iPeriodeAcquisition ( dans laquelle tu stocke la période d'acquisition à réaliser ... et une variable iCptSecondes : qui va te permettre de compter les secondes..
    tout en haut de ton code , et tu initialise ton Timer.Interval ) 1000 (1s)
    ...
    Citation Envoyé par OhMonBato
    ....
    En regardant un chouille ton code, ton problème vient du fait que à chaque déclenchement du controle Timer, tu déclare les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim iPeriodeAcquisition As Integer
    Dim iCptSecondes As Integer
    Donc celles ci repartent à 0. Il va te falloir apprendre ce qu'est une portée de variable, où, quand et comment on déclare des variables. Un peu de lecture t'attend je pense...
    tu n'as pas déclaré tes variables où je "te l'ai dis"...
    mais bon c'est ma faute j'aurai peu-être pas du te donner un truc tout cuit...

    ces deux variables iPeriodeAcquisition et iCptSecondes sont des variables dites "globale" (à ta form..) et ne son à déclarer qu'une fois tout en haut de ta page de code...

    tiens la lecture :
    Les variables

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut Ca marcheeeeeeeeeeee !
    Effectivement j'ai déclaré les variables complètement en haut et ca marche, ca me servira de lecon en tout cas merci beaucoup !
    Sans toit j'aurais abandonné, et merci aux autres aussi !
    Il me reste un dernier problème mais complètement différent, je vais ouvrir une autre discution
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  3. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  4. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo