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:
saludosImports 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