-
13/03/2007 - 13h55 jkidd
Programme en VB
Voila, j'aimerais savoir si dans le programme que je suis en train de finir, vous y voyez quelquechose de bizarre, merci Code: Option Explicit
Dim Dimension As String
Dim nBuffer As Integer
Dim i As Integer
Private MonTableau() As String
Dim Row As Integer
Private Sub CmdAcqui_Click()
CmdAcqui.Enabled = False
CmdInit.Enabled = False
MSComm1.Output = Chr(&H22) & Chr(&H14) & Chr(&H0) 'On met 0h a l'adresse 14h => On arrete l'acquisition des temperature avec MIP=0
MSComm1.Output = Chr(&H55) 'On va maintenant lire des données
MSComm1.Output = Chr(&H33) & Chr(&H0) & Chr(&H1A) 'On lit la page avec OOh pour poids fort et 1Ah pour poids faible
Do
nBuffer = MSComm1.InBufferCount 'On fait une boucle pour obtenir que les 8 premieres valeurs de la page recu sur le port serie
Loop While nBuffer < 8
Dimension = MSComm1.Input
Dimension = Asc(Left(Dimension, 1))
ReDim MonTableau(Dimension - 1)
MSComm1.Output = Chr(&H55) 'On va maintenant lire des données
MSComm1.Output = Chr(&H33) & Chr(&H10) & Chr(&H0) 'On lit la page avec 1Oh pour poids fort et 0h pour poids faible
Do
nBuffer = MSComm1.InBufferCount 'On fait une boucle pour obtenir que les 34 premieres valeurs de la page recu sur le port serie
Loop While nBuffer < 34
For i = 0 To Dimension - 1
MonTableau(i) = Mid(MSComm1.Input, i, i + 1) 'On place nos valeurs dans le tableau
Next i
MSChart1.TitleText = "Graphique de températures"
MSChart1.chartType = VtChChartType2dLine
With MSChart1
.Repaint = False ' Pas de rafraichissement
.ColumnCount = 1 ' Nombre de courbe
.RowCount = Dimension ' Nombre de points
'Tracé du graphique
.Column = 1 ' Numero du graphique
.ColumnLabel = "MonTableau" ' Libellé du 1er graphe
'On rentre les valeurs du graphe point par point
For Row = 1 To Dimension
.Row = Row 'Absisse X
.RowLabel = CStr(Row) 'On convertit en Single
.Data = MonTableau(Row) 'Ordonnée Y
Next Row
.Repaint = True ' Rafraîchissement du controle
End With
End Sub
Private Sub CmdInit_Click()
CmdInit.Enabled = False
CmdAcqui.Enabled = False
MSComm1.Output = Chr(&H22) & Chr(&HE) & Chr(&H40) 'On ecrit 40h a l'adresse 0Eh => On met CLR a 1
MSComm1.Output = Chr(&HA5) 'On efface la memoire
Dim i As Variant
For i = 0 To 10000000 'On met en palce une boucle pour laisser le temps au DS1616 d'effacer sa memoire
i = i + 1
Next i
MSComm1.Output = Chr(&H22) & Chr(&H29) & Chr(&H40) 'On ecrit 40h a l'adresse 29h => On met CS0 à 1
MSComm1.Output = Chr(&H22) & Chr(&HE) & Chr(&H10) 'Ecriture de l'octet 10h a l'adresse 0Eh => On met SE a 1
MSComm1.Output = Chr(&H22) & Chr(&HD) & Chr(&H1) 'On ecrit 01h a l'adresse 0Dh => On met 1 minute entre chaque acquisition de temperature
CmdInit.Enabled = True
CmdAcqui.Enabled = True
End Sub
Private Sub Form_Load()
With MSComm1
.CommPort = 1 'On initialise la liaison serie sur le port 1
.Settings = "9600,N,8,1" 'On met une cadence de 9600 bauds, sans parité, 8 bits de données (avec un bit de start) et un bit stop
.PortOpen = True 'On ouvre le port
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox "Etes vous sur de vouloir quitter l'application?", vbQuestion + vbOKCancel, "Sortie"
End Sub J'ai ajouté la balise code (#) pour plus de lisibilité.
Merci d'exploiter les fonctionnalités du forum.
yoda1234.
Dernière modification par yoda1234 ; 15/03/2007 à 12h30.
-
14/03/2007 - 12h13 Stan_94
Re : Programme en VB
Bonjour,
Si j'ai bien compris, tu fait de l'acquisition de données depuis un genre de thermomètre électronique via le port série afin d'en faire un graphique par l'object MSchart20Lib.
C'est trés intéressant ! Par contre le programme marche-t-il? A première vue il n'y a rien de bizarre...
Bon courage.
-
14/03/2007 - 15h16 jkidd
Re : Programme en VB
Oui Stan_94, il s'agit en fait d'un DS 1616 que j'essaye de faire fonctionner apres une phase ou il y a socker des temperatures de maniere autonome.
Mon soucis, c'est plus la mise en oeuvre de la commande MSChart que le reste, est ce que ca semble correct ?
Merci
-
15/03/2007 - 12h22 Stan_94
Re : Programme en VB
Ca semble correct, à par un petit truc...
Je ne sais pas d'où ça vient, et j'ai tester vite fait l'utilisation de MSChart, mais j'ai du mettre Dimension = Dimension - 1
avant For Row = 1 To Dimension
.Row = Row 'Absisse X
.RowLabel = CStr(Row) 'On convertit en Single
.Data = MonTableau(Row) 'Ordonnée Y
Next Row
sinon il y avait un dépassement de capacité ???
Il faudra que je me penche sur la question dès que j'aurai un moment, à moins que quelqu'un connaisse la chose !
-
15/03/2007 - 13h40 jkidd
Re : Programme en VB
oui j'y avait pensé et je pense que ca marche sans probleme comme ca, merci d'avoir lever mon doute Stan_94 (il me semble que le reste marche super bien - a mon echelle lol)
Encore MERCI STAN_94
D'ailleurs, je peux pas ecrire : Code:
For Row = 1 To Dimension - 1
.Row = Row 'Absisse X
.RowLabel = CStr(Row) 'On convertit en Single
.Data = MonTableau(Row) 'Ordonnée Y
Next Row au lieu de Code: Dimension = Dimension - 1
avant
For Row = 1 To Dimension
.Row = Row 'Absisse X
.RowLabel = CStr(Row) 'On convertit en Single
.Data = MonTableau(Row) 'Ordonnée Y
Next Row
Dernière modification par jkidd ; 15/03/2007 à 13h45.
-
16/03/2007 - 11h51 Stan_94
Re : Programme en VB
Mais de rien, tu apportes plus que moi sur ce coup!
Et je trouve ton code interessant, je vais peut-être me mettre à regarder comment marche tout ça, pour faire soit même une sonde externe qui serait relié et piloté par le PC via le port série...
Sinon, le deuxième code marche aussi : Code: For Row = 1 To Dimension - 1
.Row = Row 'Absisse X
.RowLabel = CStr(Row) 'On convertit en Single
.Data = MonTableau(Row) 'Ordonnée Y
Next Row c'est bon, mais pour être lisible je conseillerais de mettre des parenthèses Code: For Row = 1 To (Dimension - 1) Encore un truc tant que j'y pense. Tu comptes stocker les relevés dans une base de donnée, fichier ou autre ? A moins que le DS 1616 ne le permette...
-
16/03/2007 - 16h24 jkidd
Re : Programme en VB
Le DS1616 stocke dans un histogramme mais pas plus 2047 de valeurs, donc j'y transposerai dans une base de données par la suite.
En plus de faire capteur de temperature, il a 3 entrées analogiques pour d'autres capteurs comme capteur humidite, capteur pression...
Pour rappel, il possede une horloge a temps réel (super interessant si on veut se faire une petite station météo....-j'y compte bien y arriver d'ici un petit mois)
| | |