La primera parte que hice fue hacer que se graficara un valor en un PictureBox tomando como referencia un valor de 0-255 de un control VScroll Bar
La segunda parte fue hacer la comunicación con el puerto Com seleccionando el puerto con ListBox y un botón de conectar y desconectar ya puedo recibir los datos de 0-255 que me envía el micro en un TextBox.
Mi problema radica en que no logro sustituir los datos recibidos por el puerto por los del VScroll1 para que sean estos los que se grafiquen.
Agradezco de antemano cualquier ayuda.
Adjunto el programa
https://mega.co.nz/#!HcpRmLxa!ujqPytMachBxO8qDR5es6O7AKwnyA1YFxfiAZdyXWJk
Este es el código que me funciona grafica el valor del VScroll1, y muestra el valor recibido por el puerto COM.
Código:
Option Explicit
Dim cx As Integer, cy As Integer
Dim cx1 As Integer, cy1 As Integer
Dim i As Integer, j As Long
Dim x As Long, y As Integer
Dim dato(1000) As Long
Dim pcx As Long, pcy As Long
Dim fcx As Long, fcy As Long
Dim n As Integer ' n define la base de tiempo o time-division
Dim Send_Buf(0) As Byte
Const verde = &HFF00&
Const rojo = &HFF&
Dim valor As Single, maximo As Integer
Dim te As Byte
'--------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------
Private Sub Form_Load()
valor = VScroll1.Value
Label4.Caption = VScroll1.Value
' el resultado del CAD en un tiempo discreto
maximo = VScroll1.Max
' viene siendo el máximo número de pasos del CAD (8 bits=255, 10 bits=1023)
n = 30
' el time-division
cy = Picture1.ScaleHeight ' 117
cx = Picture1.ScaleWidth ' 253
cy1 = Picture1.ScaleHeight ' 117
cx1 = Picture1.ScaleWidth ' 253
pcx = Picture1.Width
pcy = Picture1.Height
fcx = Me.Width
fcy = Me.Height
ajustar_tiempo (n)
Timer1.Enabled = False
Timer2.Enabled = False
HScroll1.Value = n
End Sub
Private Sub Form_Resize()
Timer1.Enabled = False
Timer2.Enabled = False
Picture1.Height = Form1.Height / (fcy / pcy)
Picture1.Width = Form1.Width / (fcx / pcx)
Picture1.ScaleHeight = Picture1.Height / (pcy / cy1)
Picture1.ScaleWidth = Picture1.Width / (pcx / cx1)
cy = Picture1.ScaleHeight
cx = Picture1.ScaleWidth
Picture1.Cls
x = -1: y = 0: i = 0: j = -1
ajustar_tiempo (n)
Timer1.Enabled = True
End Sub
Private Sub HScroll1_Change()
n = HScroll1.Value
lblconta.Caption = n
Form_Resize
End Sub
Private Sub HScroll1_Scroll()
lblconta.Caption = HScroll1.Value
End Sub
Private Sub Timer1_Timer()
Label1.Caption = VScroll1.Value ' Imprime en Label1 el valor de VScroll1
Label4.Caption = VScroll1.Value
valor = VScroll1.Value
If valor = 0 Then
valor = 1
End If
dato(i + 1) = Int(cy - valor * (cy / maximo)) 'Int(Rnd * (cy + 1))
If Not j > (cx - n) Then ' pregunta si i no ha llegado a cx
Picture1.Line (x, dato(i))-(j, dato(i + 1)), vbBlack '((&HFFFFFF / (i + 1)))
x = j
i = i + 1
j = j + n
Else
Timer1.Enabled = False ' ya llego, deja de dibujar
Timer2.Enabled = True ' ya llego, deja de dibujar
End If
Label1.Caption = "CAD= " & Round(valor * (5 / maximo), 3) & " volts -> 0x" & Hex(valor)
End Sub
Private Sub Timer2_Timer()
Picture1.Cls
x = -1
j = -1
Label1.Caption = VScroll1.Value
Label4.Caption = VScroll1.Value
valor = VScroll1.Value
If valor = 0 Then
valor = 1
End If
If n > 1 Then
dato(Int((cx / n) + 2)) = Int(cy - valor * (cy / maximo)) 'Int(Rnd * (cy + 1))
Else
dato(Int((cx / n)) + 1) = Int(cy - valor * (cy / maximo)) 'Int(Rnd * (cy + 1))
End If
For i = 0 To cx ' pregunta si i no ha llegado a cx
Picture1.Line (x, dato(i))-(j, dato(i + 1)), vbBlack '((&HFFFFFF / (i + 1)))
x = j
j = j + n ' para lograr el ajuste time-division
dato(i) = dato(i + 1) ' rellenar el dato(n) : 0 < n < cx
Next i
Label1.Caption = "CAD= " & Round(valor * (5 / maximo), 3) & " volts -> 0x" & Hex(valor)
End Sub
Function ajustar_tiempo(time_division As Integer)
If time_division > 1 Then
Timer1.Interval = 3 * time_division
Timer2.Interval = 3 * time_division
Else
Timer1.Interval = 1
Timer2.Interval = 1
End If
End Function
'____________________________________________________________________----------------------------------------
'Conectar al puerto
Private Sub Command1_Click()
MSComm1.CommPort = Val(Puertos.ListIndex + 1)
MSComm1.PortOpen = True
Timer3.Interval = 200
End Sub
'Cerrar Puerto
Private Sub Command2_Click()
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
Timer3.Interval = 0
End If
End Sub
'Limpia Text1 datos resibidos
Private Sub Command3_Click()
Text1.Text = ""
End Sub
'Cierra el programa
Private Sub Command4_Click()
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
End If
End
End Sub
'Salva los datos resividos como archivo de texto
Private Sub Command5_Click()
If Text1.Text <> "" Then
Dim cFile, cCadena As Variant
Dialogo.Filter = "Archivos de Texto|*.Txt|"
Dialogo.DialogTitle = "Guardar Como Archivo de Texto"
Dialogo.ShowSave
cFile = Dialogo.FileName
Open cFile For Output As #1
cCadena = Text1.Text
Write #1, cCadena
Close #1
End If
End Sub
'Re establese la configuracion predeterminada
Private Sub Default_Click()
Dim cSetting, Pari As String
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Puertos.Text = "COM6"
Baudios.Text = 9600
Bits.Text = 8
Paridad.Text = "Ninguna"
Parada.Text = 1
Select Case Paridad.Text
Case "Par"
Pari = "e"
Case "Impar"
Pari = "o"
Case "Ninguna"
Pari = "n"
Case "Marca"
Pari = "m"
Case "Espacio"
Pari = "s"
End Select
MSComm1.CommPort = Val(Mid(Puertos.Text, 4))
cSetting = (Baudios.Text) + "," + Pari + "," + Bits.Text + "," + Parada.Text
MSComm1.Settings = cSetting
' 9600,n,8,1
End Sub
Private Sub Timer3_Timer()
If MSComm1.PortOpen Then
Text1.Text = MSComm1.Input + Text1.Text
End If
End Sub