Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Απ: Πρόβλημα με το άνοιγμα της θύρας για GPS.

  •  19-07-2009, 12:36

    Απ: Πρόβλημα με το άνοιγμα της θύρας για GPS.

    Επιτέλους, τα κατάφερα! Big Smile

    Το OpenNETCF.IO.Serial δουλεύει άψογα! Yes

    Σας αναφέρω την λύση για όποιον ενδιαφέρεται:


    Κατεβάστε το OpenNETCF.IO.Serial.zip από εδώ: http://serial.codeplex.com/Release/ProjectReleases.aspx
    Ξεκινήστε ένα νέο Project με VC# ή VB.
    Δώστε στην φόρμα τις διαστάσεις της συσκευής σας (πχ 240x320 ή 480x272).
    Αποθηκεύστε το!
    Αποσυμπιέστε το OpenNETCF.IO.Serial.zip στον φάκελο που κάνατε save το project σας.
    Από το μενού File επιλέξτε Add -> Existing Project...
    Πηγαίνετε στον φάκελο του project σας και κάντε διπλό κλικ στο αρχείο OpenNETCF.IO.Serial.csproj.
    Θα σας βγάλει ένα μήνυμα (δεν ξέρω γιατί) επιλέξτε Yes.
    Από δεξιά (Solution Explorer) κάντε δεξί κλικ στο OpenNETCF.IO.Serial και επιλέξτε Build (Μη τρομάξετε με τα Warnings).
    Τώρα κάντε δεξί κλικ στο Project σας (πάλι απ' το Solution Explorer) και επιλέξτε Add Reference...
    Από την καρτέλα Projects κάντε διπλό κλικ στο OpenNETCF.IO.Serial.
    Αυτό ήταν, είστε έτοιμοι!

    Σας δίνω ένα παράδειγμα γραμμένο σε Visual Basic:
    Βάλτε στην φόρμα 3 κουμπιά (Button1, Button2, Button3) και ένα TextBox (TextBox1).
    Στα Properties του TextBox1 επιλέξτε Multiline = True και μεγαλώστε το TextBox στο ύψος (σχεδόν σε όλο το παράθυρο).
    Τώρα θα πρέπει να βάλετε ένα Timer (Timer1) απ' το οποίο θα διαβάζουμε την θύρα του GPS.
    Μπείτε στον κώδικα και κάντε copy/paste τα παρακάτω και είστε έτοιμοι:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Imports System.Text
    Imports OpenNETCF.IO.Serial

    Public Class Form1
    Dim MyPort As Port
    Dim IncomingData As String = ""

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Text = "Read GPS Sample"
    Button1.Text = "Open COM"
    Button2.Text = "Close COM"
    Button3.Text = "Exit"

    MyPort = New Port("COM7:") ' Εδώ βάλτε τη θύρα του GPS.

    MyPort.RThreshold = 1 ' get an event for every 1 byte received
    MyPort.InputLen = 1 ' calling Input will read 1 byte
    MyPort.SThreshold = 1 ' send 1 byte at a time

    Timer1.Enabled = True
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    TextBox1.Text = TextBox1.Text + vbCrLf + "Opening COM Port... "
    MyPort.Open()
    TextBox1.Text = TextBox1.Text + "OK!" + vbCrLf
    Catch ex As Exception
    TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf
    End Try

    If MyPort.IsOpen() Then TextBox1.Text = TextBox1.Text + vbCrLf + "COM Port is open!" + vbCrLf
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Try
    TextBox1.Text = TextBox1.Text + vbCrLf + "Closing COM Port... "
    MyPort.Close()
    TextBox1.Text = TextBox1.Text + "OK!" + vbCrLf
    Catch ex As Exception
    TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf
    End Try

    If Not MyPort.IsOpen() Then TextBox1.Text = TextBox1.Text + vbCrLf + "COM Port is closed!" + vbCrLf
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    If MyPort.IsOpen() Then MyPort.Close()
    MyPort.Dispose()
    Application.Exit()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If Not MyPort.IsOpen() Then Exit Sub

    Dim enc As Encoding = Encoding.ASCII 'Display as text
    Dim inputData As Byte() = New Byte(0) {}
    Dim I As Integer

    For I = 1 To MyPort.InBufferCount
    inputData = MyPort.Input 'Read the character
    IncomingData = IncomingData + enc.GetString(inputData, 0, inputData.Length)
    Next I
    If IncomingData <> "" Then
    Try
    TextBox1.Text = TextBox1.Text + IncomingData
    IncomingData = String.Empty
    Catch ex As Exception
    TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf
    End Try
    End If
    TextBox1.SelectionStart = TextBox1.Text.Length : TextBox1.ScrollToCaret() 'Scroll TextBox Down
    End Sub
    End Class
    Αν τα κάνατε όλα σωστά, θα έχετε το παρακάτω αποτέλεσμα:


    Τώρα, αν κάποιος θέλει να το κάνει με Visual C#, μπορεί να
    κατεβάσει το SerialCSharp.zip από εδώ: http://serial.codeplex.com/Release/ProjectReleases.aspx


    Ευχαριστώ για τον χρόνο σας, το πρόβλημά μου λύθηκε!
Δείτε όλες τις δημοσιεύσεις της Θεματική Ενότητας
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems