Minggu, 31 Mei 2015

PRAKTIKUM VIII – Serial Receive

I. Tujuan
  • Mahasiswa mempelajari Serial Port di C#
  • Mengetahui kegunaan Serial Port di SharpDevelop
  • Dapat mengunakan Serial Port dalam aplikasi windows sederhana untuk akuisisi data
II. Dasar Teori

Port merupakan kumpulan jalur elektronik untuk menyalurkan data. Port ada yang untuk input saja, output saja atau input/output. Port dipakai untuk komunikasi antara CPU dengan monitor, keyboard, mouse dll. Proses pengiriman data dapat langsung sekaligus secara paralel dengan menggunakan beberapa kabel, atau satu-persatu secara berurutan (serial) dengan menggunakan sepasang kabel. Contoh transmisi data secara paralel adalah komunikasi harddisk IDE dengan CPU, komunikasi printer dengan komputer. Contoh transmisi data secara serial adalah komunikasi harddisk SATA dengan CPU, komunikasi USB dll.
Mikrokontroller umumnya menggunakan standar komunikasi serial RS232 untuk koneksi dengan perangkat lain. Komputer juga memiliki port standar serialport, paralelport, USB, VGA dan PS/2. Pada praktikum ini kita akan mempelajari penggunaan serial port.

III. Praktikum

1. Tujuan praktikum ini adalah untuk menerima data dari mikrokontroller melalui port serial. Data yang dikirim oleh mikrokontroller adalah kondisi dari potensiometer. Nilai analog tegangan akan dikonversi oleh mikro ke nilai digital dalam range 0 - 1023. Kemudian nilai digital ini yang dikirim ke komputer melalui port serial. Program pada mikro (kita akan menggunakan arduino) cukup sederhana:
2. Buat solution baru. Susun form dengan control-control seperti terlihat pada gambar.
Atur properties “Series” pada chart, sehingga muncul window baru seperti dibawah ini.
Anda bisa mengubah jenis grafik dengan mengubah ChartType nya.
3. Komponen SerialPort ada di Components toolbar, sedangkan komponen Chart ada di data.
4. Tambahkan program berikut untuk control button1:
5. Tambahkan program berikut ke event DataReceived-nya serial:
Kita menggunakan method Invoke karena thread untuk receive serial berbeda dengan thread program utama. Padahal object RichTextBox atau Label, tempat kita untuk menampilkan data serial, terletak di thread utama. Invoke membuat kita dapat melakukan cross-thread.
Program di atas akan membuat event DataReceived memanggil event handler baru yang terletak di thread utama, yaitu DisplayText.
6. Untuk method DisplayText, tambahkan program berikut:
7. Compile dan jalankan program.
Sekian tentang Serial port dari saya, kurang lebihnya mohon maaf, Assalamu'alaikum WR.WB.

Control LED with Serial Port Communication

Control LED with Serial Port Communication


