Sensor Garis Menggunakan Webcam

Berikut project yang akan menggunakan library image processing AForge.NET dengan bahasa pemrograman C# dan menggunakan software Visual C# Express 2010. Berikut tampilan GUI-nya.

Project ini bermaksud sebagai sensor pendeteksi garis pada robot pengikut garis (line follower robot) sebagai pengganti sensor proximity photodioda.

Berikut kodenya.

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 AForge;
using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Imaging;
using AForge.Imaging.Filters;

namespace line_tracker2
{
    public partial class Form1 : Form
    {
        //reference sudah ditambahkan
        private FilterInfoCollection VideoCaptureDevices;//mengumpulkan setiap perangkat video yg terdeteksi
        private VideoCaptureDevice FinalVideoSource;//menampung perangkat video yang akan digunakan
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //pertama add reference semua Aforge.video.dll dan Aforge.video.directshow.dll
            VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            //sekarang perangkat video sudah tersimpan pada array di atas
            foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
            {
                comboBox1.Items.Add(VideoCaptureDevice.Name);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //tambahkan kode berikut untuk menentukan perangkat sumber dari video
            FinalVideoSource = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
            FinalVideoSource.NewFrame += new NewFrameEventHandler(FinalVideoSource_NewFrame);
            FinalVideoSource.Start();
        }
        private Rectangle objectRect;
        int x1, y1,x1_bawah, y1_bawah;
        void FinalVideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            //sekarang kita tambahkan kode berikut untuk menampilkan new frame event (frame dari webcam) untuk menampilkan gambar pada picturebox
            Bitmap image = (Bitmap)eventArgs.Frame.Clone();//bitmap boxing
            Bitmap image_unfilter = (Bitmap)eventArgs.Frame.Clone();
            Bitmap image_bawah = (Bitmap)eventArgs.Frame.Clone();//bitmap boxing
            Bitmap image_unfilter_bawah = (Bitmap)eventArgs.Frame.Clone();

            Crop filter = new Crop(new Rectangle(0, 0, image.Width, (image.Height/8)));
            // apply the filter
            image = filter.Apply(image);
            image_unfilter = filter.Apply(image_unfilter);

            Crop filter_bawah = new Crop(new Rectangle(0, 320, image_bawah.Width, (image_bawah.Height / 8)));
            // apply the filter
            image_bawah = filter_bawah.Apply(image_bawah);
            image_unfilter_bawah = filter_bawah.Apply(image_unfilter_bawah);

            // create filter
            ColorFiltering filtercr = new ColorFiltering();
            // set color ranges to keep
            filtercr.Red = new IntRange(200, 255);
            filtercr.Green = new IntRange(200, 255);
            filtercr.Blue = new IntRange(200, 255);
            filtercr.FillOutsideRange = true;
            // apply the filter
            filtercr.ApplyInPlace(image);
            filtercr.ApplyInPlace(image_bawah);

            // create blob counter and configure it
            BlobCounter blobCounter = new BlobCounter();
            blobCounter.MinWidth = 20;                    // set minimum size of
            blobCounter.MinHeight = 20;                   // objects we look for
            blobCounter.FilterBlobs = true;               // filter blobs by size
            blobCounter.ObjectsOrder = ObjectsOrder.Size; // order found object by size
            // locate blobs
            blobCounter.ProcessImage(image);
            Rectangle[] rects = blobCounter.GetObjectsRectangles();
            // draw rectangle around the biggest blob
            if (rects.Length > 0)
            {
                objectRect = rects[0];
                Graphics g = Graphics.FromImage(image_unfilter);

                using (Pen pen = new Pen(Color.YellowGreen, 3))
                {
                    g.DrawRectangle(pen, objectRect);
                }

                g.Dispose();
                // calculate X,Y coordinates of object's center
                x1 = (objectRect.Left + objectRect.Right - image.Width) / 2;
                y1 = (image.Height - (objectRect.Top + objectRect.Bottom)) / 2;
            }

            blobCounter.ProcessImage(image_bawah);
            Rectangle[] rects_bawah = blobCounter.GetObjectsRectangles();
            // draw rectangle around the biggest blob
            if (rects_bawah.Length > 0)
            {
                objectRect = rects_bawah[0];
                Graphics g = Graphics.FromImage(image_unfilter_bawah);

                using (Pen pen = new Pen(Color.YellowGreen, 3))
                {
                    g.DrawRectangle(pen, objectRect);
                }

                g.Dispose();
                // calculate X,Y coordinates of object's center
                x1_bawah = (objectRect.Left + objectRect.Right - image_bawah.Width) / 2;
                y1_bawah = (image_bawah.Height - (objectRect.Top + objectRect.Bottom)) / 2;
            }

            pictureBox1.Image = image_unfilter;
            pictureBox2.Image = image_unfilter_bawah;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            //kita tambahkan kode untuk membuat webcam berhenti bekerja
            //kapanpun form telah ditutup maka webcam akan berhenti bekerja secara automatis
            if (FinalVideoSource.IsRunning)
            {
                FinalVideoSource.Stop();
            }
            //selesai
            //sekarang kita jalankan
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = String.Format("koordinat_atas: x={0}y={1} koordinat_bawah: x={2}y={3} delta_x = {4}", x1, y1, x1_bawah, y1_bawah,(x1-x1_bawah));
        }
    }
}

