[Tutorial] Cara Parsing Beberapa Data ADC di Visual Basic 2013

Pada tutorial kali ini saya akan menerangkan bagaimana memilah data yang begitu banyak dengan menggunakan komunikasi serial pada mikrokontroller Arduino. Untuk teknik parsing ini saya gunakan metode indeks, yaitu setiap data saya tandai dengan sebuah simbol "|", sehingga proses parsing dan penomoran data dapat terkendali. Kemudian tiap data saya masukkan ke sebuah array dan dari array tersebut kita bisa panggil nilainya. Berikut caranya :

Tampilan Desain :



List Program VB :
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Public Class Form1
    'Variabel Untuk Data Serial
    Private readBuffer As String = String.Empty
    Private Bytenumber As Integer
    Private ByteToRead As Integer
    Private byteEnd(2) As Char
    Dim strinput As String
    Dim prosesoff As Boolean = False
    Dim disconnect As Boolean = False

    Dim data(5) As String

    'Variabel Penampung Port
    Dim myPort As Array  'COM Ports detected on the system will be stored here
    Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box.
        myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
        cmbBaud.Items.Add(9600)     'Populate the cmbBaud Combo box to common baud rates used
        cmbBaud.Items.Add(19200)
        cmbBaud.Items.Add(38400)
        cmbBaud.Items.Add(57600)
        cmbBaud.Items.Add(115200)

        For i = 0 To UBound(myPort)
            cmbPort.Items.Add(myPort(i))
        Next
        cmbPort.Text = cmbPort.Items.Item(0)    'Set cmbPort text to the first COM port detected
        cmbBaud.Text = cmbBaud.Items.Item(0)    'Set cmbBaud text to the first Baud rate on the list
        btnDisconnect.Enabled = False           'Initially Disconnect Button is Disabled
    End Sub

    Private Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
        SerialPort1.PortName = cmbPort.Text         'Set SerialPort1 to the selected COM port at startup
        SerialPort1.BaudRate = cmbBaud.Text         'Set Baud rate to the selected value on

        'Other Serial Port Property
        SerialPort1.Parity = IO.Ports.Parity.None
        SerialPort1.StopBits = IO.Ports.StopBits.One
        SerialPort1.DataBits = 8            'Open our serial port
        SerialPort1.Open()

        btnConnect.Enabled = False          'Disable Connect button
        btnDisconnect.Enabled = True        'and Enable Disconnect button

        System.Threading.Thread.Sleep(10)
        Timer1.Enabled = True
        SerialPort1.Write("a")
    End Sub

    Private Sub btnDisconnect_Click(sender As Object, e As EventArgs) Handles btnDisconnect.Click
        'SerialPort1.Close()             'Close our Serial Port
        Timer1.Enabled = False
        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
        System.Threading.Thread.Sleep(10)
        disconnect = True
        SerialPort1.Write("b")
        Timer2.Enabled = True
        rtbReceived.Text = "   "
    End Sub

    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        If SerialPort1.IsOpen Then
            Try
                '================Default Coding Data Serial===========================
                byteEnd = SerialPort1.NewLine.ToCharArray
                Bytenumber = SerialPort1.BytesToRead
                readBuffer = SerialPort1.ReadLine()

                Me.Invoke(New EventHandler(AddressOf DoUpdate))
            Catch ex As Exception
                'MsgBox("read " & ex.Message)
            End Try
        End If
    End Sub

    Public Sub DoUpdate(ByVal sender As Object, ByVal e As System.EventArgs)
        'Pada TextBox1.Text sudah dapat menampilkan data dari SerialPort1

        Timer1.Enabled = True
        Call proses_fix()
        'Jika membaca boolean disconnect maka mengirim perintah true ke prosesoff
        If disconnect Then
            prosesoff = True
        End If
    End Sub

    Private Sub proses_fix()
        strinput = rtbReceived.Text
        Dim panjang_data As Integer
        Dim x As Integer
        Dim z As Integer
        strinput = TextBox1.Text
        panjang_data = Len(TextBox1.Text)

        Dim i As Integer
        i = 0
        z = 0

        'jika mendeteksi "|" pada string txt_inputdata dimulai string ke1 dengan panjang data 1
        For x = 1 To Len(readBuffer$)                                    'looping untuk data ke dua sampai terakhir pada txt_inputdata
            If Mid(readBuffer$, x, 1) = "|" Then
                z = z + 1                               'jika mendeteksi "|" ke dua dimulai ke x dengan panjang data 1, jadi x sebagai simbol dari "|"
                data(i) = Mid(readBuffer$, z, x - z) 'data ke i = integer dari pengambilan data txt_inputdata dimulai dari z(awalnya 2) sampai ke x - z
                i = i + 1                                       'i incr dari 0 ke satu, satu ke dua dst...
                z = x                                        'z di incrm dengan x karena panjang max = x dan awal data = z maka untuk mendapatkan data = x-z
            End If
        Next x
    End Sub

    Private Sub cmbPort_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbPort.SelectedIndexChanged
        If SerialPort1.IsOpen = False Then
            SerialPort1.PortName = cmbPort.Text         'pop a message box to user if he is changing ports
        Else                                                                               'without disconnecting first.
            MsgBox("Valid only if port is Closed", vbCritical)
        End If
    End Sub

    Private Sub cmbBaud_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbBaud.SelectedIndexChanged
        If SerialPort1.IsOpen = False Then
            SerialPort1.BaudRate = cmbBaud.Text         'pop a message box to user if he is changing baud rate
        Else                                                                                'without disconnecting first.
            MsgBox("Valid only if port is Closed", vbCritical)
        End If
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If SerialPort1.IsOpen Then
            rtbReceived.Text = readBuffer
            TextBox1.Text = data(0)
            TextBox2.Text = data(1)
            TextBox3.Text = data(2)
            TextBox4.Text = data(3)
            TextBox5.Text = data(4)
        End If
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        If prosesoff Then
            SerialPort1.Close()
            Timer2.Enabled = False
            rtbReceived.Text = "   "
        End If
    End Sub
End Class

List Program Arduino :
//Untuk Sensor Potensiometer
int pot = A0;
//Untuk Sensor LDR
int ldr = A1;
//Untuk Sensor Kelembapan Tanah
int hg = A2;

void setup() 
{
  // put your setup code here, to run once:
 Serial.begin(9600); 
}

void loop() 
{
  //Potensio
  int potensio = analogRead(pot);
  //LDR
  int sensorldr = analogRead(ldr);
  //Kelembapan
  int sensorhg = analogRead(hg);
  //=================

  Serial.print(potensio);
  Serial.print("|");
  Serial.print(sensorldr);
  Serial.print("|");
  Serial.print(sensorhg);
  Serial.print("|");
  Serial.print(sensorldr);
  Serial.print("|");
  Serial.print(sensorhg);
  Serial.println("|");
  delay(50);
}


Hasil Running :

Terima Kasih, Semoga Bermanfaat :)

5 Comments

  1. gan, boleh minta program vb yang sudah jadi?
    tolong kirimkan ke email saya dong :)
    Email: doni.mailana@gmail.com

    ReplyDelete
  2. Terimakasih Informasinya, sangat membantu sekali...

    ReplyDelete
  3. Gan, ada coding VB untuk membaca data dari EDC, atau program yang bisa komunikasi dengan EDC bank... Terimakasih

    ReplyDelete
  4. rtbReceived nya kok gak bisa ya min?

    ReplyDelete
    Replies
    1. sama, saya juga mengalami hal yang sama.
      apakah source ini bisa dibagi?

      Delete
Previous Post Next Post