Anda di halaman 1dari 28

LAPORAN WORKSHOP SISTEM ANTARMUKA

Novanna Rahma Zani – 1103181047


PRAKTIKUM 8
Judul : Lab8 – Command-based acquisition
Tanggal : 20 Mei 2020

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.1 Sebuah peralatan dengan 4 macam sensor


Cara tersebut juga efektif apabila beberapa peralatan terhubung pada jaringan yang sama,
seperti pada Gambar 2. Peralatan tersebut pasif, hingga anda memberikan perintah untuk
mengambil data. Perintah yang anda berikan harus spesifik, untuk peralatan yang mana dan data
apa.

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:

Dimana Command berisi sebuah karakter, dengan penjelasan sebagai berikut:


• T – untuk mengakses data suhu
• H – untuk mengakses data kelembaban udara
• P – untuk mengakses data tekanan udara
• U – untuk mengakses data UV index
• A – untuk mengakses semua data sensor
sedangkan CR dan LF adalah karakter penutup request. CR kepanjangan dari Carriage Return
yang mempunyai nilai 13 desimal. LF merupakan kepanjangan dari Line Feed yang mempunyai
nilai 10 desimal. Bila format request yang anda kirimkan benar (misalnya anda meminta data
suhu) maka mikrokontroler akan mengirimkan data dengan format sebagai berikut:

Dimana T adalah nilai dari suhu.


Untuk mengaktifkan simulator mikrokontroler pada mode request, pilih opsi “By request”
sebelum digunakan, seperti pada Gambar 3.

Gambar 1.3 Pengaturan simulator dengan mode “by request”


PERALATAN
1. Satu unit komputer dengan Visual Studio 2012 dan aplikasi com0com
2. Aplikasi simulator sebagai pengganti mikrokontroler
Novanna Rahma Zani - 1103181047

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.

Gambar 3.1 Desain Tampilan Tugas Lab 8


Komponen didapatkan dari toolbox, aplikasi ini membutuhkan Serial Port, 2 timer, dan
StatusStrip. Terdapat pula Button untuk Connect, Start, Send Request, Reset dan Close.
2 Combo Box untuk COMM Port dan Baudrate. List Box untuk menampilkan paket data
dan sesuai percobaan Lab 8 kita membutuhkan 5 CheckBox untuk mengirimkan request.
Novanna Rahma Zani - 1103181047

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.

2. Setelah tampilannya selesai, saatnya menambahkan program pada aplikasi. Pada


tombol Connect diberikan program sebagai berikut :
private void button1_Click(object sender, EventArgs e)
{
button1.Text = "Connect";
if (serialPort1.IsOpen == true)
{
serialPort1.Close();
toolStripStatusLabel1.Text = serialPort1.PortName + " is closed.";
button1.Text = "Connect";
}
else
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Int32.Parse(comboBox2.Text);
serialPort1.NewLine = "\r\n";
serialPort1.Open();
toolStripStatusLabel1.Text = serialPort1.PortName + " is connected.";
button1.Text = "Disconnect";
}
}

