Dalam tutorial Arduino kali ini akan mengulas tentang antarmuka (interfacing) Arduino dengan Visual Studio C#.
Berikut adalah rangkaian sederhana Arduino untuk tutorial ini.
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);
}
}
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.
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
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));
}
}
}
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));
}
}
}