Minggu, 10 Mei 2015

KOMUNIKASI SERIAL PORT

Asalammualaikum Wr.Wb

Selamat datang sahabat mardianto427@blogsport.com
Pada kesempatan kali ini saya akan menjelaskan cara komunikasi serial menggunakan C sharp (C#)

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.


Tujuan mempelajari komunikasi serial port 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:

 
Contoh program di arduino : 


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}


Cara membuat : 

Buat solution baru. Susun form dengan control-control seperti
terlihat pada gambar.






Komponen Timer ada di Windows Form toolbar. Sedangkan
komponen SerialPort ada di Components toolbar. Jangan lupa, set
properties Enabled di komponen Timer menjadi true. Kemudian
properties Interval di-set menjadi 500 ms. 


Set ukuran panel menjadi 500x180.Buat objGraphic di panel1  
Tambahkan program berikut untuk control button1:

if (button1.Text== "Connect") {
button1.Text= "Disconnect";
serialPort1.Open();
}
else {
button1.Text= "Connect";
serialPort1.Close();
}


Tambahkan program berikut ke event DataReceived-nya serial:

rxString=serialPort1.ReadLine();
this.Invoke(new EventHandler(DisplayText));


Kita menggunakan method Invoke karena thread untuk receive
serial berbeda dengan thread program utama. Padahal object
TextBox 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. 

Untuk method DisplayText, tambahkan program berikut:
 
private void DisplayText(object sender, EventArgs e){textBox1.Text += rxString;float tinggi= float.Parse(rxString;tinggi = 179-(tinggi/1023*179);// geser arraynyafor (int i=0;i<99;i++) {
lokasiY[i] =lokasiY[i+1];
}
lokasiY[99] = (int)tinggi;
}



rxString maupun lokasiY adalah variabel global. lokasiY adalah
array berukuran 100 yang berisi 100 kondisi tegangan terakhir.
Sehingga setiap kali program membaca kondisi tegangan terakhir,
maka array akan bergeser ke kiri, kondisi paling lama akan
dibuang.Untuk menampilkan grafik, kita menggunakan cara yang sama
seperti praktikum grafik. Program akan menggambar tiap
TimerTick, dalam hal ini kita sudah set interval-nya menjadi tiap
500 ms. Tambahkan program berikut di TimerTick:


void Timer1Tick(object sender, EventArgs e)
{
Pen pena = new Pen(Color.Black);
int awalX = 0;
int titikMulaiX, titikMulaiY, titikAkhirX, titikAkhirY;
// hapus dulu semuanya
objGraphic.Clear(Color.White);
for(int i=0;i<99;i++) {
titikMulaiX = awalX + i*5;
titikMulaiY = lokasiY[i];
titikAkhirX = awalX + (i+1)*5;
titikAkhirY = lokasiY[i+1];
objGraphic.DrawLine(pena, titikMulaiX,titikMulaiY,ti
tikAkhirX,titikAkhirY);
}
}



 Compile dan jalankan program.


 Contoh program yang sudah saya jalankan dan yang sudah jadi menggunakan arduino menggunakan objek potensio yang grafiknya muncul secara acak....

















Contoh codingannya ....

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 arduino
{
    public partial class Form1 : Form
    {
        public Graphics objGraphic;
        public int[] lokasiY = new int[100];
        public string rxString;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            objGraphic = panel1.CreateGraphics();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Connect")
            {
                button1.Text = "Disconnect";
                serialPort1.Open();
            }
            else
            {
                button1.Text = "Connect";
                serialPort1.Close();
            }
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            rxString = serialPort1.ReadLine();
            this.Invoke(new EventHandler(DisplayText));
        }
        private void DisplayText(object sender, EventArgs e)
        {
            textBox1.Text += rxString;
            float tinggi = float.Parse(rxString);
            tinggi = 179 - (tinggi / 1023 * 179);
            // geser arraynya
            for (int i = 0; i < 99; i++)
            {
                lokasiY[i] = lokasiY[i + 1];
            }
            lokasiY[99] = (int)tinggi;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Pen pena = new Pen(Color.Black);
            int awalX = 0;
            int titikMulaiX, titikMulaiY, titikAkhirX, titikAkhirY;
            // hapus dulu semuanya
            objGraphic.Clear(Color.White);
            for (int i = 0; i < 99; i++)
            {
                titikMulaiX = awalX + i * 5;
                titikMulaiY = lokasiY[i];
                titikAkhirX = awalX + (i + 1) * 5;
                titikAkhirY = lokasiY[i + 1];
                objGraphic.DrawLine(pena, titikMulaiX, titikMulaiY, titikAkhirX, titikAkhirY);
            }
        }
    }
}


Disini saya menggunakan arduino untuk menjalankan program yang saya gunakan.
Semoga menginspirasi anda para sahabat mardianto427@gmail.com

Asalammualaikum Wr.Wb













Tidak ada komentar:

Posting Komentar