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 :)
Tags:
Tutorial
gan, boleh minta program vb yang sudah jadi?
ReplyDeletetolong kirimkan ke email saya dong :)
Email: doni.mailana@gmail.com
Terimakasih Informasinya, sangat membantu sekali...
ReplyDeleteGan, ada coding VB untuk membaca data dari EDC, atau program yang bisa komunikasi dengan EDC bank... Terimakasih
ReplyDeletertbReceived nya kok gak bisa ya min?
ReplyDeletesama, saya juga mengalami hal yang sama.
Deleteapakah source ini bisa dibagi?