TUJUAN
Mahasiswa dapat melakukan permintaan (request) data pada sebuah peralatan untuk
mengambil jenis data tertentu.
PENDAHULUAN
Pada percobaan sebelumnya, sebuah alat yang diwakili oleh simulator mikrokontroler
mempunyai 4 macam data sensor (lihat Gambar 1). Alat tersebut mengirimkan data secara terus
menerus ke PC untuk ditampilkan. Kejadian semacam ini jarang digunakan karena membuat
jalur komunikasi selalu sibuk. Pada umumnya, anda harus melakukan request terlebih dahulu,
kemudian alat akan mengirimkan data yang anda butuhkan.
Gambar 1.2 Gambar 2. Beberapa alat monitor yang terhubung dalam sebuah jaringan
(Sumber: https://ipc247.com/EDM/UA-69223573-40-ADAM-RemoteIO)
Pada percobaan kali ini, anda akan menggunakan simulator mikrokontroler dengan mode
“By request”. Untuk mengambil data sensor dari simulator mikrokontroler tersebut, anda harus
Novanna Rahma Zani - 1103181047
melakukan request kepada mikrokontoler. Request yang anda berikan harus mempunyai format
sebagai berikut:
TUGAS
1. Membuat program dengan C# untuk melakukan request ke simulator mikrokontroler dan
menampilkan data sensor yang dikirimkan oleh simulator mikrokontroler. Request dapat
dilakukan dengan cara menekan tombol atau cara lain. Anda dapat melihat kembali percobaan
Lab 4 untuk melakukan teknik send dan receive.
2. Dalam laporan, menjelaskan juga tentang maksud dari instruksi serialport.newline,
serialport.readline, dan serialport.writeline!
Jawab :
Perancangan GUI
Pada bagian ini, akan dijelaskan prosedur perancangan serta penjelasan program pada
GUI.
1. Membuka Visual Studio 2012 lalu membuat project baru yaitu Windows Form
Application dan menambahkan komponen seperti Gambar 3.1.
Jika pada percobaan sebelumnya saya hanya menggunakan satu Timer yang diaktifkan
dengan button start, pada Lab 8 ini saya menambahkan satu timer lagi untuk menjalankan
proses pada request data, timer ini nantinya diaktifkan oleh button Send Request.
(a) (b)
Gambar 3.2 (a) Kondisi awal button Connect (b) Setelah button Connect ditekan
Kondisi awal button ini diberi text “Connect”, lalu setelah user klik tombol tersebut
program akan memeriksa apakah serial port pada aplikasi sudah terbuka. Jika serial port
dalam posisi terbuka atau serialPort1.IsOpen == true maka perintah yang akan
dijalankan adalah serialPort1.Close(); yaitu perintah menutup koneksi serial port. Tetapi
Novanna Rahma Zani - 1103181047
default aplikasi ini jelas pada awalnya serial port belum terbuka atau serialPort1.IsOpen
== false, sehingga pada kondisi awal program akan langsung diarahkan ke perintah
dalam kurung kurawa else. Perintah itu akan mengarahkan program ke identitas serial
port seperti Port Name, Baudrate lalu membuka serialPort. Setelah serial port1 terbuka
maka text pda button ini akan berubah menjadi Disconnect.
3. Untuk Combobox COMM Port dan Baudrate seperti percobaan sebelumnya, yaitu
pada form1_load ditambahkan program :
String[] portList = System.IO.Ports.SerialPort.GetPortNames();
foreach (String portName in portList)
comboBox1.Items.Add(portName);
comboBox1.Text = comboBox1.Items[comboBox1.Items.Count - 1].ToString();
Program diatas merupakan program yang berapa di private form1_load, form1 membuat
combobox1 diisi oleh nama serial port yang diambil dari
System.IO.Ports.SerialPort.GetPortNames(); Lalu serial port yang dikenali
ditampilkan di comboBox1.
public Form1()
{
InitializeComponent();
//baudrate
comboBox2.Items.Add("9600");
comboBox2.Items.Add("14400");....
}
Tidak seperti COMM Port yang nama serial portnya diambil dari system.IO, nilai
baudrate diatur manual dengan menambahkan items pada comboBox2 seperti program
diatas.
(a) (b)
Gambar 3.3 (a) Item comboBox COMM Port (b) Item comboBox Baudrate
4. Tombol start digunakan untuk memberikan perintah seperti program berikut :
private void button3_Click(object sender, EventArgs e)
Novanna Rahma Zani - 1103181047
{
if (serialPort1.IsOpen == true)
{
timer1.Enabled = !(timer1.Enabled);
if (timer1.Enabled == true)
button3.Text = "Stop";
else
button3.Text = "Start";
}
else
{
toolStripStatusLabel1.Text = "Connect your serial port first!";
}
}
Ketika user klik tombol Start, program akan memeriksa apakah user telah
mengkoneksikan aplikasi dengan serial port, kondisi ini dianggap program sebagai
serialPort1.IsOpen == true. Button ini juga berfungsi untuk mengaktifkan dan
menonaktifkan timer1. Button3.Text akan menjadi Stop ketika timer aktif dan Start
ketika timer tidak aktif.
Gambar 3.4 Kondisi saat User klik Start Button tetapi Aplikasi belum terkoneksi
COMM Port
Ketika user klik tombol start padahal sebelumnya ia belum mengkoneksikan aplikasi
dengan serial port, program akan mengingatkan user pada toolStripStatus seperti pada
program toolStripStatusLabel1.Text = "Connect your serial port first!"; yang berarti
User tidak akan bisa mengaktifkan timer jika ia belum mengkoneksikan port serial.
label15.ResetText();
label16.ResetText();
button4.Text = "Set";
}
Tombol ini akan mereset data pada label sehingga ketika program bisa di Start kembali
tanpa ada data yang tertinggal.
(a)
(b)
Gambar 3.5 (a) Tampilan label data saat User belum klik Reset Button
(b) Tampilan label data setelah user klik Reset Button
7. Seperti pada tugas Lab 8, point utamanya kita dapat mengirimkan command atau
request data sehingga simulator hanya akan mengirimkan data yang kita butuhkan.
Pada group box Request Data, terdapat 5 checkbox yang akan digunakan user untuk
memilih data apa yang ia butuhkan.
a.) Checkbox ini baru bisa digunakan user ketika ia sudah memulai aplikasi, yaitu
sudah klik Start Button. Jika belum, checkbox ini unenable.
private void timer1_Tick(object sender, EventArgs e)
{
checkBox1.Enabled = true;
checkBox2.Enabled = true;
checkBox3.Enabled = true;
checkBox4.Enabled = true;
checkBox5.Enabled = true;
toolStripStatusLabel1.Text = "Set your request data!";
}
Novanna Rahma Zani - 1103181047
(a) (b)
Gambar 3.7 (a) Tampilan sebelum User klik Start Button
(b) Tampilan sesudah User klik Start Button
b.) Setelah CheckBox pada Request data bisa digunakan, user akan memilih salah satu
data yang dibutuhkan seperti, Suhu, Kelembaban, Tekanan, Indeks UV atau Semua data
yaitu ALL SENSOR. Untuk memulai request data, button Send Request harus di
klik.
Program pada button Send Request seperti program dibawah :
private void button5_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
if (checkBox1.Checked == true || checkBox2.Checked == true ||
checkBox3.Checked == true || checkBox4.Checked == true || checkBox5.Checked ==
true)
{
timer2.Enabled = !(timer2.Enabled);
if (timer2.Enabled == true)
{
button5.Text = "Stop Request";
toolStripStatusLabel1.Text = "Application was send request data";
}
else
{
button5.Text = "Send Request";
Novanna Rahma Zani - 1103181047
}
}
else
toolStripStatusLabel1.Text = "Check one of checkbox in request data!";
}
else
{
toolStripStatusLabel1.Text = "Start your application!";
}
}
Singkatnya, pada program diatas Button ini akan mengaktifkan Timer2. Diawali dengan
memeriksa apakah Aplikasi sudah terkoneksi dengan COMM Port, lalu dilanjutkan
dengan pengecekan apakah salah satu Check Button sudah dalam posisi Checked = True;
atau sudah dipilih. Jika ternyata user telah memilih salah satu check button maka
program melanjutkan ke pengaktifan Timer2 lalu merubah Button5.Text dari Send
Request menjadi Stop Request (Untuk Menonaktifkan Timer2). Ketika timer2 aktif,
stripstatus juga akan menampilkan notifikasi berupa text "Application was send request
data”; . Jika ternyata User sama sekali belum memilih checkbox tetapi klik button Send
Request, maka StripStatus akan menampilkan text "Check one of checkbox in request
data!".
(a) (b)
Gambar 3.8 (a) Status yang ditampilkan ketika User telah memilih salah satu comboBox
lalu klik Send Request (b) Status yang ditampilkan ketika User belum memilih
comboBox tetapi sudah klik Send Request
c.) Setelah Timer2 Aktif, perintah yang akan dijalankan Timer2 adalah sepeerti program
dibawah :
private void timer2_Tick(object sender, EventArgs e)
Novanna Rahma Zani - 1103181047
{
//Case 1
if (checkBox1.Checked == true)
{
if (checkBox5.Checked == false && checkBox2.Checked == false &&
checkBox3.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("T" + "\r\n");
toolStripStatusLabel1.Text = "Request Data : Suhu";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
//Case 2
else if (checkBox2.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox3.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("H" + "\r\n");
toolStripStatusLabel1.Text = "Request Data : Kelembaban";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
//Case 3
else if (checkBox3.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox2.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("P" + "\r\n");
toolStripStatusLabel1.Text = "Request Data : Tekanan";
}
Novanna Rahma Zani - 1103181047
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
//Case 4
else if (checkBox4.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox2.Checked == false && checkBox3.Checked == false)
{
serialPort1.Write("U"+ "\r\n");
toolStripStatusLabel1.Text = "Request Data : Indeks UV";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
//Case 5
else if (checkBox5.Checked == true)
{
if (checkBox1.Checked == false && checkBox2.Checked == false &&
checkBox3.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("A" + "\r\n");
toolStripStatusLabel1.Text = "Request All Data";
}
else
{
toolStripStatusLabel1.Text = "Just checked All Sensor to get all data,
unchecked another!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false; }
}}
Novanna Rahma Zani - 1103181047
d) Lalu setelah mikro berhasil mengenali perintah dan mulai mengirimkan data yang user
inginkan, aplikasi akan menerima data seperti program berikut :
private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
String receivedMsg = serialPort1.ReadLine();
Tampilkan(receivedMsg);
}
private delegate void TampilkanDelegate(object item);
private void Tampilkan(object item)
{
if (InvokeRequired)
listBox1.Invoke(new TampilkanDelegate(Tampilkan), item);
else
{
// This is the UI thread so perform the task.
listBox1.Items.Add(item);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
splitData(item);
}
}
Data serial yang diterima didefinisikan sebagai receivedMsg yang didelegate oleh
object tambahan yaitu Tampilkan. Kemudian Object tambahan tersebut diidentifikasi
sebagai private delegate void dan ditampilkan ke ListBox1. Selanjutnya item diparsing
pada splitData(item) untuk ditampilkan pada label setiap data.
Parsing data akan menyesuaikan request data yang dikirimkan user, yang berarti data
yang dipilih user bisa Suhu saja, Kelembaban saja atau bahkan Semua data sensor
sehingga pasring datanya berbeda. Pada program splitData(item) menjadi seperti :
private void splitData(object item)
{
if (timer1.Enabled == true && timer2.Enabled == true)
{
String[] data = item.ToString().Split(',');
//Case 1
if (checkBox1.Checked == true)
{
Novanna Rahma Zani - 1103181047
splitdata(item) pada //Case 5 untuk dipisahkan antar data. Dapat dilihat dari program
diatas, data [1] didefinisikan sebagai string temp ,data [2] untuk string hum, data
[3] untuk string press dan data [4] untuk string uv. Kemudian ditampilkan pada
labelnya masing-masing.
7) Aplikasi GUI Lab 8 saat memilih dua checkBox lalu Send Request
Terlihat bahwa data baru ditandai dengan adanya NewLine “\r\n” sehingga saat request
data, penulisan requestnya dibuat serialPort1.Write("T" + "\r\n");
serialport.readline
Instruksi serialport.ReadLine ini merupakan instruksi pembacaan data dari serial port
yang terhubung. Dengan instruksi tersebut, aplikasi akan membaca data yang dikirimkan
aplikasi yang terkoneksi. Pada percobaan ini serialport.ReadLine digunakan pada
serialPort1_DataReceived dimana serialPort1.ReadLine(); didefinisikan dalam
variabel receivedMsg.
serialport.writeline
Novanna Rahma Zani - 1103181047
Instruksi serialport.WriteLine ini merupakan instruksi penulisan data yang hasilnya akan
dituliskan langsung ke garis baru. Hasilnya berbeda dengan serialPort.Write tetapi sama
dengan serialPort.Write(“A” +”\r\n”).
Dengan instruksi,
serialPort1.Write (“A”);
serialPort1.Write (“B”); ABC
serialPort1.Write (“C”);
serialPort1.WriteLine(“A”); A
serialPort1.WriteLine(“B”); B
serialPort1.WriteLine(“C”); C
Program Lengkap
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace GUI_Lab6
{
Novanna Rahma Zani - 1103181047
}
else
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Int32.Parse(comboBox2.Text);
serialPort1.NewLine = "\r\n";
serialPort1.Open();
toolStripStatusLabel1.Text = serialPort1.PortName + " is connected.";
Novanna Rahma Zani - 1103181047
button1.Text = "Disconnect";
}
}
}
else if (checkBox2.Checked == true)
{
string hum = data[1];
label14.Text = hum + "%RH";
}
else if (checkBox3.Checked == true)
{
string pres = data[1];
label15.Text = pres + "mb";
}
else if (checkBox4.Checked == true)
{
string uv = data[1];
label16.Text = uv;
}
else if (checkBox5.Checked == true)
{
string temp = data[1];
label13.Text = temp + "°C";
string uv = data[4];
label16.Text = uv;
}
}
else
toolStripStatusLabel1.Text = "Start your application!";
}
}
}
else
{
toolStripStatusLabel1.Text = "Connect your serial port first!";
}
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
else if (checkBox2.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox3.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("H" + "\r\n");
toolStripStatusLabel1.Text = "Request Data : Kelembaban";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
else if (checkBox3.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox2.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("P" + "\r\n");
toolStripStatusLabel1.Text = "Request Data : Tekanan";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
else if (checkBox4.Checked == true)
{
if (checkBox5.Checked == false && checkBox1.Checked == false &&
checkBox2.Checked == false && checkBox3.Checked == false)
{
Novanna Rahma Zani - 1103181047
serialPort1.Write("U"+ "\r\n");
toolStripStatusLabel1.Text = "Request Data : Indeks UV";
}
else
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
else if (checkBox5.Checked == true)
{
if (checkBox1.Checked == false && checkBox2.Checked == false &&
checkBox3.Checked == false && checkBox4.Checked == false)
{
serialPort1.Write("A" + "\r\n");
toolStripStatusLabel1.Text = "Request All Data";
}
else
{
toolStripStatusLabel1.Text = "Just checked All Sensor to get all data,
unchecked another!";
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
checkBox4.Checked = false;
checkBox5.Checked = false;
}
}
}
}
}