เปิดปิดไฟ LED ของ Arduino ด้วยภาษา C#
ตัวอย่างง่ายๆซึ่งจะใช้ช่องทางติดต่อการสื่อสารผ่านพอร์ทอนุกรม (Series Port) จากคอมพิวเตอร์ไปที่ Arduino UNO R3 เพื่อทำการควบคุมการทำงาน เปิด/ปิด หลอดไฟ LED ที่เชื่อมต่อกับขา 13 ซึ่งมาพร้อมกับบอร์ดอยู่แล้ว โดยใช้ Visual Studio 2015 เขียนโปรแกรมด้วยภาษา C# ทำ GUI (graphical user interface) ซึ่งเป็นการติดต่อกับผู้ใช้โดยใช้ภาพสัญลักษณ์ (Window Application) และสามารถนำไปติดตั้งในคอมพิวเตอร์ ระบบปฏิบัติการ Windows เครื่องอื่นๆได้
หลักการทำงานของการติดต่อนี้ จะเป็นการติดต่อด้วย สตริง (String) หรือ Character sequence เป็นประเภทข้อมูลแบบข้อความที่ประกอบไปด้วยหลายตัวอักษร เป็นการส่งข้อมูลเป็นแบบข้อความ โดยสื่อสารผ่านพอร์ทอนุกรม (Series Port) ระหว่าง Window Application กับ Arduino UNO R3
ขั้นตอนการทํางาน
1 : โปรแกรมแรก กับ Arduino UNO R3
โดยศึกษา ขั้นตอนการทำงาน จากลิงค์บทความ ด้านล่าง
2 : อัพโหลดโค้ดให้บอร์ด Arduino
การทำงานของโค้ดนี้คือ รอรับคำสั่งจาก Window Application ภาษา C# โดย ถ้ารับค่า เป็น 1 ให้ LED ติด และ ถ้ารับค่ามาเป็น 0 ให้ LED ดับ
เปิดโปรแกรม Arduino IDE เขียนโปรแกรม หรือ Sketch และอัพโหลดโค้ด ด้วยโค้ดด้านล่างนี้
char My_Input;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop()
{
My_Input = Serial.read();
switch (My_Input)
{
case'1':
digitalWrite(13, HIGH);
break;
case'0':
digitalWrite(13, LOW);
break;
}
}
3 : โปรแกรมแรก กับ Visual Studio 2015
โดยศึกษา ขั้นตอนการทำงาน จากลิงค์บทความ ด้านล่าง
4 : สร้าง Window Application เพื่อ ควบคุม Arduino
เปิดโปรแกรม Visual Studio 2015
สร้างโปรเจคสำหรับเขียนโค้ดภาษา C# ในตัวอย่างชื่อ LED_App
ไปที่ Common Controls ลาก ComboBox จาก Toolbox ไปยัง Form1
และ ลาก Button จาก Toolbox ไปยัง Form1
เปลี่ยนข้อความที่แสดง button1 โดยไปที่ Text เปลี่ยนเป็น Connect
ไปที่ Components ลาก SerialPort จาก Toolbox ไปวางบริเวณ Form1 แล้ว serialPort1 จะเพิ่มเข้ามาที่ด้านล่างของ Form1 โดยอัตโนมัติ
กลับไปที่ Form1.cs [Design] เลือกไปที่ Pointer และคลิกที่ปุ่ม button1 (ที่แสดงข้อความ Connect)
จะมีแท็ป Form1.cs เพิ่มเข้ามา ซึ่งส่วนนี้มีไว้สำหรับเขียนโค้ด
ที่ส่วนบนสุดของโค้ด เรียกใช้ System.IO.Ports ด้วยโค้ดด้านล่าง
using System.IO.Ports;
ที่ public Form1 เขียนโค้ดดังนี้
public Form1()
{
InitializeComponent();
String[] strPortNames = SerialPort.GetPortNames();
foreach (string n in strPortNames)
{
comboBox1.Items.Add(n);
}
try
{
comboBox1.SelectedIndex = 0;
comboBox1.Enabled = true;
button1.Enabled = true;
}
catch
{
comboBox1.Text = "Unavailable";
}
}
คลิก Save All
ไปที่ Visual Studio 2015 ทดสอบการทำงานโดย ไปที่ Debug ->Start Debugging
ถ้าไม่ได้เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปยังบอร์ด Arduino UNO R3 หรือ มีปัญหาในการเชื่อมต่อ ที่ comboBox1 จะแสดงข้อความ Unavailable
หยุดทดสอบการทำงาน โดย คลิก Stop Debugging
ให้เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปยังบอร์ด Arduino UNO R3 (ที่โหลดโค้ดตามขั้นตอนที่ 2 เรียบร้อยแล้ว)
ตรวจสอบที่ Ports (COM & LPT) จะพบ Arduino Uno ในตัวอย่างเป็น (COM3)
แล้วทดสอบการทำงานอีกครั้ง โดย ไปที่ Debug ->Start Debugging ที่ comboBox1 จะแสดงข้อความ COM3 แสดงว่า Window Application ที่เราเขียนอยู่ ติดต่อสื่อสารกับ บอร์ด Arduino UNO R3 ได้แล้ว
กลับไปที่ Form1.cs [Design] เพิ่ม button2 ไปที่ Form1 แล้วแก้ไขให้แสดงข้อความเป็น ON
และที่ Enabled แก้ไขให้เป็น False คือเมื่อเริ่มต้นทำงานจะมองเห็น button2 แต่ไม่สามารถคลิกได้
เพิ่ม button3 ไปที่ Form1 แล้วแก้ไขให้แสดงข้อความเป็น OFF และ Enabled เป็น False
คลิกที่ button1 (Connect) เพื่อไปเขียนโค้ดที่ button1_Click ดังนี้
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = comboBox1.SelectedItem + "";
serialPort1.Open();
button2.Enabled = true;
button3.Enabled = true;
{
กลับไปที่ Form1.cs [Design] คลิกที่ button2 (ON)
เพื่อไปเขียนโค้ดที่ button2_Click ดังนี้
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Write("1");
{
กลับไปที่ Form1.cs [Design] คลิกที่ button3 (OFF) เพื่อไปเขียนโค้ดที่ button3_Click ดังนี้
private void button3_Click(object sender, EventArgs e)
{
serialPort1.Write("0");
{
คลิก Save All แล้ว ทดสอบการทำงานโดย ไปที่ Debug -> Start Debugging
คลิกที่ button1 (Connect)
คลิกที่ button2 (ON)
ผลลัพธ์ : หลอดไฟ LED ที่เชื่อมต่อกับขา 13 แสดงผล “ติด”
และ เมื่อคลิกที่ button3 (OFF)
ผลลัพธ์ : หลอดไฟ LED ที่เชื่อมต่อกับขา 13 แสดงผล “ดับ” แสดงว่า โปรแกรมเปิดปิดไฟ LED ของ Arduino ด้วยภาษา C# สําเร็จแล้ว