Berikut link file download dari project di atas. file

Mengukur Koordinat Menggunakan Mouse Komputer

Berikut link download project file VS C# di atas . http://www.mediafire.com/file/5lt774t9sjh7550/mouse.rar

Untuk mengukur koordinat tempat sebuah mobile robot berada, biasanya menggunakan rotary encoder untuk menghitung putaran roda yang kemudian diolah menjadi koordinat perpindahan robot dari titik asalnya. Beberapa solusi lainnya bisa menggunakan mouse komputer sebagai pengganti sebuah rotary encoder. Berikut kode aplikasi yg saya buat menggunakan Visual C# 2010 Express.

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.Runtime.InteropServices;

namespace mouse
{
    public partial class Form1 : Form
    {
        public const UInt32 SPI_SETMOUSESPEED = 0x0071;

        [DllImport("User32.dll")]
        static extern Boolean SystemParametersInfo(
            UInt32 uiAction,
            UInt32 uiParam,
            UInt32 pvParam,
            UInt32 fWinIni);
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            SystemParametersInfo(SPI_SETMOUSESPEED, 0, 1, 0);

            this.Cursor = new Cursor(Cursor.Current.Handle);
            Cursor.Position = new Point(632, 358);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            SystemParametersInfo(SPI_SETMOUSESPEED, 0, 20, 0);
        }
        int x, y,count_x,count_y;
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            this.Cursor = new Cursor(Cursor.Current.Handle);
            x = Cursor.Position.X;
            y = Cursor.Position.Y;

            if (x > 732)
            {
                Cursor.Position = new Point(532, y);
                count_x++;
            }
            if (x < 532)
            {
                Cursor.Position = new Point(732, y);
                count_x--;
            }
            if (y > 458)
            {
                Cursor.Position = new Point(x, 258);
                count_y++;
            }
            if (y < 258)
            {
                Cursor.Position = new Point(x, 458);
                count_y--;
            }

            label1.Text = Convert.ToString(x);
            label2.Text = Convert.ToString(y);
            label3.Text = Convert.ToString(count_x);
            label4.Text = Convert.ToString(count_y);
        }
    }
}

Aplikasi Serialport Berbasis Console Application Visual C# 2010 Express

Pertama-tama buatlah sebuah project baru.

Lalu pada bagian Program.cs masukan kode berikut.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;

namespace SerialTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = SerialPort.GetPortNames();
            Console.WriteLine("Serial ports:");
            foreach (string name in names)
                Console.WriteLine(name);
            Console.Write("Choose one:");
            SerialPort p = new SerialPort(Console.ReadLine());
            p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
            p.Open();
            string line;
            do
            {
                line = Console.ReadLine();
                p.Write(line);
            } while (line != "quit");
            p.Close();
        }

        static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine(
                (sender as SerialPort).ReadExisting());
        }
    }
}

Setelah itu, jangan lupa save program yang sudah dibuat. Run program (F5). Program bisa dicoba berkomunikasi dengan Hyperterminal atau aplikasi serial port lainnya dengan bantuan VSPE (Virtual Serial Port Emulator) yang bisa di download di http://www.eterlogic.com/downloads/SetupVSPE.zip

Pada program yang sudah dibuat tadi, setelah dijalankan, untuk memilih COM, langsung saja diketik nama COM nya. Misal COM5. Untuk mengirim data, tekan enter. Untuk keluar dari program, ketik “quit” lalu tekan enter.

VSPE (Virtual Serial Port Emulator).

Tampilan program.

___________________________

Daftar Pustaka

http://balau82.wordpress.com/2009/04/18/simplest-serial-port-terminal-in-csharp/

Spy and Anti-Terror Robot Project

_____________________________________________________________________________________

System

_____________________________________________________________________________________

Software di PC operator 

Dibangun menggunakan Visual C# Express 2010

________________________________________________________________________________

Project Author:

Wangready and Edy Cahyono

Error Install VisualStudio2010 / Framework.NET 4

Saya sempat mencoba untuk menginstall VS2010 Express di Windows 7, tp gagal terus. Dicari di forum2 ada yang saranin buat install terlebih dahulu Framework.NET 4. Akan tetapi, saya coba, keluar error message HRESULT:0xc8000222. Berikut solusinya yang saya dapatkan dari googling2.

sebelum instalasi lakukan pengaturan seperti dibawah ini:

  1. Masuk ke command prompt sebagai admin, klik start (tombol wondows)>> All Programs >> Accessories >> Klik kanan Command Prompt pilih Run As Administrator. Maka akan keluar jendela Command Prompt.
  2. Di dalam Command Prompt ketikkan “net stop WuAuServ” (tanpa tanda petik)
  3. Biarkan Command Prompt tersebut lalu tahan windows + R lagi dan ketikkan “%windir%” (tanda petik)
  4. Dalam folder tersebut rename folder “SoftwareDistribution” menjadi SDold (sebagai penanda saja)
  5. Kembali ke Command Prompt lagi , ketikan “net start WuAuServ” lalu jalankan instalasi .net framework