Pada kesempatan kali ini saya ingin berbagi cara koneksi antar serial port, namun tanpa menggunakan hardware(antar aplikasi, dengan menggunakan aplikasi tambahan “Virtual Port”). Dalam kasus ini kita dapat mengirim dan menerima data sederhana(berupa text) antar serial port yang kemudian kita beri fungsi untuk mengontrol beberapa lampu LED, kita cukup menggunakan method Write dengan parameter berupa string yang akan dikirim dan diterima dalam bentuk string juga.
Hal pertama yang harus dilakukan yaitu:
1. Virtual Serial Port
2. Hterm
 install virtual serial port dan kemudian buatlah penghubung antar com (seperti pada gambar)
  • Kemudian kita dapat langsung membuat aplikasi untuk control led.
  • Buka ms. visual studio 2010, dan buatlah project baru.
  • Desain windows form sesuai keinginan masing masing atau dapat mengikuti desain yang saya buat.
  • Jangan lupa menambahkan Timer dan Serial Port yang terdapat pada toolbox.
 

  • etelah desain yang dibuat dirasa cukup, maka kita langsung masuk ke codingan nya.
  • Dibawah ini adalah version code dari aplikasi yang telah saya buat.
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;
using System.IO.Ports;
using System.IO;
namespace komunikasi_serial
{
public partial class Form1 : Form
{
// Pengenalan variable gambar
Image white = Properties.Resources.redcircle;
Image black = Properties.Resources.whitecircle;
public Form1()
{
InitializeComponent();
//Port yang aktif pada komputer
foreach (String Port in System.IO.Ports.SerialPort.GetPortNames())
{
cbports.Items.Add(Port);
}
//tulisan awal textbox
textBox1.Text = “Receive Here…”;
//Posisi gambar awal
L1.Image = L2.Image = L3.Image = L4.Image = L5.Image = black;
//mengaktifkan timer
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
//mengecek apakah port serial telah terbuka
if (serialPort1.IsOpen)
{
// mengirim data
if (serialPort1.BytesToRead != 0)
{
if (textBox1.Text == “Receive Here…”)
{
textBox1.Text = “\n”;
}
else
{
string masuk = serialPort1.ReadExisting();
textBox1.AppendText(masuk + “\n”);
//kode untuk kontrol lampu
if (masuk.ToUpper() == “L1 ON” || masuk.ToUpper() == “L1ON”)
{
L1.Image = white;
}
if (masuk.ToUpper() == “L2 ON” || masuk.ToUpper() == ” L2ON”)
{
L2.Image = white;
}
if (masuk.ToUpper() == “L3 ON” || masuk.ToUpper() == “L3ON”)
{
L3.Image = white;
}
if (masuk.ToUpper() == “L4 ON” || masuk.ToUpper() == “L4ON”)
{
L4.Image = white;
}
if (masuk.ToUpper() == “L5 ON” || masuk.ToUpper() == “L5ON”)
{
L5.Image = white;
}
// komen lampu mati
if (masuk.ToUpper() == “L1 OFF” || masuk.ToUpper() == “L1OFF”)
{
L1.Image = black;
}
if (masuk.ToUpper() == “L2 OFF” || masuk.ToUpper() == “L2OFF”)
{
L2.Image = black;
}
if (masuk.ToUpper() == “L3 OFF” || masuk.ToUpper() == “L3OFF”)
{
L3.Image = black;
}
if (masuk.ToUpper() == “L4 OFF” || masuk.ToUpper() == “L4OFF”)
{
L4.Image = black;
}
if (masuk.ToUpper() == “L5 OFF” || masuk.ToUpper() == “L5OFF”)
{
L5.Image = black;
}
}
}
}
else
{
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
//langsung mengklik pada lampu
try
{
PictureBox select = (PictureBox)sender;
if (select.Image == black)
{
serialPort1.Write(select.Name + ” on “);
select.Image = white;
}
else
{
serialPort1.Write(select.Name + ” off “);
select.Image = black;
}
}
catch (Exception)
{
MessageBox.Show(“Komunikasi belum terhubung”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btconnect_Click(object sender, EventArgs e)
{
//menghubungkan ke port serial yang aktif
try
{
serialPort1.PortName = cbports.Text;
if (!serialPort1.IsOpen)
{
btconnect.BackColor = Color.Lime;
btconnect.Enabled = false;
btdisc.BackColor = Color.Red;
btdisc.Enabled = true;
serialPort1.Open();
}
else
{
}
}
catch (Exception)
{
MessageBox.Show(“Pilih Com Port terlebih dahulu”, “Warning”,MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btdisc_Click(object sender, EventArgs e)
{
//memutuskan port serial yang aktif
if (serialPort1.IsOpen)
{
btdisc.BackColor = Color.Lime;
btdisc.Enabled = false;
btconnect.BackColor = Color.Red;
btconnect.Enabled = true;
serialPort1.Close();
}
else
{
}
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
//mengirim data
if (e.KeyData == Keys.Enter)
{
if (serialPort1.IsOpen)
{
serialPort1.Write(textBox2.Text);
textBox2.Text = “”;
}
else { }
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//tombol send
serialPort1.Write(textBox2.Text);
textBox2.Text = “”;
}
catch (Exception)
{
MessageBox.Show(“Pilih Com Port terlebih dahulu”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
//warning untuk mengubah size form
MessageBox.Show(“Size tidak dapat diubah”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
  • Setelah program selesai di ketik, coba running programnya.
  • Buka htem dan kemudian pilih com yang telah di pair tadi lalu klik tombol connect.

Testing aplikasi