Minggu, 31 Mei 2015

Serial Receiver

^^^Holla!^^^

Pada kesempatan kali ini,saya akan menunjukkan sebuah program Serial Receiver,tentu saja dengan port sbg jalur nya,tapi sebelum itu apa itu PORT?


1.Port









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. 

2.Program Data Receiver

Kali ini kita akan membuat sebuah program yang berfungsi 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)

Yang dibutuhkan:
  1. Potensiometer
  2. Arduino
  3. Aplikasi Arduino
  4. Visual Studio / C# Develop

Potesiometer

Arduino

kodingan di aplkasi Arduino

void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A1);
delay(500);
Serial.println(sensorValue, DEC);
}

1.Buat solution baru pada. Susun form dengan item item seperti terlihat pada gambar.

2.Atur properties “Series” pada chart, sehingga muncul window baru seperti dibawah ini.
 kita 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:

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

5. 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 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:

int a; //variable global
private void DisplayText(object sender, EventArgs e){
richTextBox1.AppendText(rxString);
richTextBox1.ScrollToCaret();
chart1.Series["Series1"].Points.AddXY(a,Convert.ToInt16(rxString));
a++;
}

7.Compile dan jalankan...

dan seperti ini kodingan keseluruhan nya

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 Nuel
{
    public partial class Form1 : Form
    {
        int a;
        string rxString;


        private void DisplayText(object sender, EventArgs e)
        {
            richTextBox1.AppendText(rxString);
            richTextBox1.ScrollToCaret();
            chart1.Series["Series1"].Points.AddXY(a, Convert.ToInt16(rxString));
            a++;
        } 
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Connect")
            {
                button1.Text = "Disconnect";
                serialPort1.Open();
                richTextBox1.Text = "";
                a = 0;
            }
            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));
        }

    }
}

Ntar kalo jalan nya kayak gini:


Compact!!

Tidak ada komentar:

Posting Komentar