วันนี้เราจะเสนอบทความเรื่อง "การใช้ Visual Basic 2012 คุยกับ Arduino เบื้องต้น" ครับ
ก็ตามหัวข้อนะครับ ผมจะเขียนให้สำหรับผู้ที่สนใจและไม่รู้ว่าจะเริ่มยังไงกับการใช้งานโปรแกรม Visual Basic เพื่อไปควบคุม Board Arduino ต่างๆ ผ่าน Serial port นะครับ ดังนั้นบทความนี้ก็จะประยุกต์ใช้งานได้กับบอร์ดของ Arduino ทุกชนิดที่สามารถสื่อสารผ่าน Serial port ได้ ว่าง่ายๆก็คือใช้ Serial monitor ได้นั่นเอง โดยระหว่างใช้งานกับโปรแกรมที่เขียนขึ้นบน VB นั้น จำเป็นต้องต่อสาย USB อยู่ด้วยตามภาพด้านล่างนะครับ เพราะเราจะสื่อสารผ่าน Serial port กันตลอดเวลา
ในบทความนี้ผมขอไม่ให้รายละเอียดเกี่ยวกับการติดตั้ง Visual Basic และการเขียนโปรแกรมบน VB นะครับ เพราะมันจะอยู่นอกเหนือ Scope ของ website Arduitronics ผมใช้ VB 2012 ในการเขียนบทความนี้ (ขณะที่เขี่ยนอยู่นี้ VB 2013 ออกแล้ว)
ก็ตามที่เห็นในภาพนะครับ เราใช้ LED สีแดงและสีเขียวรับคำสั่งเปิด ปิด ในการสาธิตการสื่อสารระหว่าง Window Form Application กับ Arduino UNO R3
Digital IO port 5 ต่อ LED สีแดง
Digital IO port 6 ต่อ LED สีเขียว
อย่าลืมต่อ Ground และความต้านทานซะหน่อยนะครับ
สำหรับด้าน Arduino Board ก็ให้ upload Sketch ตามนี้ได้เลยครับ
// Arduitronics Article // Arduino Board control via Visual Basic 2012 // www.arduitronics.com // www.facebook.com/arduitronics int f =0;int Red = 8;int Green = 9;//-------------------------------------------void setup(){Serial.begin(115200); // Serial baud rate must be very highpinMode(Green,OUTPUT); //LED 1pinMode(Red,OUTPUT); //LED 2digitalWrite(Green,LOW);digitalWrite(Red,LOW);}//-------------------------------------------void loop() {if (Serial.available()>0){f=Serial.read();// Blink start----------------------------------|if (f==53) { //53 (DEC) = 5 (ASCII character)digitalWrite(Green, HIGH);Serial.flush();}if (f==54) { //54 (DEC) = 6 (ASCII character)digitalWrite(Green,LOW);Serial.flush();}if (f==55) { //55 (DEC) = 7 (ASCII character)digitalWrite(Red, HIGH);Serial.flush();}if (f==56) { //56 (DEC) = 8 (ASCII character)digitalWrite(Red,LOW);Serial.flush();}// Blink End ----------------------------------|// Switch All ON Start ------------------------|if (f==50) { //50 (DEC) = 2 (ASCII character)digitalWrite(Red,HIGH);digitalWrite(Green,HIGH);Serial.flush();Serial.println("I know - Will turn off now !!");Serial.flush();}if (f==51) { //51 (DEC) = 3 (ASCII character)digitalWrite(Red,LOW);digitalWrite(Green,LOW);Serial.flush();Serial.println("OK - Turn off now !");Serial.flush();}// Switch All OFF End ------------------------|}} |
ลองดูรายละเอียด Sketch กันหน่อยครับ
ตัวแปร integer ชื่่อ f จะเป็นตัวแปรที่รับค่ามาจาก Visual Basic โดยการอ่านค่าจาก Serial port ด้วยคำสั่ง
f=Serial.read();
แต่ก่อนที่จะอ่านค่าก็จะมีการตรวจสอบกันซักนิดครับว่ามีการส่งค่ามารึยัง ด้วยคำสั่ง
Serial.available()>0
ทีนี้จะเป็นการกำหนดโค้ดของเราเองครับว่าแต่ละตัวเลขที่ส่งมาจาก VB จะให้ Arduino Board ทำอะไรบ้าง ในตัวอย่างของเราก็จะเป็นดังนี้ครับ
ส่งเลข 6 มาจาก VB -> จะเป็นค่า ASCI Character = 54 -> ให้เปิด LED สีแดง ที่ Digital IO port 8
ส่งเลข 5 มาจาก VB -> จะเป็นค่า ASCI Character = 53 -> ให้เปิด LED สีเขียว ที่ Digital IO port 9
จากนั้นก็ส่งข้อมูลกลับไปที่ VB ด้วยคำสั่ง
Serial.println("I know - Will turn off now !!");
ปิดท้ายด้วย
Serial.flush();
เพื่อรอให้รับส่่งข้อมูลครบเรียบร้อยก่อนแล้วค่อยดำเนินการต่อ
จากนั้นให้เปิด Visual Basic นะครับ โดยการ Download จาก Link ด้านล่าง Unzip file แล้วเลือกเปิด Serial_Arduino_LED_Control.vbproj
https://drive.google.com/file/d/0B4Ig-CbpU0IPQmVSeW5EaU1OQms/edit?usp=sharing
จากนั้นให้ลองตรวจสอบดูนะครับว่า Arduino Board ของเราเป็นการเชื่อมกับ Serial port ที่ COMX ไหน ของผมในตัวอย่างนี้เป็น COM9 ครับ ดังนั้นผมเลยเข้าไปแก้ไขให้ PortName เป็น COM9 ครับ
ในตัวอย่างนี้เรากำหนดให้ Namespace ของ SerialPort มีชื่อ SerialPort1 นะครับ ดังนั้นเวลาเรียก Method ต่างๆ จึงใช้ชื่อผ่าน SerialPort1 ครับ
นอกจากนี้มีการใช้ Timer อยู่ 2 ตัว เพื่อจับเวลาในการกระพริบของ LED ทั้งสองสี เมื่อจับเวลาจบก็จะส่งข้อมูลไปที่ Arduino ผ่านคำสั่ง ดังนี้
SerialPort1.Open()
SerialPort1.Write(6) '6 = LED 1 Blink OFF (54 DEC - see ASCII table)
SerialPort1.Close()
Timer1.Stop()
ในหน้า Form จะเห็นว่ามี Textbox ให้กรอกค่าเวลาเป็นตัวเลย Int นะครับ ตัวเลขนี้จะนำเข้าไปใช้กับ Timer เพื่อจับเวลาในการเปิด/ปิด LED ซึ่งเป็นการทำงานภายใน VB
ดังนั้นจะเห็นว่า VB เป็นตัวจับเวลานะครับ ไม่ใช่การจับเวลาที่ Arduino เท่าที่ผมลองวิธีนี้จะได้ความถี่ที่ไม่สูงมากถึงแม้ว่าจะใส่ค่า timer ต่ำๆ เนื่องจากจะไปเสียเวลาในการติดต่อผ่าน Serial port ครับ
ในกรณีที่มีการกรอกค่าผิดพลาดเช่นกรอกเป็นตัวอักษร หรือ กรอกเป็นเลขทศนิยม ก็จะมีการแจ้งเตือนผ่าน MessageBox ครับ แถมด้วยการกระพริบของ OvalShape เพื่อแสดงการทำงานของ LED ทั้งสองสีครับ
ค่าที่เรารับมาจาก Arduino ก็เอามาแสดงที่ TextBox ด้านล่างของจอครับ ทำโดยคำสั่ง
Dim NewTemp() As String = Split(SerialPort1.ReadLine, ",")
Label5.Text = NewTemp(0)
ทีนี้เนื่องจากเรารับค่ามาทีละบรรทัด ดังนั้นเวลาส่งมาจาก Arduino ก็เลยต้องส่งมาด้วยคำสั่ง Serial.Println() ครับ
บทความนี้เราเขียนโดยได้เค้าโครงมาจาก (ขอให้เครดิตต้นฉบับหน่อยครับ)
http://arduin0.blogspot.com/2012/01/control-arduino-through-serial.html
โดย Mountain A
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,393,408 ครั้ง |
ผู้ชมทั้งหมด | 5,896,486 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 16 ก.ย. 2568 |