Nah, setelah pengaturan diatas selesai lakukanlah instalasi Framework.NET 4 dengan cara seperti biasa.

______________________________________

Sumber:

http://salingkasih.info/2011/08/cara-install-framework-net-4-error-hresult-0xc8000222/

Aplikasi Serial Terminal Berbasis Java Menggunakan NetBeans IDE (Menggunakan SimpleSerialNative.dll)

_________________________________________

Buatlah New Project.

Pilih Java Aplication lalu Next. Setelah itu isilah Project Name dengan nama java serial dan uncheck Create Main Class lalu Finish.

Setelah itu, buatlah form baru pada Source Packages dengan cara klik kanan pada <default package> lalu pilih New, lalu JFrame Form…

Lalu isilah Class Name dengan serialport lalu Finish.

Lalu copy file SimpleSerial.java dan SimpleSerialNative.java ke folder src pada folder project yang dikerjakan dan copy juga file SimpleSerialNative.dll ke directory folder project sehingga tampak pada window Projects seperti gambar di bawah ini.

Setelah itu buatlah form seperti di bawah ini.

Control Property Value
JFrame Title Java Serial Port
Status_label Text Status:
Receive_textarea lineWrap True
Receive_textarea wrapStyleWord True

Lalu ketiklah kode di bawah ini. kode di bawah adalah kode untuk form GUI

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * java_terminal.java
 *
 * Created on Aug 21, 2011, 11:12:42 PM
 */
/**
 *
 * @author Administrator
 */
import javax.swing.*;

public class java_terminal extends javax.swing.JFrame {

    /** Creates new form java_terminal */
    public java_terminal() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    //
    private void initComponents() {

        textField1 = new java.awt.TextField();
        connect_button = new javax.swing.JButton();
        disconnect_button = new javax.swing.JButton();
        com_label = new javax.swing.JLabel();
        com_combobox = new javax.swing.JComboBox();
        send_textarea = new javax.swing.JTextField();
        kirim_button = new javax.swing.JButton();
        baudrate_combobox = new javax.swing.JComboBox();
        baudrate_label = new javax.swing.JLabel();
        format_data = new javax.swing.JLabel();
        status_label = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        receive_textarea = new javax.swing.JTextArea();
        clear_button = new javax.swing.JButton();

        textField1.setText("textField1");

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("WangReady Java Serial Terminal");
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        connect_button.setText("Connect");
        connect_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                connect_buttonActionPerformed(evt);
            }
        });

        disconnect_button.setText("Disconnect");
        disconnect_button.setEnabled(false);
        disconnect_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                disconnect_buttonActionPerformed(evt);
            }
        });

        com_label.setText("COM yg tersedia");

        kirim_button.setText("Kirim");
        kirim_button.setEnabled(false);
        kirim_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                kirim_buttonActionPerformed(evt);
            }
        });

        baudrate_combobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "110", "300", "600", "1200", "2400", "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200" }));

        baudrate_label.setText("Baudrate");

        format_data.setText("Format data 8N1");

        status_label.setText("Status:");
        status_label.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        receive_textarea.setColumns(20);
        receive_textarea.setEditable(false);
        receive_textarea.setLineWrap(true);
        receive_textarea.setRows(5);
        receive_textarea.setWrapStyleWord(true);
        receive_textarea.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jScrollPane1.setViewportView(receive_textarea);

        clear_button.setText("Bersihkan layar data terima");
        clear_button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clear_buttonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(status_label, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(baudrate_combobox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 87, Short.MAX_VALUE)
                            .addComponent(com_combobox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 87, Short.MAX_VALUE)
                            .addComponent(com_label)
                            .addComponent(baudrate_label, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(format_data)
                            .addComponent(connect_button, javax.swing.GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)
                            .addComponent(disconnect_button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 283, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(clear_button)))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(send_textarea, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(kirim_button)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(com_label)
                        .addGap(3, 3, 3)
                        .addComponent(com_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(baudrate_label)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(baudrate_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(format_data)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(connect_button))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(disconnect_button)
                    .addComponent(clear_button))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(status_label, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(12, 12, 12)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(send_textarea, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE)
                    .addComponent(kirim_button))
                .addContainerGap())
        );

        pack();
    }//
    private SimpleSerialNative ss;
    private void connect_buttonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        String com_string = com_combobox.getSelectedItem().toString();
        int com_port = Integer.parseInt(com_string.substring(3));
        int baudrate = Integer.parseInt(baudrate_combobox.getSelectedItem().toString());
        try{
            ss = new SimpleSerialNative(com_port,baudrate, 8, SimpleSerialNative.ONESTOPBIT, SimpleSerialNative.NOPARITY);
            if(!ss.isValid()){
                status_label.setText("Status: PORT"+com_port +" tidak bisa digunakan. Coba PORT yang lain");
            }else{
                status_label.setText("Status: Connected... COM"+Integer.toString(com_port)+" Baudrate:"+Integer.toString(baudrate)+"bpsCatatan: Disconect apabila ingin close");
                disconnect_button.setEnabled(true);
                kirim_button.setEnabled(true);
                connect_button.setEnabled(false);
                setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

                new Thread(new ReadThread()).start();
            }
        }
        catch(Exception e){
            status_label.setText("Status: PORT tidak bisa digunakan. Coba PORT yang lain");
        }
    }

 /**
 * Buffer to hold the reading
 */