(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.

5. Pada tombol reset, ditambahkan program sebagai berikut :


private void button4_Click(object sender, EventArgs e)
{
label13.ResetText();
label14.ResetText();
Novanna Rahma Zani - 1103181047

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

6. Pada tombol Close diberikan program sebagai berikut :


private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult confirm = MessageBox.Show("Are you sure to close the app?",
"Close Application", MessageBoxButtons.YesNo);
Novanna Rahma Zani - 1103181047

if (confirm == DialogResult.No) e.Cancel = true;


}
Tombol ini memberikan perintah menutup form1 dengan program this.Close(); lalu
dilanjutkan dengan MessageBox berupa konfirmasi apakah user benar benar ingin keluar
dari aplikasi. Hal ini dilakukan untuk menghindari aplikasi yang langsung tertutup secara
tidak sengaja.

Gambar 3.6 Tampilan saat user klik Close 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

Start akan mengaktifkan Timer1. Kondisi awal checkBox.Enabled = false. Sesuai


program diatas, ketika Timer1 aktif maka checkBox.Enabled = true yang berarti user
bisa menggunakan Checkbox tersebut. Dan ketika timer1 aktif, akan ada pemberitahuan
di strip status yaitu "Set your request data!";.

(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

Dapat dilihat pada program, terdapat 5 Case yaitu saat :


 checkBox1 Checked = User memilih request data Suhu
 checkBox2 Checked = User memilih request data Kelembaban
 checkBox3 Checked = User memilih request data Tekanan
 checkBox4 Checked = User memilih request data Indeks UV
 checkBox5 Checked = User memilih request semua data sensor
Kelimanya melewati proses yang sama yaitu :
1) Memeriksa apakah checkbox yang lain kondisinya checkBox.Checked=false;
Di kondisi ini, program memeriksa apakah User benar benar hanya memilih satu
checkbox.
2) Jika ternyata User memilih lebih dari satu checkBox maka program akan melanjutkan
program ke,
{
toolStripStatusLabel1.Text = "You just can checked one checkbox!";
checkBox1.Checked = false;.... //checkBox 1 sampai 5 di false kan.
checkBox5.Checked = false;
}
3) Jika ternyata benar User hanya memilih salah satu checkBox maka program yang
dijalankan adalah,
{
serialPort1.Write("T" + "\r\n"); //Mengirimkan Perintah ke simulator
mikro
toolStripStatusLabel1.Text = "Request Data : Suhu";
//memberi notifikasi bahwa data yang direquest adalah Suhu
}
Pada percobaan sebelumnya, program yang dirancang menerima seluruh data yang
dikirimkan oleh simulator mikro. Seperti yang kita ketahui bahwa paket data simulator
mempunyai struktur seperti pada Gambar 3.9

Gambar 3.9 Struktur data mikro


Dengan T yang merupakan data Suhu, H sebagai data kelembaban, P sebagai data
Tekanan dan U yang merupakan data Indeks UV.
Maka seperti program Timer2_Tick, serialPort1.Write atau perintah yang dikirimkan ke
Mikrokontroller bisa ditulis dengan :
serialPort1.Write("T" + "\r\n");  Untuk mendapatkan data Suhu
Novanna Rahma Zani - 1103181047

serialPort1.Write("H" + "\r\n");  Untuk mendapatkan data Kelembaban


serialPort1.Write("P" + "\r\n");  Untuk mendapatkan data Tekanan
serialPort1.Write("U" + "\r\n");  Untuk mendapatkan data Indeks UV
serialPort1.Write("A" + "\r\n");  Untuk mendapatkan semua data

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

string temp = data[1];


label13.Text = temp + "°C";
}
//Case 2
else if (checkBox2.Checked == true)
{
string hum = data[1];
label14.Text = hum + "%RH";
}
//Case 3
else if (checkBox3.Checked == true)
{
string pres = data[1];
label15.Text = pres + "mb";
}
//Case 4
else if (checkBox4.Checked == true)
{
string uv = data[1];
label16.Text = uv;
}
//Case 5
else if (checkBox5.Checked == true)
{
string temp = data[1];
label13.Text = temp + "°C";
string hum = data[2];
label14.Text = hum + "%RH";
string pres = data[3];
label15.Text = pres + "mb";
string uv = data[4];
label16.Text = uv;
}
}
else
toolStripStatusLabel1.Text = "Start your application!";
}
Parsing data pada program dibuat dalam 5 Case, program ini akan
menyesuaikan checkBox mana yang user pilih. Ketika yang dipilih adalah satu data
misalnya seperti Suhu, maka data[1] nya adalah nilai dari variabel suhu atau pada
program disebut temp. Setelah variabelnya dikenali dan memiliki nilai, ditampilkan
pada label yang sesuai.
Ketika yang dipilih adalah menampilkan Semua data sensor. Data yang
diterima merupakan paket data yang terdiri dari 4 items. Data ini akan diarahkan ke
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.

Hasil Simulasi GUI


1) Start debugging GUI Lab 8

2) Koneksikan dengan serial port lalu klik Connect Button


Novanna Rahma Zani - 1103181047

3) Klik Start Button


Novanna Rahma Zani - 1103181047

4) Membuka aplikasi Simulator Microcontroller  menyambungkan dengan port serial


yang sesuai dengan aplikasi GUI Lab 8  Radio Button diposisi By Request  Klik
Start Streaming

5) Aplikasi GUI Lab 8 memilih satu checkBox lalu Send Request

6) Aplikasi GUI Lab 8 saat mengirim perintah Stop Request


Novanna Rahma Zani - 1103181047

7) Aplikasi GUI Lab 8 saat memilih dua checkBox lalu Send Request

