Tutorial Arduino Komunikasi Serial dengan Antarmuka Visual Studio C#


Dalam tutorial Arduino kali ini akan mengulas tentang antarmuka (interfacing) Arduino dengan Visual Studio C#.
Berikut adalah rangkaian sederhana Arduino untuk tutorial ini.

<img src="arduino_adc.png" alt="arduino_adc">


Fungsi dari potentiometer dalam rangkaian tersebut untuk mengatur nilai tegangan input untuk Arduino. Potentiometer bekerja dengan prinsip pembagi tegangan, dimana terdapat kaki untuk sumber tegangan dihubungkan ke Vcc 5 volt Arduino, ground dihubungkan ke ground Arduino, dan data tegangan dihubungkan ke pin analog A3 Arduino. Nilai tegangan input diolah oleh ADC Arduino dan kemudian akan ditampilkan dengan antarmuka window form Visual Studio C#.
Berikut ini adalah source code untuk Arduino membaca nilai ADC dan mengirimkan nilai tersebut melalui komunikasi serial ke antarmuka window form Visual Studio C#.

/*
Program membaca nilai ADC
dengan serial

Loki Lang
*/

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available())
  {
    int adc = analogRead(A3);
    Serial.print(adc);
    delay(1000);
  }
}


Sedangkan untuk design window form Visual Studio C# bisa dirancang seperti berikut ini.

<img src="design.png" alt="design.png">


Untuk tool yang digunakan antara lain.
  • Button, nama connectButton, untuk memulai komunikasi serial
  • Button, nama disconnectButton, untuk menghentikan komunikasi serial
  • ComboBox, nama comboBox1, untuk memilih COM port yang tersedia
  • TextBox, nama textBox1, untuk menampilkan data nilai ADC disertai waktu sesuai pada operating system komputer
  • SerialPort, akses komunikasi serial
Dalam beberapa tutorial yang ada menggunakan konstanta string untuk COM port. Hal cukup merepotkan, karena bila COM port yang digunakan berubah maka harus mengubah string nama COM port sebelumnya. Penggunaan ComboBox memberikan kemudahan untuk memilih COM port yang sesuai dengan method GetPortNames dari class SerialPort. Method GetPortNames mengembalikan (return) value berupa System.String[], COM port yang tersedia.
Berikut ini source code Visual Studio C# untuk memulai komunikasi serial dan menerima data nilai ADC dari Arduino.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace basicSerialCOM
{
    public partial class Form1 : Form
    {
        String stringRx;

        public Form1()
        {
            InitializeComponent();
            string[] ports = SerialPort.GetPortNames();
            foreach(string port in ports)
            {
                comboBox1.Items.Add(port);
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text != null)
            {
                connectButton.Enabled = true;
            }
        }

        private void connectButton_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.Text;
            serialPort1.BaudRate = 9600;
            serialPort1.Open();
            connectButton.Enabled = false;
            disconnectButton.Enabled = true;
        }

        private void disconnectButton_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            connectButton.Enabled = true;
            disconnectButton.Enabled = false;
            textBox1.Clear();
        }

        private void displayText(object sender , EventArgs e)
        {
            textBox1.AppendText(stringRx + " " + DateTime.Now.ToString() + "\n");
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            stringRx = serialPort1.ReadLine();
            this.Invoke(new EventHandler(displayText));
        }
    }
}