HOLA!!!, creo este tema por que necesito un poco de asesoria, realize un codigo para visualizar una señal a 19200 baudios proveniente de el puerto serial y funciona en parte, sin embargo me sale un errorcito que no se a que se deba los datos llegan en ascii, agradezco de antemano cualquier ayuda, en cuanto al circuito es un conversor analogo digital que toma los datos y los envia en ascii de modo serial al computador por usb. la parte referente a excel muestra como estoy intentando exportar y almacenar los datos en un xls.
en realidad no recuerdo la velocidad maxima de 232 pero este codigo creo que funciona igual para transmision rs 232 a 19200 baudios, si no me equivoco el 232 llega hasta 115200 baudios
el codigo funciona, muestra los datos tomados del puerto hasta cierto punto y entonces aparece el errorcito
se crea el archivo en excel exitosamente pero solo logra enviar uno de los datos
Option Explicit
Dim ejex As Integer
Dim ejey As Integer
Dim acum As Double
Dim x As Integer
Dim y As Integer
Dim dato As Integer
Dim i As Integer
Dim a As Integer
Dim Buffer As String
Dim Bufferfinal As String
Private Sub Command1_Click()
'MSComm1.setting="19200,N,8,1"
'MSComm1.CommPort = 6 ' selecciona el Com1
'MSComm1.InputLen=0 ' pone buffer a cero (opcional)
'MSComm1.PortOpen = True
'MSComm1.Output = "Texto a enviar"
'MSComm1.PortOpen = False ' para cerrar
'Text1.Text = MSComm1.Input
'c = Asc(g)
'---------------------- en ascii
'g = MSComm1.Input
'Text1.Text = g
'--------------------
Buffer = MSComm1.Input
For i = 1 To Len(Buffer)
Bufferfinal = Bufferfinal & Format(Asc(Mid(Buffer, i, 1)), "00") & " "
Next
'Bufferfinal = Bufferfinal & Format(Asc(Buffer), "00") & " "' SELECCIONO PARA UNO A UNO
Text1.Text = Bufferfinal
'------------------------------
'Private Function a2d(ByVal asci As String) As Integer
'a2d = Asc(asci)
'End Function
'USO DE FUNCIONES O RUTINAS
'-------------------------
'Private Sub Command2_Click()
'Textbox2.Text = a2d(Textbox1.Text)
'End Sub
'-------------------------
End Sub
Private Sub Command3_Click()
'esto te guarda el grafico en el directorio que quieras
SavePicture Picture1.Image, "C:grafico.jpeg" 'le puse .bmp porque asi me dijiste
'pero puede ser tambien .jpeg
End Sub
--------------------------------PARTE EXCEL SI DESEAN OMITANLA DEBO MODIFICARLA AUN----------------------------
Private Sub Command4_Click()
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add 'Este codigo lo modifique tratando de que salgan los datos en una columna
Dim DataArray(1 To 100) As Variant
Dim r, k As Integer
Buffer = MSComm1.Input
For k = 1 To Len(Buffer)
Bufferfinal = Asc(Buffer)
Next 'Add headers to the worksheet on row 1
Set oSheet = oBook.Worksheets(1)
oSheet.Range("A1:C1").Value = Array("Order ID") 'Transfer the array to the worksheet starting at cell A2
oSheet.Range("A2").Resize(100, 3).Value = DataArray
'Save the Workbook and Quit Excel
oBook.SaveAs "C:Book1.xls"
oExcel.Quit
End Sub
Private Sub Form_Load()
MSComm1.InputLen = 1
'MSComm1.InputMode = comInputModeText
MSComm1.PortOpen = True
'MSComm.Output = hex2ascii
'Buffer = MSComm.Input
End Sub
'--------------------------PARTE DE GRAFICACION TENGO UN ERRORCITO QUE NO SE QUE ES...
Private Sub Command2_Click()
ejex = 0
ejey = Picture1.Height 'inicializo los puntos del grafico
otro:
'--------------------------------------------------
'For acum = 0 To 100 Step 0.15 'aqui genero la onda, en tu caso aqui seria
'DoEvents 'leer los datos del puerto serial y guardarlos
'dato = Sin(acum) * 10 'en dato, a veces es necesario multiplicarlos para
'---------------funciona----------------------
Buffer = MSComm1.Input
dato = Asc(Buffer) / 5 ' SELECCIONO PARA UNO A UNO
'---------------------funciona-----------------
Call dibujar
For i = 0 To (100) Step 1 'este es un retraso que se le pone para que el
For a = 0 To (10) Step 1 'usuario pueda apreciar la onda
Next a 'si se le quita la onda se dibuja muy rapido
Next i 'Next acum
GoTo otro
End Sub
Public Sub dibujar()
x = ejex + (10) 'defino el valor de x que son los datos del eje x, ejex
'es el dato anterior inicialmente cero ese 10 es para que se aprecie mejor la señal
y = ((Picture1.Height / 2) - ((dato) * 20)) 'tomo el valor del alto del cuadro '
'entre dos y se le resta el valor que me va dando el valor de la función
'este valor lo multiplico por 20 para que se vea la gráfica
Picture1.Line ((ejex * 3), ejey)-((x * 3), y) 'dibujo una linea con los valores anteriores
ejex = x
ejey = y
If ejex > Picture1.Width Then 'si el valor de ejex es mayor que el ancho del cuadro
ejex = 0 'que ponga a ejex a cero
Picture1.Cls 'y que borre pantalla.
'esta parte la hago para que cuando llegue al final del cuadro inicie de nuevo
'del lado izquierdo del cuadro.
End If
End Sub