« เมื่อ: กันยายน 30, 2018, 04:21:23 PM »
การสื่อสารทางพอร์ตอนุกรมไม่ว่าจะมาจากบอร์ดไมโครคอนโทรลเลอร์หรือมาจากคอมพิวเตอร์อื่น ๆ มีทั้งรับและส่งข้อมูล การเรียนรู้ในครั้งนี้เป็นการเรียนรู้เรื่องการรับค่าโดยค่าถูกส่งออกมาจากบอร์ดไมโครคอนโทรลเลอร์ Arduino โดยค่าที่ส่งออกมีข้อมูล 2 ตัวโดยคั้นด้วยเครื่องหมาย , โดยฝั่งโปรแกรม Visual C# จะต้องแยกข้อมูลที่ส่งมาไปใช้งาน(แสดงผล)
การดำเนินการมีขั้นตอนดังนี้
1. วงจรที่ใช้ทดลอง เชื่อมต่อโพเทนธิโอมิเตอร์เข้าที่ขา A0 และ 5V,GND ดังรูป
2. สร้างโปรเจคไฟล์แล้ววางตัวคอนโทรลและแก้ไขชื่อดังรูป ตัวคอนโทรลที่ใช้งานได้แก่
-Button
-ComboBox
-GroupBox
-Label
-SerialPort
-TextBox
-ProgressBar
3. คลิกเพิ่มรายการในคอมโบบ็อกที่ใช้เลือกความเร็วในการสื่อสาร
ความเร็วที่ให้เลือกใช้มีดังนี้
9600
19200
38400
57600
74880
115200
4. กดปุ่ม Shift ค้างไว้แล้วคลิกที่คอมโบบ็อกทั้ง 2 ตัวตั้งค่าคุณสมบัติเริ่มต้นให้ DropDownStyle ให้เป็น DropDownList เพื่อไม่ให้ผู้ใช้งานพิมพ์ทับลงในช่องขณะรันโปรแกรม (ให้เลือกอย่างเดียว)
5. คลิกที่ Text Box เลือกให้เป็น MultiLine แล้วลากปรับขนาดเพื่อให้แสดงข้อมูลที่รับมาได้หลายบรรทัด
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. ดับเบิลคลิกที่ปุ่ม Start (ปุ่มสำหรับเปิดการทำงานพอร์ตอนุกรม) แล้วเขียนโค้ด
-เปิดการทำงานของปุ่ม Stop
-ปิดการทำงานของปุ่ม Start เพื่อป้องกันการเปิดพอร์ตซ้ำ
-เปิดการทำงานพอร์ตอนุกรมโดยนำค่าหมายเลขพอร์ตและค่าความเร็วสื่อสารที่ปรากฎข้อความในคอมโบบ็อกมาใช้งาน
โค้ด
start_btn.Enabled = false;
stop_btn.Enabled = true;
if (serialPort1.IsOpen)
serialPort1.Close();
serialPort1.PortName = port_cbb.Text;
serialPort1.BaudRate = Convert.ToInt32(baudrate_cbb.Text);
try
{
serialPort1.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
10. คลิกที่ปุ่ม Stop ตั้งค่าเริ่มต้นให้ Enable เป็น False
11. ดับเบิลคลิกที่ปุ่ม Stop เขียนคำสั่งปิดการใช้พอร์ต
โค้ด
start_btn.Enabled = true;
stop_btn.Enabled = false;
if (serialPort1.IsOpen)
serialPort1.Close();
12. คลิกไอคอน Serial Port เลือกการกระตุ้นเป็น DataReceived แล้วเบิลคลิก
13. เขียนโค้ดเพื่อให้ทำงานเมื่อมีข้อมูลเข้ามาทางพอร์ตอนุกรม
โค้ดส่วนที่ 1
string DispString; //used to store the values read
โค้ดส่วนที่ 2
DispString = serialPort1.ReadLine();
this.Invoke(new EventHandler(DisplayText));
โค้ดส่วนที่ 3
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(DispString + "\r\n");
try
{
string[] value = DispString.Split(new string[] { "," }, StringSplitOptions.None);
label5.Text = value[0];
label6.Text = value[1];
progressBar1.Value = (Convert.ToInt16(value[1])) * 100 / 1023;
}
catch
{ }
}
14. คลิกที่ฟอร์มเลือกเหตุการณ์กระตุ้นเป็น FormClosing เขียนโค้ดให้ปิดการใช้งานพอร์ตอนุกรมก่อนปิดโปรแกรม
15. โค้ดให้ปิดการใช้งานพอร์ตอนุกรมก่อนปิดโปรแกรม
โค้ด
if (serialPort1.IsOpen)
serialPort1.Close();
Application.Exit();
16. เขียนโค้ดลงบอร์ด Arduino พร้อมทดสอบการส่งค่าออกพอร์ตอนุกรม
โค้ด
int value;
void setup() {
Serial.begin(9600);
}
void loop() {
value++;
int adc=analogRead(A0);
Serial.print(value);
Serial.print(",");
Serial.println(adc);
delay(1000);
}
17. ทดสอบโปรแกรม
-เชื่อมต่อบอร์ด Arduino เข้ากับคอมพิวเตอร์
-รันโปรแกรม
-เลือกพอร์ตที่เชื่อมต่อ
-ทดสอบปรับค่าโพเทนธิโอมิเตอร์แล้วสังเกตุผล
https://www.youtube.com/v/pjOV7w1PdV4
« แก้ไขครั้งสุดท้าย: มกราคม 25, 2024, 01:23:35 PM โดย admin »
บันทึกการเข้า