private byte[] readBuffer = new byte[400];

private void readSerial() {
    try {
        int availableBytes = ss.available();
        if (availableBytes > 0) {
            // Print it out
           receive_textarea.append(ss.readString());
        }
    } catch (Exception e) {
    }
}

private  class ReadThread implements Runnable {
        @Override
    public void run() {
        while(true) {
            readSerial();
        }
        }
    }

    private void disconnect_buttonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
         ss.close();
         status_label.setText("Status: Disconnected");
         disconnect_button.setEnabled(false);
         kirim_button.setEnabled(false);
         connect_button.setEnabled(true);
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    private void kirim_buttonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        ss.writeString(send_textarea.getText());
        send_textarea.setText(null);
    }

    private void clear_buttonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        receive_textarea.setText(null);
    }

    private Object makeObj(final String item)  {
     return new Object() {@Override
 public String toString() { return item; } };
   }

    private void formWindowOpened(java.awt.event.WindowEvent evt) {
        // TODO add your handling code here:
        for(int ii = 0;ii < 50;ii++){
            try{
                ss = new SimpleSerialNative(ii+1);
                if(ss.available()==0){
                    com_combobox.addItem(makeObj("COM" + Integer.toString(ii + 1)));
                }
                ss.close();
            }
            catch(Exception e){

            }
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new java_terminal().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JComboBox baudrate_combobox;
    private javax.swing.JLabel baudrate_label;
    private javax.swing.JButton clear_button;
    private javax.swing.JComboBox com_combobox;
    private javax.swing.JLabel com_label;
    private javax.swing.JButton connect_button;
    private javax.swing.JButton disconnect_button;
    private javax.swing.JLabel format_data;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton kirim_button;
    private javax.swing.JTextArea receive_textarea;
    private javax.swing.JTextField send_textarea;
    private javax.swing.JLabel status_label;
    private java.awt.TextField textField1;
    // End of variables declaration
}

Setelah semuanya selesai, Run Project atau F6. Jika berhasil, lalu Build Project atau F11, maka akan muncul forlde dist pada folder project yang berisi file .jar yang siap dijalankan. Akan tetapi file .jar tadi memerlukan file SimpleSerialNative.dll, maka copy file tersebut ke folder dist.

Berikut file yang berisi SimpleSerial.zip yang digunakan sebagai library.

Berikut file project.

http://www.mediafire.com/file/vtmd6kv1tb8sa2m/wangready-java%20terminal.rar

update REVISI

http://www.mediafire.com/?fclogl61qpldqq8

_______________________________

Daftar Pustaka

alumni.media.mit.edu/~benres/simpleserial/

Link Website Menarik Tentang Elektronika dan Programming


Elektronika

http://www.np.edu.sg/alpha/nbk

Berisi tentang micromouse robot, robocup, stm32, h8s2633r, robotkit, alphastudent.

———————————————————————

https://sites.google.com/site/terminalbpp/

Link download hyperterminal Br@y++

———————————————————————

http://winavr.scienceprog.com/download/AVR_LCD_Lib_Demo.zip

Link download library LCD untuk AVR-GCC

———————————————————————

http://winavr.scienceprog.com/comment/28

Using sprintf function for float numbers in AVR-GCC

———————————————————————

http://avrpcm.blogspot.com/2010/11/playing-8-bit-pcm-using-any-avr.html

AVR PCM audio: Playing 8 bit PCM using any AVR microcontroller–The simplest way

———————————————————————

http://www.engbedded.com/fusecalc/

Engbedded AVR Fuse Calculator

———————————————————————

http://talkingelectronics.com/projects/200TrCcts/200TrCcts.html

Berisi tentang aplikasi elektronika sederhana dan segaian besar berbasis transistor ditampilkan dengan sederhana dalam satu halaman. Disertai gambar sirkuit.

———————————————————————

http://www.talkingelectronics.com/te_interactive_index.html

Berisi banyak project disertai sirkuit diagram.

———————————————————————

http://talkingelectronics.com/pay/BEC-2/Page49.html

Basic electronics course “The Schmitt Trigger”.

———————————————————————

http://www.aaroncake.net/circuits/

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.electronic-circuits-diagrams.com/

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.discovercircuits.com/list.htm

Berisi beberapa project disertai sirkuit diagram.

———————————————————————

http://www.sbprojects.com/knowledge/ir/index.php

Berisi tentang IR remote control theory

———————————————————————

http://www.hobbyprojects.com/

Berisi beberapa project disertai sirkuit diagram. Ada juga bagian yang menjelaskan tentang teori elektronika secara umum.

———————————————————————

http://www.recursion.jp/avrcdc/

Berisi tentang aplikasi interfacing perangkat semisal USBtoSerial.

———————————————————————

http://www.simonqian.com/en/AVRminiProg/

Membahas tentang programer/downloader untuk AVR. Jenis downloader AVR ISPMkII.

———————————————————————

http://www.fischl.de/usbasp/

Membahas tentang programer/downloader untuk AVR. Jenis downloader USBasp.

———————————————————————

http://www.plcs.net/contents.shtml

Berisikan tutorial tentang PLC

———————————————————————

http://www.cadvision.com/blanchas/hexfet/

A better H bridge – The Using MOSFETS Website

———————————————————————

http://school.mech.uwa.edu.au/~nscott/How_to_do_stuff/micro_crash_course/pwm/

A crash course in microelectronics

———————————————————————

http://talkingelectronics.com/projects/200TrCcts/200TrCcts.html

200 Transistor Circuits

———————————————————————

http://focus.ti.com/docs/toolsw/folders/print/filterpro.html

Active Filter Design Application – FILTERPRO – TI Software Folder

———————————————————————

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010007

FilterLab Filter Design Software

———————————————————————

http://jbtc-agv.com/en/knowledge/how%20the%20agv%20system%20works.aspx

How the Automatic Guided Vehicle (AGV) System Works

———————————————————————

http://narobo.com/articles/CMUcam.html

CMUcam Tutorial

———————————————————————

http://www.cmucam.org/discussion/message/1343

Message List – CMUcam

———————————————————————

http://www.microsoft.com/robotics/#About

Microsoft Robotics Developer Studio

———————————————————————

http://sourceforge.net/projects/avrwiz/

SourceForge.net Repository – [avrwiz] Index of /

———————————————————————

http://greschenz.dyndns.org/avrwiz/

Avr studio project wizard

———————————————————————

http://www.societyofrobots.com/member_tutorials/node/94
Micromouse – Maze Solver – Theory

———————————————————————

http://circuitdiagram.net/simple-audio-pre-amplifier.html

This is a simple audio Pre-Amplifier with single transistor 2N3904.

———————————————————————


Programming

http://www.codeproject.com/

Berisi artikel project dengan beberapa bahasa pemrograman dan biasanya sourcecodenya dapat didownload dengan terlebih dahulu menjadi member. Terdapat juga forum. Tambahkan codeproject pada google untuk mencari topik programming, itu akan mempermudah pencarian yang menghubungkan ke codeproject.com.

———————————————————————

http://msdn.microsoft.com/en-us/default

Berisi tentang pembahasan mengenai pemrograman yang menggunakan visual studio. Tambahkan msdn pada google untuk mencari topik programming, itu akan mempermudah pencarian yang menghubungkan ke msdn.microsoft.com.

———————————————————————

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf – C++ Reference

———————————————————————

http://msdn.microsoft.com/en-us/library/ms810467.aspx

Serial Communications in Win32

———————————————————————

http://alumni.media.mit.edu/~benres/simpleserial/

Library java untuk komunikasi serial

———————————————————————

http://code.google.com/p/smslib/downloads/detail?name=javacomm20-win32.zip&can=2&q=

Download javacomm-win32 untuk aplikasi komunikasi serial pada java

———————————————————————


E-Book

http://www.intechopen.com/books

Latest Free Open Access Books – Descending – Page 1 | InTechOpen
———————————————————————

http://www.freebookspot.com

FreeBookSpot
———————————————————————


Computer

http://browser9.com/

FREE anonymous proxy server to bypass firewalls.

———————————————————————

http://www.trakax.com/software/pc/download/

Free video editor

———————————————————————

Membuat Aplikasi Chat via Ethernet/Sockets Programming dengan Visual Studio C# 2010

Pendahuluan

Program yang akan dibahas terdiri dari dua bagian, yaitu:

1.       Server, sebagai server yang mana semua client akan mengirim pesan ke computer yang ada aplikasi ini dan mem-broadcast semua pesan ke client.

2.       Client, aplikasi yang dipakai oleh user untuk melakukan chat yang akan terhubung ke server.

Membuat Server

Pertama bukalah aplikasi Visual Studio C# 2010. Lalu pilih new project. Kemudian pilih Console Application dan berilah nama project chat_server pada bagian bawah form, lalu klik OK.

Setelah itu cobalah masukan kode di bawah ini.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Net;

namespace ConsoleApplication1

{

class Program

{

const int portNo = 500;

static void Main(string[] args)

{

//==================================================================

//Mendapatkan Local Machine’s Host Name & IPAddress

//==================================================================

String strHostName = “”;

if (args.Length == 0)

{

// Mendapatkan Ip address dari local machine…

// Pertama cari host name dari local machine.

strHostName = Dns.GetHostName();

Console.WriteLine(“Local Machine’s Host Name: ” + strHostName);

}

else

{

strHostName = args[0];

}

IPHostEntry ipEntry = Dns.GetHostByName(strHostName);

IPAddress[] addr = ipEntry.AddressList;

for (int i = 0; i < addr.Length; i++)

{

Console.WriteLine(“IP Address {0}: {1} “, i, addr[i].ToString());

}

//===================================================================

System.Net.IPAddress localAdd = System.Net.IPAddress.Parse(addr[0].ToString());

TcpListener listener = new TcpListener(localAdd, portNo);

listener.Start();

while (true)

{

ChatClient user = new

ChatClient(listener.AcceptTcpClient());

}

}

}

}

Setelah itu, buat class baru dengan nama “ChatClient” dengan cara klik kanan pada nama project seperti di bawah ini.

Setelah itu, akan muncul form berikut.


Pilih Class dan jangan lupa beri nama “ChatClient” pada bagian bawah form dan klik Add. Setelah itu coba masukan kode seperti di bawah ini.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Collections;

namespace ConsoleApplication1

{

class ChatClient

{

//—berisi daftar semua client—

public static Hashtable AllClients = new Hashtable();

//—informasi tentang client—

private TcpClient _client;

private string _clientIP;

private string _clientNick;

//—digunakan untuk mengirim/menerima data—

private byte[] data;

//—apakah nickname sudah dikirim—

private bool ReceiveNick = true;

public ChatClient(TcpClient client)

{

_client = client;

//—mendapatkan client IP address—

_clientIP = client.Client.RemoteEndPoint.ToString();

//—menambahkan client saat ini ke hash table—

AllClients.Add(_clientIP, this);

//—memulai membaca data dari client pada

// thread terpisah—

data = new byte[_client.ReceiveBufferSize];

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(_client.ReceiveBufferSize), ReceiveMessage, null);

}

public void ReceiveMessage(IAsyncResult ar)

{

//—membaca dari client—

int bytesRead;

try

{

lock (_client.GetStream())

{

bytesRead = _client.GetStream().EndRead(ar);

}

//—client tidak tersambung—

if (bytesRead < 1)

{

AllClients.Remove(_clientIP);

Broadcast(_clientNick + ” has left the chat.”);

return;

}

else

{

//—mendapat pesan yang telah dikirim—

string messageReceived = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);

//—client mengirimkan nicknamenya—

if (ReceiveNick)

{

_clientNick = messageReceived;

//—memberitahu semua client memasuki

// chat—

Broadcast(_clientNick + ” has joined the chat.”);

ReceiveNick = false;

}

else

{

//—memberikan pesan pada semuanya—

Broadcast(_clientNick + “>” + messageReceived);

}

}

//—melanjutkan membaca dari client—

lock (_client.GetStream())

{

_client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(_client.ReceiveBufferSize),ReceiveMessage,null);

}

}

catch (Exception ex)

{

AllClients.Remove(_clientIP);

Broadcast(_clientNick + ” has left the chat.”);

}

}

