« เมื่อ: กันยายน 29, 2018, 01:37:18 PM »
บอร์ดไมโครคอนโทรลเลอร์ที่เป็นที่นิยมมากในปัจจุบันใช้แพลทฟอร์ม Arduino บอร์ดหนึ่งคือ Arduino UNO หรือ Arduino Nano3.0 ซึ่งบอร์ดดังกล่าวนี้สามารถติดต่อสื่อสารด้วยพอร์ตอนุกรมผ่านทางพอร์ต USB (มีวงจรแปลง USB to UART ภายใน) เราสามารถสร้างโปรแกรมเพื่อติดต่อสื่อสารกับบอร์ดไมโครคอนโทรลเลอร์นี้เพื่อให้บอร์ดทำสิ่งหนึ่งสิ่งใดตามที่ต้องการได้ การสร้างโปรแกรมติดต่อสื่อสารใช้การสื่อสารผ่านพอร์ตอนุกรม
สิ่งสำคัญในการเขียนโปรแกรมสื่อสารผ่านพอร์ตอนุกรม
1. เปิดการใช้งานพอร์ตอนุกรมซ้ำในพอร์ตที่เคยเปิดแล้วไม่ได้
2. ก่อนปิดโปรแกรมพอร์ตอนุกรมจะต้องถูกสั่งปิดการใช้งาน
การดำเนินการมีขั้นตอนดังนี้
1. วงจรที่ใช้ทดลอง เชื่อมต่อ LED อนุกรมกับตัวต้านทาน 220 โอห์มเข้าที่ขา D13 กับกราวด์ดังรูป
2. สร้างโปรเจคไฟล์แล้ววางตัวคอนโทรลและแก้ไขชื่อดังรูป ตัวคอนโทรลที่ใช้งานได้แก่
-Button
-ComboBox
-GroupBox
-Label
-SerialPort
3. กดปุ่ม Shift ค้างไว้แล้วคลิกที่ปุ่ม Close, ON, OFF ตั้งค่าคุณสมบัติเริ่มต้นให้ Enable เป็น False เพื่อไม่ให้ปุ่มนี้ทำงาน (เพื่อไม่ให้ถูกใช้งานในกรณีที่พอร์ตอนุกรมยังไม่ถูกเปิด)
4. กดปุ่ม Shift ค้างไว้แล้วคลิกที่คอมโบบ็อกทั้ง 2 ตัวตั้งค่าคุณสมบัติเริ่มต้นให้ DropDownStyle ให้เป็น DropDownList เพื่อไม่ให้ผู้ใช้งานพิมพ์ทับลงในช่องขณะรันโปรแกรม (ให้เลือกอย่างเดียว)
5. คลิกเพิ่มรายการในคอมโบบ็อกที่ใช้เลือกความเร็วในการสื่อสาร
ความเร็วที่ให้เลือกใช้มีดังนี้
9600
19200
38400
57600
74880
115200
6. ดับเบิลคลิกที่ฟอร์ม เขียนโค้ดเพื่อให้โปรแกรมสแกนหาพอร์ตอนุกรมที่คอมพิวเตอร์มองเห็น
โค้ด
baudrate_cbb.SelectedIndex = 0;
string[] ports = SerialPort.GetPortNames();
try
{
port_cbb.Items.AddRange(ports);
port_cbb.SelectedIndex = 0;
}
catch
{
}
7. คลิกที่คอมโบบ็อกที่ใช้เลือกพอร์ต แล้วคลิกเลือกเหตุการณ์กระตุ้นเป็น MouseClick (แล้วดับเบิลคลิก) เพื่อเขียนโค้ดให้ทำงานเมื่อมีเมาส์มาคลิกที่คอมโบบ็อกตัวนี้
8. เขียนโค้ดให้โปรแกรมสแกนหาพอร์ตอนุกรมใหม่ที่คอมพิวเตอร์มองเห็นในจังหวะที่มีการคลิกเมาส์ที่คอมโบบ็อกนี้
โค้ด
port_cbb.Items.Clear();
string[] ports = SerialPort.GetPortNames();
try
{
port_cbb.Items.AddRange(ports);
port_cbb.SelectedIndex = 0;
}
catch
{
}
9. ดับเบิลคลิกที่ปุ่ม Open (ปุ่มสำหรับเปิดการทำงานพอร์ตอนุกรม) แล้วเขียนโค้ด
-เปิดการทำงานของปุ่ม Close, ON, OFF
-เปิดการทำงานพอร์ตอนุกรมโดยนำค่าหมายเลขพอร์ตและค่าความเร็วสื่อสารที่ปรากฎข้อความในคอมโบบ็อกมาใช้งาน
โค้ด
if (serialPort1.IsOpen)
serialPort1.Close();
try
{
serialPort1.PortName = port_cbb.Text;
serialPort1.BaudRate = Convert.ToInt32(baudrate_cbb.Text);
serialPort1.Open();
on_btn.Enabled = true;
off_btn.Enabled = true;
close_btn.Enabled = true;
open_btn.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
10. ดับเบิลคลิกที่ปุ่ม Close (ปุ่มสำหรับปิดการทำงานพอร์ตอนุกรม) แล้วเขียนโค้ด
โค้ด
on_btn.Enabled =false;
off_btn.Enabled = false;
close_btn.Enabled = false;
open_btn.Enabled = true;
if (serialPort1.IsOpen)
serialPort1.Close();
11. ดับเบิลคลิกที่ปุ่ม ON และ OFF เพื่อเขียนโค้ด
-ปุ่ม ON เขียนโค้ดให้ส่งตัวอักษร 'a'
-ปุ่ม OFF เขียนโค้ดให้ส่งตัวอักษร 'A'
โค้ดปุ่ม ON
try
{
serialPort1.Write("a");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
โค้ดปุ่ม OFF
try
{
serialPort1.Write("A");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
12. คลิกที่ฟอร์มเลือกเหตุการณ์กระตุ้นเป็น FormClosing เขียนโค้ดให้ปิดการใช้งานพอร์ตอนุกรมก่อนปิดโปรแกรม
13. โค้ดให้ปิดการใช้งานพอร์ตอนุกรมก่อนปิดโปรแกรม
โค้ด
if (serialPort1.IsOpen)
serialPort1.Close();
Application.Exit();
14. หน้าตาโปรแกรมเมื่อรัน
15. เขียนโค้ดในฝั่ง Arduino เพื่อให้รับค่า a, A ที่เข้ามาทางพอร์ตอนุกรมเพื่อมาควบคุมการติดดับของ LED
โค้ด
#define LED 13
char income;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
income = Serial.read();
switch (income) {
case 'a':
digitalWrite(LED, HIGH);
break;
case 'A':
digitalWrite(LED, LOW);
break;
}
}
}
16. ผลการรัน
https://www.youtube.com/v/cs7ChNoUS3k
« แก้ไขครั้งสุดท้าย: มกราคม 26, 2023, 10:26:16 AM โดย admin »
บันทึกการเข้า