8) Aplikasi GUI Lab 8 saat menerima semua data

9) Aplikasi GUI Lab 8 saat Stop aplikasi  Close


Novanna Rahma Zani - 1103181047

Penjelasan program mengenai,


 serialport.newline
Instruksi serialport.NewLine ini menangani bagaimana objek SerialPort menafsirkan
data yang masuk. Dengan menetapkan serialport.newline program akan mengerti jika
ada data baru yang masuk. Pada percobaan Lab 8 ini terdapat program seperti :
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Int32.Parse(comboBox2.Text);
serialPort1.NewLine = "\r\n";
serialPort1.Open();

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

serialPort1.Write (“A” +”\r\n”) A


serialPort1.Write (“B” +”\r\n”)  B
serialPort1.Write (“C” +”\r\n”) 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

public partial class Form1 : Form


{
public Form1()
{
InitializeComponent();
//baudrate
comboBox2.Items.Add("9600");
comboBox2.Items.Add("14400");
comboBox2.Items.Add("19200");
comboBox2.Items.Add("38400");
comboBox2.Items.Add("56000");
comboBox2.Items.Add("57600");
comboBox2.Items.Add("76800");
comboBox2.Items.Add("115200");

private void label5_Click(object sender, EventArgs e)


{

private void Form1_Load(object sender, EventArgs e)


{
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();
}

private void button1_Click(object sender, EventArgs e)


{
button1.Text = "Connect";
if (serialPort1.IsOpen == true)
{
serialPort1.Close();
toolStripStatusLabel1.Text = serialPort1.PortName + " is closed.";
button1.Text = "Connect";

}
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";
}
}

private void button2_Click(object sender, EventArgs e)


{
this.Close();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)


{
DialogResult confirm = MessageBox.Show("Are you sure to close the app?",
"Close Application", MessageBoxButtons.YesNo);
if (confirm == DialogResult.No) e.Cancel = true;
}

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);
}
}

private void splitData(object item)


{
if (timer1.Enabled == true && timer2.Enabled == true)
{
String[] data = item.ToString().Split(',');
if (checkBox1.Checked == true)
{
string temp = data[1];
label13.Text = temp + "°C";
Novanna Rahma Zani - 1103181047

}
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 hum = data[2];


label14.Text = hum + "%RH";

string pres = data[3];


label15.Text = pres + "mb";

string uv = data[4];
label16.Text = uv;
}

}
else
toolStripStatusLabel1.Text = "Start your application!";
}

private void button3_Click(object sender, EventArgs e)


{
if (serialPort1.IsOpen == true)
{
timer1.Enabled = !(timer1.Enabled);
if (timer1.Enabled == true)
{
button3.Text = "Stop";
}
else
{
button3.Text = "Start";
Novanna Rahma Zani - 1103181047

}
}
else
{
toolStripStatusLabel1.Text = "Connect your serial port first!";
}

private void chartControl1_Click(object sender, EventArgs e)


{

private void button4_Click(object sender, EventArgs e)


{
label13.ResetText();
label14.ResetText();
label15.ResetText();
label16.ResetText();
button4.Text = "Set";
}
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!";

private void chart3_Click(object sender, EventArgs e)


{

private void groupBox2_Enter(object sender, EventArgs e)


{

private void button5_Click(object sender, EventArgs e)


{
if (serialPort1.IsOpen == true)
{
Novanna Rahma Zani - 1103181047

if (checkBox1.Checked == true || checkBox2.Checked == true ||


checkBox3.Checked == true || checkBox4.Checked == true || checkBox5.Checked ==
true)
{
timer1.Enabled = !(timer2.Enabled);
timer2.Enabled = !(timer2.Enabled);
if (timer1.Enabled == true && timer2.Enabled == true)
{
button5.Text = "Stop Request";
toolStripStatusLabel1.Text = "Application was send request data";
}
else
{
button5.Text = "Send Request";
}
}
else
toolStripStatusLabel1.Text = "Check one of checkbox in request data!";
}
else
{
toolStripStatusLabel1.Text = "Start your application!";
}
}

private void checkBox5_CheckedChanged(object sender, EventArgs e)


{

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)


{

private void timer2_Tick(object sender, EventArgs e)


{
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!";
Novanna Rahma Zani - 1103181047

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;
}
}
}

}
}

Anda mungkin juga menyukai