public void SendMessage(string message)

{

try

{

//—mengirim text—

System.Net.Sockets.NetworkStream ns;

lock (_client.GetStream())

{

ns = _client.GetStream();

}

byte[] bytesToSend =

System.Text.Encoding.ASCII.GetBytes(message);

ns.Write(bytesToSend, 0, bytesToSend.Length);

ns.Flush();

}

catch (Exception ex)

{

Console.WriteLine(ex.ToString());

}

}

public void Broadcast(string message)

{

//—log secara lokal—

Console.WriteLine(message);

foreach (DictionaryEntry c in AllClients)

{

//—memberi pesan pada semua user—

((ChatClient)(c.Value)).SendMessage(

message + Environment.NewLine);

}

}

}

}

Membuat Client

Buatlah project baru dan pilih template Windows Form Application dan berilah nama project tersebut dengan nama “chat” pada bagian bawah form lalu klik OK. Setelah itu, buatlah form seperti pada gambar di bawah ini.

Setelah itu coba buatlah kode seperti di bawah ini.

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.Net.Sockets;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

const int portNo = 500;

TcpClient client;

byte[] data;

public Form1()

{

InitializeComponent();

}

private void btnSignIn_Click(object sender, EventArgs e)

{

if (btnSignIn.Text == “Sign In”)

{

try

{

//—menghubungkan ke server—

client = new TcpClient();

client.Connect(IPServer.Text, portNo);

data = new byte[client.ReceiveBufferSize];

//—membaca dari server—

SendMessage(txtNick.Text);

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(

client.ReceiveBufferSize),

ReceiveMessage, null);

btnSignIn.Text = “Sign Out”;

btnSend.Enabled = true;

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

else

{

//—disconnect dari server—

Disconnect();

btnSignIn.Text = “Sign In”;

btnSend.Enabled = false;

}

}

private void btnSend_Click(object sender, EventArgs e)

{

SendMessage(txtMessage.Text);

txtMessage.Clear();

}

public void SendMessage(string message)

{

try

{

//—mengirim pesan ke server—

NetworkStream ns = client.GetStream();

byte[] data =

System.Text.Encoding.ASCII.GetBytes(message);

//—mengirim text—

ns.Write(data, 0, data.Length);

ns.Flush();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

public void ReceiveMessage(IAsyncResult ar)

{

try

{

int bytesRead;

//—membaca data dari server—

bytesRead = client.GetStream().EndRead(ar);

if (bytesRead < 1)

{

return;

}

else

{

//—memanggil delegate untuk menampilkan

// data yang diterima—

object[] para = {System.Text.Encoding.ASCII.GetString(data, 0, bytesRead) };

this.Invoke(new delUpdateHistory(UpdateHistory),

para);

}

//—melanjutkan membaca…—

client.GetStream().BeginRead(data, 0,

System.Convert.ToInt32(client.ReceiveBufferSize),

ReceiveMessage, null);

}

catch (Exception ex)

{

//—abaikan error, dibuang ketika pengguna sign off—

}

}

//—delegate dan subroutine untuk mengupdate TextBox control—

public delegate void delUpdateHistory(string str);

public void UpdateHistory(string str)

{

txtMessageHistory.AppendText(str);

}

public void Disconnect()

{

try

{

//—Disconnect dari server—

client.GetStream().Close();

client.Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

private void Form_Closing(object sender,FormClosingEventArgs e)

{

Disconnect();

}

}

}

Setelah itu, double clik pada Form1.Designer.cs dan tambahkan kode seperti di bawah ini.

private void InitializeComponent()

{

this.FormClosing += new

System.Windows.Forms.FormClosingEventHandler(this.Form_Closing);

}

Setelah kedua aplikasi diatas (chat server dan client) sudah selesai dibuat, maka program bisa langsung dites pada komputer yang berbeda atau pada satu komputer. Akan tetapi, jika menggunakan satu komputer, aturlah IP address yang diakses oleh client adalah “127.0.0.1” (computer’s loopback address).

————————————————————————————————————-

Daftar Pustaka

http://www.codeproject.com/KB/cs/network.aspx

Lee, Wei-Meng[2007].”Practical .NET 2.0 Networking Projects”. Apress, New York, USA.

MPP Set : Software dan Hardware Pemutar Musik Monophonic

http://www.dailymotion.com/video/xiiabt_mpp-set-clip_tech

MonoPhonicPlayer (MPPlayer)

MonoPhonicPlayer adalah software yang digunakan untuk membuat atau memainkan file .mpp, file yang memainkan music monophonic. .mpp sendiri di buat dengan menggunakan format kode nokia composer. Software ini berbasis java jadi terlebih dahulu harus menginstall JDK (Java Development Kit) agar bisa di-running di PC. Berikut link untuk mendownload file JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html.

MPProgrammer (MPProgrammer)

MPProgrammer adalah software yang digunakan untuk membuat atau mendownload file .mpp ke MPP-Box via serialport. Sama seperti aplikasi di atas, MPProgrammer menggunakan format kode nokia composer.

MPP-Box (Hardware)

MPP-Box adalah perangkat yang memainkan musik monophonic yang terlebih dahulu didownload dari PC menggunakan MPProgrammer  via serialport.

Aplikasi

MPP set ini bisa digunakan sebagai bell di rumah atau sebagai klakson di sepeda atau di motor yang suaranya bisa diganti sesuai keinginan pengguna.

Berikut link untuk mendownload MPP Set http://www.mediafire.com/file/s9qotntbf284k0w/MPP%20set.rar. Isi file : aplikasi MPPlayer, MPProgrammer, MPP-Box (firmware MPP-Box.hex, file PCB Project Eagle format, dan readme.txt).

______________________________________________

Sample Code

Walls

4e1 8g1 4c1 8- 4a1 8c2 4f1 8- 8b1 8g1 8a1 8b1 8d2 8c2

Creed-Higher

16d2 16d2 8d2 16d2 8e2 16e2 16e2 8#f2 16#f2 16e2 16#f2 16#f2 16g2 16e2 16e2 8e2 16e2 8#f2 16#f2 32e2 32#f2 16d2 8e2 16e2 8#f2 8e2 16d2 8d2 16d2 4e2 16e2 8d2 16d2 16d2 16d2 8d2 16b1 16b1 16g2 8#f2 8#f2 16#f2 16e2 8#f2 16#f2 16e2 16d2 8d2 16d2 16d2

Warkop

8d1 8#d1 8- 8e1 8f1 2- 8g1 8#g1 2- 8e1 8f1 8-8g1 8#g1 8- 8#c2 8c2 8- 8f1 8#g1 8- 8c2 1b1 16- 16#a1 16#g1 8f1 8- 8#d1 8f1

Java s0ng
4g1 4b1 4c2 4- 4c2 8- 8e2 4f2 4g2 4f2 4e2 4c2 8- 32b2 32b3 16- 32c3 32c3 32c3 16- 32b2 32b3 16- 32g2 32g2 16- 32g2 32b3 16- 32c3 32c3 4- 4c2 4b1 4g1 4f1 4- 4f1 8- 8e1 4f1 4e1 4g1 4f1 2e1 8-

file .mpp yang dapat didownload. http://www.mediafire.com/file/5y02w2190kb0cu2/tones.mpp.rar


link tentang library tone untuk avr https://wangready.wordpress.com/2011/06/17/library-bahasa-c-untuk-aplikasi-nada-monophonic-pada-mikrokontroler-avr-dengan-compiler-winavr/

file source http://www.mediafire.com/file/wu6z3dmn1ej6dbu/mppset.rar

Aplikasi Komunikasi Serial pada PC Menggunakan Visual C# 2010 / Express

Komunikasi serial pada PC masih sering digunakan untuk beberapa aplikasi yang membutuhkan koneksi dengan mikrokontroler. Mikrokontroler yang mempunyai USART dapat terkoneksi dengan port serial pada PC dengan konektor DB9 dengan menggunakan RS232 standard . Jika menggunakan mikrokontroler avr, maka bisa lihat page berikut https://wangready.wordpress.com/2011/02/02/pemrograman-usart-pada-mikrokontroler-avr-avr-studio-4/ untuk pemrograman menggunakan AVR Studio 4. Berikut perancangan software untuk komunikasi serial dengan mode UART.

Pertama buka aplikasi Visual C# 2010. Kemudian, pilih new project. Lalu pilih lagi Windows Forms Aplication dan ketikan nama project pada bagian bawah form lalu OK. Lalu setelah itu buatlah Form seperti di bawah ini dengan terlebih daulu double click pada Form1.cs pada panel Solution Explorer sebelah kanan agar muncul template dari form tersebut.

Setelah selesai membuat form seperti di atas, perhatikan nilai property pada setiap komponen.

Control

Property

Value

Form1

Text

“Komunikasi serial”

Form1

AcceptButton

btnSend

lblMessage

BorderStyle

FixedSingle

txtDataReceived

ScrollBars

Vertical

txtDataReceived

MultiLine

True

txtDataToSend

MultiLine

True

Setelah itu klik Toolbox yang biasanya ada di sebelah kiri. Lalu pada sub Components klik SerialPort dan klik kembali pada form yang tampil untuk menambahkan komponen SerialPort pada form yang sedang kita buat. Setelah itu ganti nama serialPort1 dengan serialPort sebagai nama yang akan kita gunakan pada panel Properties.

Setelah selesai mengatur tampilan dari Form1, silakan fahami source code di bawah ini.

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 serial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//—menset event handler untuk DataReceived event—
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived);
//—menampilkan nama serialport yang tersedia pada
// komputer—
string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
for (int i = 0; i <= portNames.Length - 1; i++)
{
cbbCOMPorts.Items.Add(portNames[i]);
}
btnDisconnect.Enabled = false;
}

private void btnConnect_Click(object sender, EventArgs e)
{
//—menutup akses serialport apabila akses serialport terbuka—
if (serialPort.IsOpen)
{
serialPort.Close();
}
try
{
//—mengatur beberapa parameter untuk koneksi serial
// port—
serialPort.PortName = cbbCOMPorts.Text;
serialPort.BaudRate = 9600;
serialPort.Parity = System.IO.Ports.Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = System.IO.Ports.StopBits.One;
//—buka serial port—
serialPort.Open();
//—menampilkan status dari serial port dan
// enable/disable -kan tombol—
lblMessage.Text = cbbCOMPorts.Text + " connected.";
btnConnect.Enabled = false;
btnDisconnect.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

private void btnDisconnect_Click(object sender, EventArgs e)
{
try
{
//—tutup serial port—
serialPort.Close();
//—menampilkan status dari serial port dan
// enable/disable -kan tombol—
lblMessage.Text = serialPort.PortName +" disconnected.";
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

private void btnSend_Click(object sender, EventArgs e)
{
try
{
//—menulis tipe data string pada serial port—
serialPort.Write(txtDataToSend.Text + Environment.NewLine);
//—menambahkan string yang telah dikirim pada TextBox control—
txtDataReceived.AppendText(">" + txtDataToSend.Text +  Environment.NewLine);
txtDataReceived.ScrollToCaret();
//—bersihkanTextBox control—
txtDataToSend.Text = string.Empty;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

//—Event handler untuk DataReceived event—
private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//—memanggil delegasi untuk mengambil data yang diterima—
txtDataReceived.BeginInvoke(new myDelegate(updateTextBox));
}

//—Delegate and subroutine untuk ditampilkan pada TextBox control—
public delegate void myDelegate();
public void updateTextBox()
{
//—menambahkan data pada TextBox control—
txtDataReceived.AppendText(serialPort.ReadExisting());
txtDataReceived.ScrollToCaret();
}
}
}

Setelah program jadi dan tidak terdapat pesan pada Error List yang terdapat pada bagian bawah panel kerja, maka program bisa di debug. Klik tombol Start Debugging atau tekan F5.

Setelah berhasil di debug, maka program bisa langsung di-publish untuk menghasilkan setup.exe. Klik kanan pada nama project yang ada pada panel Solution Explorer dan klik properties. Lalu pilih menu Publish dan setting juga Publish Location sesuai keinginan. Lalu klik Publish Wizard… untuk melakukan settingan terlebih dahulu atau Publish Now untuk publish langsung.

Berikut link demo aplikasi komunikasi serial di atas :  files.indowebster.com/download/files/ser_file_app

Berikut link download project :  files.indowebster.com/download/files/ser_code

Daftar Pustaka:

Lee, Wei-Meng[2007].”Practical .NET 2.0 Networking Projects”. Apress, New York, USA.

Control

Property

Value

Form1

Text

“Komunikasi serial”

Form1

AcceptButton

btnSend

lblMessage

BorderStyle

FixedSingle

txtDataReceived

ScrollBars

Vertical

txtDataReceived

MultiLine

True

txtDataToSend

MultiLine

True