Posted on Leave a comment

Arduino Nano with Serial (ก้าวที่สอง)

หลังจากที่ผ่าน ก้าวแรก กันมาแล้ว คราวนี้มาทำความรู้จักกับอีกหนึ่ง function ที่สำคัญมากและใช้กันน่าจะทุกครั้งที่มีการเขียนโปรแกรมเลยทีเดียว นั่นคือ Serial ซึ่งเป็น function การสื่อสารผ่าน UART โดยในที่นี้จะเป็นการสื่อสารระหว่าง Arduino Nano กับ computer ผ่านทางสาย USB ที่ใช้ upload โปรแกรมนั่นเอง โดยส่งข้อมูลหรือสัญญาณเพื่อควบคุม Arduino Nano หรือให้ Arduino Nano ส่งข้อมูลกลับมาให้ computer โดยที่คราวนี้เราใช้ตัวอย่างที่มีอยู่ใน IDE ที่ชื่อว่า PhysicalPixel

อันดับแรกให้เปิด code ตัวอย่าง โดยไปที่ File -> Examples -> 04. Communication -> PhysicalPixel

แล้วลองอ่านในส่วนของ comment ดูจะพบว่า เป็น code ที่ควบคุมการเปิดปิด LED ที่ขา 13 ของ Arduino Nano ด้วยการส่ง H หรือ L จาก computer

Code ส่วนต่างๆ

การประกาศต่าง ๆ (พื้นที่ก่อนถึง setup())

มีการประกาศค่าตัวแปรสองตัว ตัวแรกคือ ledPin เป็นตัวแปร const (เปลี่ยนแปลงภายหลังจากที่ประกาศไม่ได้) ให้มีค่า 13 ก็คือหมายเลขของขาที่ต่อกับ LED

const int lidPin = 13;

ตัวที่สองคือ incomingByte คือตัวแปรที่ใช้เก็บข้อมูลที่ส่งมาจาก computer 

int incomingByte;

setup()

คำสั่งแรกใน setup() เป็นการสั่งให้เริ่มเชื่อมต่อกับ computer โดยกำหนด baud (ความเร็วในการส่งข้อมูล) ที่ 9600 baud

Serial.begin(9600);

การเริ่มการเชื่อมต่อนั้น เมื่อสั่งไปแล้วอาจต้องใช้เวลาสัก 2~3 วินาทีก่อนที่จะเชื่อมต่อเรียบร้อย จึงมักจะเขียนเป็นคำสั่งแรก ๆ

คำสั่งต่อมาน่าจะคุ้นเคยอยู่แล้ว นั่นคือกำหนดให้ขา 13 เป็น Output

pinMode(ledPin, OUTPUT);

loop()

คำสั่งแรกใน loop() เป็นการตรวจสอบว่า มีข้อมูลส่งเข้ามาหรือไม่ 

if (Serial.available() > 0)

ถ้ามีข้อมูลส่งเข้ามา ให้อ่านข้อมูลแล้วมาเก็บไว้ที่ ตัวแปร incommingByte ถ้าไม่มีก็วน loop มาตรวจสอบใหม่

incommingByte = Serial.read()

จากนั้นตรวจสอบว่า ข้อมูลที่อ่านเข้ามาคือ H หรือไม่

if (incommingByte == ‘H’)

ถ้าใช่ ก็ให้ส่ง High ออกไปที่ขา ledPin ถ้าไม่ใช่ก็ข้ามไป

digitalWrite(ledPin, HIGH);

จากนั้นตรวจสอบว่า ข้อมูลที่อ่านเข้ามาคือ L หรือไม่

if (incommingByte == ‘L’)

ถ้าใช่ก็ให้ส่ง Low ออกไปที่ขา ledPin แต่ถ้าไม่ใช่ก็ข้ามไป

digitalWrite(ledPin, LOW);

เมื่อทำเสร็จหมดแล้ว ก็กลับไปเริ่มที่คำสั่งแรกของ loop() อีกครั้ง

เมื่อเข้าใจ code แล้ว เราก็ลอง upload กันเลย จากนั้นก็กดที่ Serial monitor ที่มุมขวา (คล้ายแว่นขยาย) ก็จะได้หน้าต่าง Serial monitor ขึ้นมาด้านล่าง จากนั้นให้กำหนด baud ให้เป็น 9600 baud เหมือนที่เราตั้งไว้ใน code 

แล้วลอง พิมพ์ H ในช่อง Message แล้ว enter จะเห็นว่า LED ที่ Arduino Nano สว่างขึ้นมา ถ้ากด L แล้ว enter ก็จะดับไป คราวนี้ถ้าเป็น ตัวพิมพ์เล็กบ้างล่ะ จะเป็นอย่างไร ไม่มีการเปลี่ยนแปลงใช่ไหมล่ะครับ แล้วถ้ากดแป้นอื่น ๆ ดู จะเป็นอย่างไร ก็ไม่มีอะไรเปลี่ยนแปลงเหมือนเดิมใช่ไหม แสดงว่า การทำงานเป็นไปตามที่เราสั่งทุกอย่าง

ส่วนคำสั่งที่อยู่ใน comment ด้านล่างของ code เอาไว้ใช้กับโปรแกรม Processing หรือ Max/MSP อาจลองศึกษาเพิ่มเติมด้วยตัวเองดูนะครับ

สรุป

คราวนี้เราได้เรียนรู้การสื่อสารผ่านสาย USB โดยให้คำสั่งในกลุ่มของ Serial ซึ่งมีคำสั่งในกลุ่มนี้ที่น่าสนใจอีกหลายตัว ผู้อ่านสามารถศึกษาเพิ่มเติมได้จาก function reference ได้เลยนะครับ

แบบฝึกหัด

คราวนี้ลองคิดกันดูนะครับว่า 

  1. ถ้าอยากให้ใช้ h, l แทน H, L ล่ะ จะต้องปรับ code อย่างไร 
  2. ถ้าอยากให้ใช้ได้ทั้งตัวพิมพ์ใหญ่และพิมพ์เล็กต้องปรับ code อย่างไร ( guide: ลองศึกษาเรื่อง Boolean Operators ดูนะครับ)
  3. จากข้อ 2 ถ้าเราส่งตัวอักษรอื่นที่ไม่ใช่ทั้ง H, h, L หรือ l แล้วให้ Arduino Nano ส่งข้อความกลับมาที่ Serial monitor เพื่อบอกเราว่า ระบบรองรับแค่ H, h, L หรือ l เท่านั้นนะ จะต้องปรับ codeอย่างไร ( guide: ลองศึกษา function ในกลุ่มของ Serial เพิ่มเติมดูนะครับ)

ขอแนะนำว่า เวลาเขียน code ในระดับเริ่มต้นนี้ ยังไม่ต้องกังวลว่า code จะสวยหรือไม่ เร็วที่สุดหรือไม่ ใช้ memory น้อยที่สุดแล้วหรือไม่ ขอแค่ทำได้ตามที่เราต้องการ และอ่านเข้าใจง่าย ก็ถือว่าดีมากแล้ว เพียงเท่านี้ เราก็สามารถควบคุมการเปิดปิด LED ที่ต่อกับ Arduino Nano จาก computer ผ่านสาย USB ได้แล้ว ไม่ยากเลยใช่ไหมล่ะครับ

ศึกษาเพิ่มเติม

ใส่ความเห็น