Hola
llevo dias con este problema y la verdad necesito ayuda, tengo que obtener latitud y longitud desde una PPC ocupando el puerto del GPS, tengo un codigo que no falla pero que no me trae resultados.
SerialPort1.ReadExisting()
Casi siempre esta vacio, a veces trae informacion pero nunca obtengo las coordenadas GPS, y si ocupo la aplicacion con la que viene en la PPC si trae correctamente la info.
esta validado que ocupa el puerto correcto y todo, pero por alguna razon no me trae los datos.
Este es el codigo completo: ojala alguien tenga una idea
Código:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO.Ports
Public Class Form1
#Region "Variables"
Public Latitud As String
Public Longitud As String
#End Region
#Region "Constructor"
Public Sub New()
' Esto es necesario
InitializeComponent()
' Aqui intentamos abri el puerto
Try
SerialPort1.PortName = "COM6"
SerialPort1.BaudRate = 9600
SerialPort1.Parity = System.IO.Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.Open()
btnEmp.Text = "Detenido"
Catch ex As Exception
MessageBox.Show(ex.Message)
Timer1.Enabled = False
btnEmp.Text = "Iniciado"
Refresh()
Return
End Try
End Sub
#End Region
Private Sub btnEmp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEmp.Click
'Comprobamos el estado del timer y lo invertimos.
If Timer1.Enabled = True Then
Timer1.Enabled = False
Else
Timer1.Enabled = True
End If
If btnEmp.Text = "Iniciado" Then
btnEmp.Text = "Detenido"
Else
btnEmp.Text = "Iniciado"
End If
End Sub
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If SerialPort1.IsOpen Then
'En esta variable, insertamos todo lo leido del Puerto.
Dim datos As String = SerialPort1.ReadExisting()
TextBox1.Text = ""
TextBox1.Text = Now.ToString("hh:mm:ss") & "--" & SerialPort1.IsOpen & "-->" & datos & vbCrLf
'Aqui creamos las diferentes lineas, basandonos en el simbolo del dolar
Dim strArr() As String = datos.Split("$")
Dim i As Integer = 0
If strArr.Length > 1 Then
Try
For i = 0 To strArr.Length
'Ahora obtenemos los datos, separados por las comas.
Dim strTemp As String = strArr(i)
Dim lineArr() As String = strTemp.Split(",")
'Si la linea es GPGGA, cojemos los bloques de cadena 2 y 4 (latidud y longitud) y pasamos los datos obtenidos a coordenadas UTM.
If (lineArr(0) = "GPGGA") Then
Try
Dim dLat As Decimal
Dim dLon As Decimal
dLat = Convert.ToDecimal(lineArr(2))
dLat = dLat / 100
Dim lat() As String = dLat.ToString().Split(".")
Latitud = lat(0).ToString() + "." + ((Convert.ToDouble(lat(1)) / 60)).ToString("#####")
txtLat.Text = Latitud
dLon = Convert.ToDecimal(lineArr(4))
dLon = dLon / 100
Dim lon() As String = dLon.ToString().Split(".")
Longitud = lon(0).ToString() + "." + ((Convert.ToDouble(lon(1)) / 60)).ToString("#####")
txtLong.Text = Longitud
Catch
' Si no podemos leer el GPS
'txtLat.Text = "No puedo leer GPS "
'txtLong.Text = "No puedo leer GPS"
End Try
End If
Next
Catch
'No hacemos nada
End Try
End If
Else
txtLat.Text = "Puerto COM Cerrado"
txtLong.Text = "Puerto COM Cerrado"
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form2.Show()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Application.Exit()
End Sub
End Class
saludos