elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Graficar ADC en Visual Basic 6
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Graficar ADC en Visual Basic 6  (Leído 1,747 veces)
Olinqui

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Graficar ADC en Visual Basic 6
« en: 21 Enero 2015, 01:35 am »

Hola a todos les cuento que soy bastante novato en la programación VB, me desenvuelvo mejor en PIC CCS y ensamblador para microcontroladores, intento graficar una señal analógica adquirida por el ADC de un PIC.

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


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines